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