Clover Coverage Report - Kuali Student 1.2.1-SNAPSHOT (Aggregated)
Coverage timestamp: Wed Nov 2 2011 04:03:58 EST
../../../../../../../img/srcFileCovDistChart0.png 42% of files have more coverage
78   206   43   8.67
46   153   0.55   4.5
9     4.78  
2    
 
  SearchUtils       Line # 30 72 0% 37 121 0% 0.0
  SearchUtils.SearchRequestWrapper       Line # 37 6 0% 6 12 0% 0.0
 
No Tests
 
1    package org.kuali.student.common.ui.client.util;
2   
3    import java.util.ArrayList;
4    import java.util.HashSet;
5    import java.util.Iterator;
6    import java.util.List;
7   
8    import org.kuali.student.common.assembly.data.Data;
9    import org.kuali.student.common.assembly.data.Data.Property;
10    import org.kuali.student.common.assembly.data.Data.Value;
11    import org.kuali.student.common.assembly.data.Data.StringValue;
12    import org.kuali.student.common.assembly.data.LookupMetadata;
13    import org.kuali.student.common.assembly.data.LookupParamMetadata;
14    import org.kuali.student.common.assembly.data.Metadata.WriteAccess;
15    import org.kuali.student.common.search.dto.SearchParam;
16    import org.kuali.student.common.search.dto.SearchRequest;
17    import org.kuali.student.common.search.dto.SortDirection;
18    import org.kuali.student.common.ui.client.application.Application;
19    import org.kuali.student.common.ui.client.configurable.mvc.FieldDescriptor;
20    import org.kuali.student.common.ui.client.mvc.HasDataValue;
21    import org.kuali.student.common.ui.client.widgets.KSTextBox;
22   
23    import com.google.gwt.core.client.GWT;
24   
25    /**
26    *
27    * This is a library of utility methods that can be used when working with the search rpc service.
28    *
29    */
 
