From a29ca62bae9d0d689c66f2330fdf80dcc0f6c3b5 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 27 Feb 2012 13:41:36 +0100 Subject: [PATCH 1/4] Added support for sortable params to KeywordDao --- .../match/dao/interfaces/KeywordDao.java | 40 +++++++++++++++++++ .../match/dao/jpa/KeywordDaoJPAImp.java | 21 ++++++++++ 2 files changed, 61 insertions(+) diff --git a/src/main/java/se/su/dsv/scipro/match/dao/interfaces/KeywordDao.java b/src/main/java/se/su/dsv/scipro/match/dao/interfaces/KeywordDao.java index eb4d64b5a8..80e609f010 100644 --- a/src/main/java/se/su/dsv/scipro/match/dao/interfaces/KeywordDao.java +++ b/src/main/java/se/su/dsv/scipro/match/dao/interfaces/KeywordDao.java @@ -1,8 +1,10 @@ package se.su.dsv.scipro.match.dao.interfaces; +import java.io.Serializable; import java.util.List; import java.util.Set; +import se.su.dsv.scipro.data.dao.interfaces.Dao; import se.su.dsv.scipro.data.dao.interfaces.LazyDeleteDao; import se.su.dsv.scipro.match.dataobject.Keyword; import se.su.dsv.scipro.match.dataobject.KeywordType; @@ -10,6 +12,7 @@ import se.su.dsv.scipro.match.dataobject.KeywordType; public interface KeywordDao extends LazyDeleteDao<Keyword>{ Set<Keyword> getKeywords(KeywordType type, boolean includeDeleted); + List<Keyword> getKeywordList(Params params); public List<Keyword> findAllFromType(KeywordType kt, boolean includeDeleted); @@ -17,4 +20,41 @@ public interface KeywordDao extends LazyDeleteDao<Keyword>{ Keyword getKeywordByNameAndType(String keywordName, KeywordType type); + public static class Params extends Dao.SortableParams implements Serializable { + + private static final long serialVersionUID = 5317030582030781723L; + + private String keyword; + private KeywordType type; + private boolean includeDeleted = false; + + public Params() { + //Sort keywords on their name in ascending order as default when using Params + setSortOn("keyword", Sort.ASCENDING); + } + + public void setKeyword(String keyword) { + this.keyword = keyword; + } + + public String getKeyword() { + return keyword; + } + + public void setType(KeywordType type) { + this.type = type; + } + + public KeywordType getType() { + return type; + } + + public void setIncludeDeleted(boolean includeDeleted) { + this.includeDeleted = includeDeleted; + } + + public boolean isIncludeDeleted() { + return includeDeleted; + } + } } diff --git a/src/main/java/se/su/dsv/scipro/match/dao/jpa/KeywordDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/match/dao/jpa/KeywordDaoJPAImp.java index f1b466f4a7..9b4860b570 100644 --- a/src/main/java/se/su/dsv/scipro/match/dao/jpa/KeywordDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/match/dao/jpa/KeywordDaoJPAImp.java @@ -14,6 +14,7 @@ import org.springframework.orm.jpa.JpaCallback; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import se.su.dsv.scipro.data.dao.jpa.AbstractQuerySet; import se.su.dsv.scipro.data.dao.jpa.AbstractSortableQuerySet; import se.su.dsv.scipro.data.dao.jpa.LazyDeleteAbstractDaoJPAImp; import se.su.dsv.scipro.data.dao.jpa.Query; @@ -41,6 +42,18 @@ public class KeywordDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Keyword> imple } } + @Override + public List<Keyword> getKeywordList(Params params) { + return getJpaTemplate().execute(createQuerySet(params).fetchCallback()); + } + + private AbstractQuerySet<Keyword> createQuerySet(Params params) { + return new QuerySet() + .type(params.getType()) + .includeDeleted(params.isIncludeDeleted()) + .sort(params); + } + private static class QuerySet extends AbstractSortableQuerySet<Keyword> { public QuerySet() { super(Keyword.class); @@ -55,6 +68,14 @@ public class KeywordDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Keyword> imple return this; } + public QuerySet includeDeleted(boolean includeDeleted) { + if(!includeDeleted) { + getQuery().combine( + new Query().where("k.deleted = false")); + } + return this; + } + public QuerySet noDeleted() { getQuery().combine( new Query().where("k.deleted = false")); From e21b6c7039d368ab48a5d999b2186707761791dc Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 27 Feb 2012 13:42:11 +0100 Subject: [PATCH 2/4] changes in keyword data provider to match new params --- .../dataprovider/KeywordsDataProvider.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/match/dataprovider/KeywordsDataProvider.java b/src/main/java/se/su/dsv/scipro/match/dataprovider/KeywordsDataProvider.java index 82e4409e98..19c9e821fd 100644 --- a/src/main/java/se/su/dsv/scipro/match/dataprovider/KeywordsDataProvider.java +++ b/src/main/java/se/su/dsv/scipro/match/dataprovider/KeywordsDataProvider.java @@ -5,6 +5,7 @@ import java.util.Iterator; import org.apache.wicket.spring.injection.annot.SpringBean; import se.su.dsv.scipro.data.dao.interfaces.Dao; +import se.su.dsv.scipro.data.dao.interfaces.Dao.SortableParams.Sort; import se.su.dsv.scipro.dataproviders.SortSpecifier; import se.su.dsv.scipro.dataproviders.SortableDataProvider; import se.su.dsv.scipro.match.dao.interfaces.KeywordDao; @@ -15,29 +16,34 @@ public class KeywordsDataProvider extends SortableDataProvider<Keyword>{ private static final long serialVersionUID = 1L; - private KeywordType keywordType = null; - @SpringBean protected KeywordDao keywordDao; + private KeywordDao.Params params; @Override protected Dao<Keyword> getDao() { return keywordDao; } - public KeywordsDataProvider(final SortSpecifier sortSpecifier, KeywordType keywordType) { + public KeywordsDataProvider(KeywordType keywordType, boolean includeDeleted) { + this(null, keywordType, includeDeleted); + } + + public KeywordsDataProvider(final SortSpecifier sortSpecifier, KeywordType keywordType, boolean includeDeleted) { super(sortSpecifier, Keyword.class); - this.keywordType = keywordType; + params = new KeywordDao.Params(); + params.setIncludeDeleted(includeDeleted); + params.setType(keywordType); } public Iterator<Keyword> iterator(int first, int count) { - Iterator<Keyword> iter = keywordDao.getKeywords(keywordType, true).iterator(); + Iterator<Keyword> iter = keywordDao.getKeywordList(params).iterator(); return iter; } @Override public int size() { - return keywordDao.getKeywords(keywordType, true).size(); + return keywordDao.getKeywordList(params).size(); } } \ No newline at end of file From 9d7f9e4343132098bf8cda49810eb9425de57310 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 27 Feb 2012 13:43:50 +0100 Subject: [PATCH 3/4] Switched to new param implementation when retrieving keywords on a few pages --- .../admin/panels/match/ManageKeywordPanel.java | 2 +- .../match/panel/FilterFormKeywordPanel.java | 6 ++++-- .../project/panels/KeywordSelectionPanel.java | 16 +++++++++++----- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java index a75eca0610..631bae94a0 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java @@ -58,7 +58,7 @@ public class ManageKeywordPanel extends Panel { dialog.add(new EmptyPanel("dialogContent")); dialog.setOutputMarkupId(true); - keywordsDataProvider = new KeywordsDataProvider(null, keywordType); + keywordsDataProvider = new KeywordsDataProvider(keywordType, true); tableContainer = new WebMarkupContainer("table"); tableContainer.setOutputMarkupId(true); diff --git a/src/main/java/se/su/dsv/scipro/match/panel/FilterFormKeywordPanel.java b/src/main/java/se/su/dsv/scipro/match/panel/FilterFormKeywordPanel.java index 707767139c..76510c3fd1 100644 --- a/src/main/java/se/su/dsv/scipro/match/panel/FilterFormKeywordPanel.java +++ b/src/main/java/se/su/dsv/scipro/match/panel/FilterFormKeywordPanel.java @@ -47,8 +47,10 @@ public class FilterFormKeywordPanel extends Panel { KeywordType kwType = keywordTypeDao.findByType(type); - Set<Keyword> tmpWords = keywordDao.getKeywords(kwType, true); - keywords = new ArrayList<Keyword>(tmpWords); + KeywordDao.Params params = new KeywordDao.Params(); + params.setType(kwType); + params.setIncludeDeleted(true); + keywords = keywordDao.getKeywordList(params); CompoundPropertyModel<List<Keyword>> keyWordModel = new CompoundPropertyModel<List<Keyword>>(keywords); checkGroup = new CheckGroup<Keyword>("checkGroup", new ArrayList<Keyword>()); diff --git a/src/main/java/se/su/dsv/scipro/project/panels/KeywordSelectionPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/KeywordSelectionPanel.java index b76ca424a8..ae907f9960 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/KeywordSelectionPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/KeywordSelectionPanel.java @@ -133,8 +133,9 @@ public class KeywordSelectionPanel extends Panel { if (keywordProvider.getObject() != null) { ideaAreaKeywords = new ArrayList<Keyword>(keywordProvider.getObject().getKeywords().getFiltered(area)); } - Set<Keyword> areaKeySet = keywordDao.getKeywords(area, false); - List<Keyword> areaKeyList = new ArrayList<Keyword>(areaKeySet); + KeywordDao.Params params = new KeywordDao.Params(); + params.setType(area); + List<Keyword> areaKeyList = keywordDao.getKeywordList(params); CompoundPropertyModel<List<Keyword>> listModel = new CompoundPropertyModel<List<Keyword>>(areaKeyList); researchAreaGroup = new CheckGroup<Keyword>("researchAreaGroup", ideaAreaKeywords); @@ -162,13 +163,18 @@ public class KeywordSelectionPanel extends Panel { } } private void addRegularKeywordSelection() { - KeywordType keyword = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR); - List<Keyword> selectedWords = keywordProvider.getObject().getKeywords().getFiltered(keyword); + KeywordType keywordType = keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR); + List<Keyword> selectedWords = keywordProvider.getObject().getKeywords().getFiltered(keywordType); ideaKeywords = new ArrayList<Keyword>(); if(!selectedWords.isEmpty()) ideaKeywords = new ArrayList<Keyword>(selectedWords); - Set<Keyword> keySet = keywordDao.getKeywords(keyword, false); + KeywordDao.Params params = new KeywordDao.Params(); + params.setType(keywordType); + + List<Keyword> keywordList = keywordDao.getKeywordList(params); + Set<Keyword> keySet = new HashSet<Keyword>(keywordList); + //Set<Keyword> keySet = keywordDao.getKeywords(keywordType, false); regularKeywordsPalette = new Palette<Keyword>("keywordPalette", new ListModel<Keyword>(ideaKeywords), new CollectionModel<Keyword>(keySet), From 974f95864cbe412e4149a2c12ed5b78064351414 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 27 Feb 2012 13:44:20 +0100 Subject: [PATCH 4/4] unit test for new keyword dao method --- .../java/se/su/dsv/scipro/match/dao/TestKeywordDao.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/se/su/dsv/scipro/match/dao/TestKeywordDao.java b/src/test/java/se/su/dsv/scipro/match/dao/TestKeywordDao.java index e7dfbf2b91..ecdde37710 100644 --- a/src/test/java/se/su/dsv/scipro/match/dao/TestKeywordDao.java +++ b/src/test/java/se/su/dsv/scipro/match/dao/TestKeywordDao.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.match.dao; import java.util.HashSet; +import java.util.List; import java.util.Set; import org.junit.Assert; @@ -70,6 +71,12 @@ public class TestKeywordDao { Set<Keyword> keywords = target.getKeywords(standard, true); Assert.assertEquals(new HashSet<Keyword>( Arrays.asList(new Keyword[] { keyword1, keyword2 })), keywords); + + KeywordDao.Params params = new KeywordDao.Params(); + params.setType(standard); + + List<Keyword> keywordList = target.getKeywordList(params); + Assert.assertEquals(Arrays.asList(new Keyword[]{keyword1, keyword2}), keywordList); } @Test