Coverage Report - org.kuali.student.common.ui.client.widgets.list.SearchResultListItems
 
Classes in this File Line Coverage Branch Coverage Complexity
SearchResultListItems
0%
0/76
0%
0/26
1.667
 
 1  
 /**
 2  
  * Copyright 2010 The Kuali Foundation Licensed under the
 3  
  * Educational Community License, Version 2.0 (the "License"); you may
 4  
  * not use this file except in compliance with the License. You may
 5  
  * obtain a copy of the License at
 6  
  *
 7  
  * http://www.osedu.org/licenses/ECL-2.0
 8  
  *
 9  
  * Unless required by applicable law or agreed to in writing,
 10  
  * software distributed under the License is distributed on an "AS IS"
 11  
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 12  
  * or implied. See the License for the specific language governing
 13  
  * permissions and limitations under the License.
 14  
  */
 15  
 
 16  
 package org.kuali.student.common.ui.client.widgets.list;
 17  
 
 18  
 import java.util.ArrayList;
 19  
 import java.util.Collections;
 20  
 import java.util.List;
 21  
 
 22  
 import org.kuali.student.common.assembly.data.LookupMetadata;
 23  
 import org.kuali.student.common.search.dto.ResultColumnInfo;
 24  
 import org.kuali.student.common.search.dto.SearchResultRow;
 25  
 
 26  
 /**
 27  
  * This is a ListItems adapter for search results returned by the search service.
 28  
  * Searches must return id as the first column to be compatible with the ListItems interface. 
 29  
  * 
 30  
  * @author Kuali Student Team
 31  
  *
 32  
  */
 33  
 public class SearchResultListItems implements ListItems{
 34  
 
 35  
     private ArrayList<String> attrKeys;
 36  0
     private List<SearchResultRow> resultDataMap = new ArrayList<SearchResultRow>();
 37  0
     private int attrOffset = 0;
 38  
     //default values for attr indexes
 39  
     //these are necessary for use in search dispatcher assumed 2 columns min
 40  
     //we may want to switch these all to 0 to allow for 1 column result lists
 41  0
     private int sortAttrNdx = 1;        //sort key
 42  0
     private int itemTextAttrNdx = 1;
 43  0
     private int keyAttrNdx = 0;         //unique key
 44  
         
 45  
     public int getSortAttrNdx() {
 46  0
                 return sortAttrNdx;
 47  
         }
 48  
 
 49  
         public void setSortAttrNdx(int sortAttrNdx) {
 50  0
                 this.sortAttrNdx = sortAttrNdx;
 51  0
         }
 52  
 
 53  
         public void setSortAttrNdxFromAttrKey(List<SearchResultRow> results, String sortAttrKey) {
 54  0
                 this.sortAttrNdx = getAttrKeyNdx(results, sortAttrKey);
 55  0
         }
 56  
 
 57  
         public int getKeyAttrNdx() {
 58  0
                 return keyAttrNdx;
 59  
         }
 60  
 
 61  
         public void setKeyAttrNdx(int keyAttrNdx) {
 62  0
                 this.keyAttrNdx = keyAttrNdx;
 63  0
         }
 64  
         
 65  
         public void setKeyAttrNdxFromAttrKey(List<SearchResultRow> results, String keyAttrKey) {
 66  0
                 this.keyAttrNdx = getAttrKeyNdx(results, keyAttrKey);
 67  0
         }
 68  
 
 69  
         public int getItemTextAttrNdx() {
 70  0
                 return itemTextAttrNdx;
 71  
         }
 72  
 
 73  
         public void setItemTextAttrNdx(int itemTextAttrNdx) {
 74  0
                 this.itemTextAttrNdx = itemTextAttrNdx;
 75  0
         }
 76  
 
 77  
         public void setItemTextAttrNdxFromAttrKey(List<SearchResultRow> results, String itemTextAttrKey) {
 78  0
                 this.itemTextAttrNdx = getAttrKeyNdx(results, itemTextAttrKey);
 79  0
         }
 80  
         
 81  0
         public SearchResultListItems(){ 
 82  0
     }
 83  
     
 84  
     private void setAttrNdxs(List<SearchResultRow> results, LookupMetadata lookupMetadata) {
 85  
             
 86  0
             setItemTextAttrNdxFromAttrKey(results, lookupMetadata.getResultDisplayKey());
 87  0
             setKeyAttrNdxFromAttrKey(results, lookupMetadata.getResultReturnKey());
 88  0
             setSortAttrNdxFromAttrKey(results, lookupMetadata.getResultSortKey());        
 89  0
     }
 90  
     
 91  0
     public SearchResultListItems(List<ResultColumnInfo> resultColumns, List<SearchResultRow> results, LookupMetadata lookupMetadata){
 92  
             
 93  0
             setAttrNdxs(results, lookupMetadata);
 94  0
             setResultColumns(resultColumns);
 95  0
         setResults(results);
 96  0
     }   
 97  
     
 98  0
     public SearchResultListItems(List<SearchResultRow> results, LookupMetadata lookupMetadata){
 99  
     
 100  0
             setAttrNdxs(results, lookupMetadata);
 101  0
         setResults(results);
 102  0
     }
 103  
     
 104  0
     public SearchResultListItems(List<SearchResultRow> results){
 105  
         
 106  0
             setResults(results);
 107  0
     }
 108  
             
 109  
     public void setResultColumns(List<ResultColumnInfo> resultColumns){
 110  0
         attrKeys = new ArrayList<String>();
 111  
         
 112  0
         for (ResultColumnInfo r:resultColumns){
 113  0
             attrKeys.add(r.getName());
 114  
         }
 115  
         
 116  
         //Exclude identifier column from list items (don't want this displayed)
 117  0
         attrKeys.remove(0);
 118  0
         attrOffset = 1;
 119  0
     }
 120  
            
 121  
     public void setResults(List<SearchResultRow> results) {          
 122  0
         resultDataMap.clear();
 123  
 
 124  0
         if (results != null){            
 125  0
             resultDataMap = new ArrayList<SearchResultRow>(results);           
 126  
             
 127  
             //Default keys for column attributes
 128  0
             if (results.size() > 0){
 129  0
                 SearchResultRow r = results.get(0);
 130  0
                 if (attrKeys == null){
 131  0
                     attrKeys = new ArrayList<String>();
 132  0
                     for (int i=0; i < r.getCells().size(); i ++){
 133  0
                         attrKeys.add("attr" + String.valueOf(i));
 134  
                     }
 135  
                 }
 136  
             }
 137  
         }
 138  0
     }
 139  
     
 140  
     private int getAttrKeyNdx(List<SearchResultRow> results, String keyAttrKey) {
 141  
 
 142  0
             if (results.size() > 0){
 143  0
                 for (int i=0; i < results.get(0).getCells().size(); i++){
 144  0
                         if (results.get(0).getCells().get(i).getKey().equals(keyAttrKey)) {
 145  0
                                 return i;
 146  
                         }
 147  
                 }
 148  
                 }
 149  
                 
 150  0
                 return 0;
 151  
         }
 152  
     
 153  
     @Override
 154  
     public List<String> getAttrKeys() {                       
 155  0
         return attrKeys;
 156  
     }
 157  
 
 158  
     @Override
 159  
     public String getItemAttribute(String id, String attrKey) {
 160  0
         SearchResultRow r = getListItem(id);
 161  
         
 162  0
         int attrIndex = attrKeys.indexOf(attrKey);
 163  0
         if (attrIndex >= 0 && r != null){
 164  0
             return r.getCells().get(attrIndex + attrOffset).getValue(); 
 165  
         }
 166  
 
 167  0
         return null;
 168  
     }
 169  
 
 170  
     /**
 171  
      * @see org.kuali.student.common.ui.client.widgets.list.ListItems#getItemCount()
 172  
      */
 173  
     @Override
 174  
     public int getItemCount() {
 175  0
         return resultDataMap.size();
 176  
     }
 177  
 
 178  
     /**
 179  
      * @see org.kuali.student.common.ui.client.widgets.list.ListItems#getItemIds()
 180  
      */
 181  
     @Override
 182  
     public List<String> getItemIds() {
 183  0
         List<String> ids = new ArrayList<String>();
 184  
 
 185  0
         for (SearchResultRow s:resultDataMap){
 186  0
             ids.add(s.getCells().get(keyAttrNdx).getValue());
 187  
         }
 188  
         
 189  0
         return ids;
 190  
     }
 191  
 
 192  
     /**
 193  
      * @see org.kuali.student.common.ui.client.widgets.list.ListItems#getItemText(java.lang.String)
 194  
      */
 195  
     @Override
 196  
     public String getItemText(String id) {
 197  0
         return getListItem(id).getCells().get(itemTextAttrNdx).getValue();
 198  
     }
 199  
     
 200  
     private SearchResultRow getListItem(String id) {
 201  0
         for (SearchResultRow s : resultDataMap) {
 202  0
             if (s.getCells().get(keyAttrNdx).getValue().equals(id)) {
 203  0
                 return s;
 204  
             }
 205  
         }
 206  0
         return null;
 207  
     }
 208  
     
 209  
     /**
 210  
      * 
 211  
      * This method returns an unmodifiable view of the SearchResultRow list
 212  
      * 
 213  
      * @return
 214  
      */
 215  
     public List<SearchResultRow> getReadOnlyResults() {
 216  0
         return Collections.unmodifiableList(resultDataMap);
 217  
     }
 218  
 }