30    public class SearchUtils {
31   
32    /**
33    * This class wraps the search request, with additional information needed to execute/process
34    * a search, such as handling constraints or whether the search should be deferred.
35    *
36    */
 
37    public static class SearchRequestWrapper{
38    SearchRequest searchRequest;
39    HashSet<String> crossConstraints = new HashSet<String>();
40    boolean deferSearch = false;
41   
 
42  0 toggle public SearchRequest getSearchRequest() {
43  0 return searchRequest;
44    }
45   
 
46  0 toggle public void setSearchRequest(SearchRequest searchRequest) {
47  0 this.searchRequest = searchRequest;
48    }
49   
 
50  0 toggle public HashSet<String> getCrossConstraints() {
51  0 return crossConstraints;
52    }
53   
 
54  0 toggle public void setCrossConstraints(HashSet<String> constraints) {
55  0 this.crossConstraints = constraints;
56    }
57   
 
58  0 toggle public boolean isDeferSearch() {
59  0 return deferSearch;
60    }
61   
 
62  0 toggle public void setDeferSearch(boolean deferSearch) {
63  0 this.deferSearch = deferSearch;
64    }
65    }
66   
67    /**
68    * Use this to build a SearchRequest given a LookupMetadata definition. The search
69    * request can then be passed into the SearchRpcService to retreive a list of search
70    * results.
71    *
72    * @param lookup
73    * @return
74    */
 
75  0 toggle public static SearchRequest initializeSearchRequest(LookupMetadata lookup) {
76    //Initialize the search using the SearchRequestWrapper, but return only the
77    //SearchRequest, since the consumer doesn't care about additional search data
78  0 SearchRequestWrapper searchRequestWrapper = new SearchRequestWrapper();
79  0 initializeSearchRequest(lookup, searchRequestWrapper);
80  0 return searchRequestWrapper.getSearchRequest();
81    }
82   
83    /**
84    * Use this to build a SearchRequest, update search constraints and deferred search options
85    * contained within the SearchRequestWrapper. The wrapper is mostly to accommodate handling
86    * of search options required for constraining values that appear in the KSPicker.
87    *
88    * Generally this method should not be called directly if only the SearchRequest is required.
89    * @see SearchUtils#initializeSearchRequest(LookupMetadata)
90    *
91    * @param lookup
92    * @return
93    */
 
94  0 toggle public static void initializeSearchRequest(LookupMetadata lookup, SearchRequestWrapper searchRequestWrapper) {
95   
96  0 HashSet<String> crossConstraints = searchRequestWrapper.getCrossConstraints();
97   
98  0 SearchRequest sr = new SearchRequest();
99  0 List<SearchParam> params = new ArrayList<SearchParam>();
100   
101  0 sr.setSearchKey(lookup.getSearchTypeId());
102   
103  0 if (lookup.getResultSortKey() != null){
104  0 sr.setSortColumn(lookup.getResultSortKey());
105    }
106  0 if(SortDirection.DESC.equals(lookup.getSortDirection())){
107  0 sr.setSortDirection(SortDirection.DESC);
108    }
109   
110    //initialize search parameters that are hidden from the UI because they are set to default context specific values
111  0 for(final LookupParamMetadata metaParam: lookup.getParams()){
112  0 if(metaParam.getWriteAccess() == WriteAccess.NEVER){
113  0 if ((metaParam.getDefaultValueString() == null || metaParam.getDefaultValueString().isEmpty())&&
114    (metaParam.getDefaultValueList() == null || metaParam.getDefaultValueList().isEmpty())&&
115    (metaParam.getFieldPath() == null || metaParam.getFieldPath().isEmpty())) {
116    //FIXME throw an exception?
117  0 GWT.log("Key = " + metaParam.getKey() + " has write access NEVER but has no default value!", null);
118  0 continue;
119    }
120  0 final SearchParam param = new SearchParam();
121  0 param.setKey(metaParam.getKey());
122  0 if(metaParam.getFieldPath()!=null){
123  0 FieldDescriptor fd = null;
124  0 String finalPath = resolvePath(metaParam.getFieldPath());
125  0 crossConstraints.add(finalPath);
126  0 fd = Application.getApplicationContext().getPathToFieldMapping(null, finalPath);
127  0 if(fd!=null){
128  0 Value value = null;
129  0 if(fd.getFieldElement().getFieldWidget() instanceof KSTextBox){
130  0 value = new StringValue(((KSTextBox)fd.getFieldElement().getFieldWidget()).getValue());
131    }
132  0 if(fd.getFieldElement().getFieldWidget() instanceof HasDataValue){
133  0 value = ((HasDataValue)fd.getFieldElement().getFieldWidget()).getValue();
134    }
135  0 if(value!=null&&value.get()!=null){
136  0 if(value.get() instanceof Data){
137  0 ArrayList<String> listValue = new ArrayList<String>();
138  0 for(Iterator<Property> iter =((Data)value.get()).realPropertyIterator();iter.hasNext();){
139  0 listValue.add(iter.next().getValue().toString());
140    }
141  0 if(listValue.isEmpty()){
142  0 listValue.add("");
143    }
144  0 param.setValue(listValue);
145    }else{
146  0 param.setValue(value.get().toString());
147    }
148    }else{
149  0 param.setValue((String)null);
150    }
151    }
152  0 searchRequestWrapper.setDeferSearch(true);
153  0 }else if(metaParam.getDefaultValueList()==null){
154  0 param.setValue(metaParam.getDefaultValueString());
155    }else{
156  0 param.setValue(metaParam.getDefaultValueList());
157    }
158  0 params.add(param);
159    }
160  0 else if(metaParam.getWriteAccess() == WriteAccess.WHEN_NULL){
161  0 if((metaParam.getDefaultValueString() != null && !metaParam.getDefaultValueString().isEmpty())||
162    (metaParam.getDefaultValueList() != null && !metaParam.getDefaultValueList().isEmpty())||
163    (metaParam.getFieldPath() != null && !metaParam.getFieldPath().isEmpty())){
164  0 final SearchParam param = new SearchParam();
165  0 param.setKey(metaParam.getKey());
166  0 if(metaParam.getFieldPath()!=null){
167  0 FieldDescriptor fd = null;
168  0 String finalPath;
169  0 if(metaParam.getFieldPath().startsWith("/")){
170  0 finalPath=metaParam.getFieldPath().substring(1);
171    }else{
172  0 finalPath=Application.getApplicationContext().getParentPath()+metaParam.getFieldPath();
173    }
174  0 crossConstraints.add(finalPath);
175  0 fd = Application.getApplicationContext().getPathToFieldMapping(null, finalPath);
176  0 if(fd!=null){
177  0 if(fd.getFieldElement().getFieldWidget() instanceof HasDataValue){
178  0 Value value = ((HasDataValue)fd.getFieldElement().getFieldWidget()).getValue();
179  0 param.setValue(value==null?null:value.get()==null?null:value.get().toString());
180    }
181    }
182  0 searchRequestWrapper.setDeferSearch(true);
183  0 }else if(metaParam.getDefaultValueList()==null){
184  0 param.setValue(metaParam.getDefaultValueString());
185    }else{
186  0 param.setValue(metaParam.getDefaultValueList());
187    }
188  0 params.add(param);
189    }
190    }
191    }
192  0 sr.setParams(params);
193  0 searchRequestWrapper.setSearchRequest(sr);
194    }
195   
 
196  0 toggle public static String resolvePath(String path) {
197  0 String finalPath;
198  0 if(path.startsWith("/")){
199  0 finalPath=path.substring(1);
200    }else{
201  0 finalPath=Application.getApplicationContext().getParentPath()+path;
202    }
203  0 return finalPath;
204    }
205   
206    }