1 18 package org.apache.beehive.netui.databinding.datagrid.runtime.config; 19 20 21 import java.util.Map ; 22 import java.util.HashMap ; 23 import java.util.ArrayList ; 24 import java.util.List ; 25 import java.util.Iterator ; 26 27 import org.apache.beehive.netui.databinding.datagrid.api.DataGridState; 28 import org.apache.beehive.netui.databinding.datagrid.api.pager.PagerModel; 29 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel; 30 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortStrategy; 31 import org.apache.beehive.netui.databinding.datagrid.api.sort.Sort; 32 import org.apache.beehive.netui.databinding.datagrid.api.DataGridURLBuilder; 33 import org.apache.beehive.netui.util.Bundle; 34 35 49 class DefaultDataGridURLBuilder 50 extends DataGridURLBuilder { 51 52 private transient DefaultDataGridStateCodec _codec; 53 54 61 DefaultDataGridURLBuilder(DefaultDataGridStateCodec codec) { 62 _codec = codec; 63 } 64 65 76 public String getPagerRowQueryParamKey() { 77 return DefaultDataGridStateCodec.PARAM_KEY_ROW; 78 } 79 80 88 public Map getQueryParams() { 89 Map params = _codec.getExistingParams(); 90 Map newParams = new HashMap (); 91 92 addSortParams(newParams); 93 addFilterParams(newParams); 94 addPagerParams(newParams); 95 96 params = mergeMaps(params, newParams); 97 params = transformMap(params); 98 99 return params; 100 } 101 102 110 public Map getQueryParamsForFirstPage() { 111 Map params = _codec.getExistingParams(); 112 Map newParams = new HashMap (); 113 114 PagerModel pagerModel = getDataGridState().getPagerModel(); 115 assert pagerModel != null; 116 117 addSortParams(newParams); 118 addFilterParams(newParams); 119 newParams.putAll(_codec.buildPageParamMap(new Integer (pagerModel.getRowForFirstPage()), 120 new Integer (pagerModel.getPageSize()))); 121 122 params = mergeMaps(params, newParams); 123 params = transformMap(params); 124 125 return params; 126 } 127 128 137 public Map getQueryParamsForPreviousPage() { 138 Map params = _codec.getExistingParams(); 139 Map newParams = new HashMap (); 140 141 PagerModel pagerModel = getDataGridState().getPagerModel(); 142 assert pagerModel != null; 143 144 addSortParams(newParams); 145 addFilterParams(newParams); 146 newParams.putAll(_codec.buildPageParamMap(new Integer (pagerModel.getRowForPreviousPage()), 147 new Integer (pagerModel.getPageSize()))); 148 149 params = mergeMaps(params, newParams); 150 params = transformMap(params); 151 152 return params; 153 } 154 155 164 public Map getQueryParamsForNextPage() { 165 Map params = _codec.getExistingParams(); 166 Map newParams = new HashMap (); 167 168 PagerModel pagerModel = getDataGridState().getPagerModel(); 169 assert pagerModel != null; 170 171 addSortParams(newParams); 172 addFilterParams(newParams); 173 newParams.putAll(_codec.buildPageParamMap(new Integer (pagerModel.getRowForNextPage()), 174 new Integer (pagerModel.getPageSize()))); 175 176 params = mergeMaps(params, newParams); 177 params = transformMap(params); 178 179 return params; 180 } 181 182 190 public Map getQueryParamsForLastPage() { 191 Map params = _codec.getExistingParams(); 192 Map newParams = new HashMap (); 193 194 PagerModel pagerModel = getDataGridState().getPagerModel(); 195 assert pagerModel != null; 196 197 addSortParams(newParams); 198 addFilterParams(newParams); 199 newParams.putAll(_codec.buildPageParamMap(new Integer (pagerModel.getRowForLastPage()), 200 new Integer (pagerModel.getPageSize()))); 201 202 params = mergeMaps(params, newParams); 203 params = transformMap(params); 204 205 return params; 206 } 207 208 221 public String [] getPagerParamValues() { 222 PagerModel pagerModel = getDataGridState().getPagerModel(); 223 224 String [] params = new String [pagerModel.getPageCount()]; 225 for(int i = 0; i < params.length; i++) { 226 params[i] = _codec.encodePageSize(pagerModel.encodeRowForPage(i)); 227 } 228 229 return params; 230 } 231 232 245 public Map buildSortQueryParamsMap(String sortExpression) { 246 247 SortModel sortModel = getDataGridState().getSortModel(); 248 SortStrategy sortStrategy = sortModel.getSortStrategy(); 249 250 List currSorts = sortModel.getSorts(); 251 ArrayList newSorts = new ArrayList (); 252 if(currSorts == null || currSorts.size() == 0) { 253 Sort sort = new Sort(); 254 sort.setSortExpression(sortExpression); 255 sort.setDirection(sortStrategy.getDefaultDirection()); 256 newSorts.add(sort); 257 } 258 else { 259 boolean foundSort = false; 260 for(int i = 0; i < currSorts.size(); i++) { 261 Sort sort = (Sort)currSorts.get(i); 262 if(!sort.getSortExpression().equals(sortExpression)) { 263 newSorts.add(sort); 264 } 265 else { 266 Sort newSort = new Sort(); 267 newSort.setSortExpression(sortExpression); 268 newSort.setDirection(sortStrategy.nextDirection(sort.getDirection())); 269 newSorts.add(newSort); 270 foundSort = true; 271 } 272 } 273 if(!foundSort) { 274 Sort newSort = new Sort(); 275 newSort.setSortExpression(sortExpression); 276 newSort.setDirection(sortStrategy.getDefaultDirection()); 277 newSorts.add(newSort); 278 } 279 } 280 281 Map params = _codec.getExistingParams(); 282 Map newParams = new HashMap (); 283 284 Map tmp = _codec.buildSortParamMap(newSorts); 285 if(tmp != null) 286 newParams.putAll(tmp); 287 288 addFilterParams(newParams); 289 addPagerParams(newParams); 290 291 params = mergeMaps(params, newParams); 292 params = transformMap(params); 293 294 return params; 295 } 296 297 private final DataGridState getDataGridState() { 298 return _codec.getDataGridState(); 299 } 300 301 private void addSortParams(Map map) { 302 Map tmp = _codec.buildSortParamMap(getDataGridState().getSortModel().getSorts()); 303 if(tmp != null) 304 map.putAll(tmp); 305 } 306 307 private void addFilterParams(Map map) { 308 Map tmp = _codec.buildFilterParamMap(getDataGridState().getFilterModel().getFilters()); 309 if(tmp != null) 310 map.putAll(tmp); 311 } 312 313 private void addPagerParams(Map map) { 314 Map tmp = _codec.buildPageParamMap(new Integer (getDataGridState().getPagerModel().getRow()), 315 new Integer (getDataGridState().getPagerModel().getPageSize())); 316 if(tmp != null) 317 map.putAll(tmp); 318 } 319 320 private Map mergeMaps(Map curr, Map merge) { 321 Map newMap = new HashMap (); 322 if(curr != null) 323 newMap.putAll(curr); 324 325 Iterator iterator = merge.keySet().iterator(); 326 while(iterator.hasNext()) { 327 String key = (String )iterator.next(); 328 assert merge.get(key) instanceof String []; 329 String [] values = (String [])merge.get(key); 330 if(newMap.containsKey(key)) { 331 Object currValues = newMap.get(key); 332 if(currValues instanceof List ) { 333 List currList = (List )currValues; 334 for(int i = 0; i < values.length; i++) { 335 currList.add(values[i]); 336 } 337 } 338 else 339 throw new IllegalStateException (Bundle.getErrorString("DataGridURLBuilder_UnableToMergeValues", 340 new Object []{currValues.getClass().getName()})); 341 } 342 else 343 newMap.put(key, values); 344 } 345 return newMap; 346 } 347 348 private Map transformMap(Map map) { 349 HashMap newMap = new HashMap (); 350 Iterator iterator = map.keySet().iterator(); 351 while(iterator.hasNext()) { 352 String key = (String )iterator.next(); 353 Object values = map.get(key); 354 if(values instanceof String []) 355 newMap.put(key, values); 356 else if(values instanceof List ) 357 newMap.put(key, ((List )values).toArray(new String [0])); 358 else if(values == null) 359 newMap.put(key, null); 360 else 361 assert false : "Found invalid type in map: " + values.getClass().getName(); 362 } 363 364 return newMap; 365 } 366 } 367 | Popular Tags |