- Timestamp:
- 02/04/10 21:56:24 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
MetadataBeans/trunk/src/main/java/org/eobjects/metamodel/MetaModelHelper.java
r886 r887 44 44 import org.eobjects.metamodel.util.ObjectComparator; 45 45 46 47 46 /** 48 47 * This class contains various helper functionality to common tasks involving … … 67 66 * list of tables and columns are included 68 67 */ 69 public static Table[] getTables(List<Table> tableList, List<Column> columnList) { 68 public static Table[] getTables(List<? extends Table> tableList, 69 List<? extends Column> columnList) { 70 70 HashSet<Table> set = new HashSet<Table>(); 71 71 set.addAll(tableList); … … 103 103 */ 104 104 public static Column[] getTableColumns(Table table, List<Column> columns) { 105 return getTableColumns(table, columns.toArray(new Column[columns.size()])); 105 return getTableColumns(table, columns 106 .toArray(new Column[columns.size()])); 106 107 } 107 108 … … 129 130 } 130 131 131 public static DataSet getCarthesianProduct(DataSet[] fromDataSets, List<FilterItem> whereItems) { 132 return getCarthesianProduct(fromDataSets, whereItems.toArray(new FilterItem[whereItems.size()])); 133 } 134 135 public static DataSet getCarthesianProduct(DataSet[] fromDataSets, FilterItem... filterItems) { 132 public static DataSet getCarthesianProduct(DataSet[] fromDataSets, 133 List<FilterItem> whereItems) { 134 return getCarthesianProduct(fromDataSets, whereItems 135 .toArray(new FilterItem[whereItems.size()])); 136 } 137 138 public static DataSet getCarthesianProduct(DataSet[] fromDataSets, 139 FilterItem... filterItems) { 136 140 // First check if carthesian product is even nescesary 137 141 if (fromDataSets.length == 1) { … … 156 160 Object[] values = fromDataSet.getRow().getValues(); 157 161 Object[] row = new Object[selectItems.size()]; 158 System.arraycopy(values, 0, row, selectItemOffset, values.length); 162 System.arraycopy(values, 0, row, selectItemOffset, 163 values.length); 159 164 data.add(row); 160 165 } … … 171 176 for (int j = 0; j < fromDataRows.size(); j++) { 172 177 Object[] newRow = fromDataRows.get(j); 173 System.arraycopy(newRow, 0, originalRow, selectItemOffset, newRow.length); 178 System.arraycopy(newRow, 0, originalRow, 179 selectItemOffset, newRow.length); 174 180 data.add(i + j, originalRow.clone()); 175 181 } … … 179 185 } 180 186 181 SelectItem[] finalSelectItems = selectItems.toArray(new SelectItem[selectItems.size()]); 187 SelectItem[] finalSelectItems = selectItems 188 .toArray(new SelectItem[selectItems.size()]); 182 189 for (Iterator<Object[]> it = data.iterator(); it.hasNext();) { 183 190 Object[] objects = it.next(); … … 193 200 } 194 201 195 public static DataSet getFiltered(DataSet dataSet, List<FilterItem> filterItems) { 196 return getFiltered(dataSet, filterItems.toArray(new FilterItem[filterItems.size()])); 197 } 198 199 public static DataSet getFiltered(DataSet dataSet, FilterItem... filterItems) { 202 public static DataSet getFiltered(DataSet dataSet, 203 List<FilterItem> filterItems) { 204 return getFiltered(dataSet, filterItems 205 .toArray(new FilterItem[filterItems.size()])); 206 } 207 208 public static DataSet getFiltered(DataSet dataSet, 209 FilterItem... filterItems) { 200 210 if (filterItems.length == 0) { 201 211 return dataSet; … … 219 229 } 220 230 221 public static DataSet getSelection(List<SelectItem> selectItems, DataSet dataSet) { 222 return getSelection(selectItems.toArray(new SelectItem[selectItems.size()]), dataSet); 231 public static DataSet getSelection(List<SelectItem> selectItems, 232 DataSet dataSet) { 233 return getSelection(selectItems.toArray(new SelectItem[selectItems 234 .size()]), dataSet); 223 235 } 224 236 … … 233 245 SelectItem selectItem = selectItems[i]; 234 246 if (selectItem.getSubQuerySelectItem() != null) { 235 resultRow[i] = row.getValue(selectItem.getSubQuerySelectItem()); 247 resultRow[i] = row.getValue(selectItem 248 .getSubQuerySelectItem()); 236 249 } else { 237 250 resultRow[i] = row.getValue(selectItem); … … 246 259 } 247 260 248 public static DataSet getGrouped(List<SelectItem> selectItems, DataSet dataSet, List<GroupByItem> groupByItems) { 249 return getGrouped(selectItems.toArray(new SelectItem[selectItems.size()]), dataSet, groupByItems 250 .toArray(new GroupByItem[groupByItems.size()])); 251 } 252 253 public static DataSet getGrouped(SelectItem[] selectItems, DataSet dataSet, GroupByItem[] groupByItems) { 261 public static DataSet getGrouped(List<SelectItem> selectItems, 262 DataSet dataSet, List<GroupByItem> groupByItems) { 263 return getGrouped(selectItems 264 .toArray(new SelectItem[selectItems.size()]), dataSet, 265 groupByItems.toArray(new GroupByItem[groupByItems.size()])); 266 } 267 268 public static DataSet getGrouped(SelectItem[] selectItems, DataSet dataSet, 269 GroupByItem[] groupByItems) { 254 270 DataSet result = dataSet; 255 271 if (groupByItems != null && groupByItems.length > 0) { … … 262 278 263 279 // Creates a list of SelectItems that have functions 264 List<SelectItem> functionItems = getFunctionSelectItems(Arrays.asList(selectItems)); 280 List<SelectItem> functionItems = getFunctionSelectItems(Arrays 281 .asList(selectItems)); 265 282 266 283 // Loop through the dataset and identify groups … … 300 317 objects.add(""); 301 318 } else { 302 throw new IllegalArgumentException("Expression function not supported: " + item); 319 throw new IllegalArgumentException( 320 "Expression function not supported: " + item); 303 321 } 304 322 } … … 309 327 310 328 // Loop through the groups to generate aggregates 311 for (Entry<Row, Map<SelectItem, List<Object>>> entry : uniqueRows.entrySet()) { 329 for (Entry<Row, Map<SelectItem, List<Object>>> entry : uniqueRows 330 .entrySet()) { 312 331 Row row = entry.getKey(); 313 332 Map<SelectItem, List<Object>> functionInput = entry.getValue(); … … 326 345 List<Object> objects = functionInput.get(item); 327 346 if (objects != null) { 328 Object functionResult = item.getFunction().evaluate(objects.toArray()); 347 Object functionResult = item.getFunction() 348 .evaluate(objects.toArray()); 329 349 resultRow[i] = functionResult; 330 350 } else { 331 351 if (item.getFunction() != null) { 332 _log.error("No function input found for SelectItem: " + item); 352 _log 353 .error("No function input found for SelectItem: " 354 + item); 333 355 } 334 356 } … … 343 365 } 344 366 345 public static DataSet getAggregated(List<SelectItem> resultSelectItems, DataSet dataSet) { 367 public static DataSet getAggregated(List<SelectItem> resultSelectItems, 368 DataSet dataSet) { 346 369 List<SelectItem> functionItems = getFunctionSelectItems(resultSelectItems); 347 370 if (functionItems.isEmpty()) { 348 371 return dataSet; 349 372 } else { 350 SelectItem[] resultSelectItemsArray = resultSelectItems.toArray(new SelectItem[resultSelectItems.size()]); 373 SelectItem[] resultSelectItemsArray = resultSelectItems 374 .toArray(new SelectItem[resultSelectItems.size()]); 351 375 Map<SelectItem, List<Object>> functionInput = new HashMap<SelectItem, List<Object>>(); 352 376 for (SelectItem item : functionItems) { … … 366 390 Column column = item.getColumn(); 367 391 if (column != null) { 368 Object value = inputRow.getValue(new SelectItem(column)); 392 Object value = inputRow 393 .getValue(new SelectItem(column)); 369 394 objects.add(value); 370 395 } else if (SelectItem.isCountAllItem(item)) { … … 373 398 objects.add(""); 374 399 } else { 375 throw new IllegalArgumentException("Expression function not supported: " + item); 400 throw new IllegalArgumentException( 401 "Expression function not supported: " + item); 376 402 } 377 403 } … … 382 408 Object[] values = new Object[resultSelectItemsArray.length]; 383 409 for (int i = 0; i < resultSelectItemsArray.length; i++) { 384 Object value = inputRow.getValue(resultSelectItemsArray[i]); 410 Object value = inputRow 411 .getValue(resultSelectItemsArray[i]); 385 412 if (value != null) { 386 413 values[i] = value; … … 414 441 Row row = resultRows.get(i); 415 442 Object[] values = row.getValues(); 416 for (Entry<SelectItem, Object> entry : functionResult.entrySet()) { 443 for (Entry<SelectItem, Object> entry : functionResult 444 .entrySet()) { 417 445 SelectItem item = entry.getKey(); 418 446 int itemIndex = row.indexOf(item); … … 429 457 } 430 458 431 public static List<SelectItem> getFunctionSelectItems(List<SelectItem> selectItems) { 459 public static List<SelectItem> getFunctionSelectItems( 460 List<SelectItem> selectItems) { 432 461 List<SelectItem> result = new ArrayList<SelectItem>(); 433 462 for (SelectItem selectItem : selectItems) { … … 442 471 } 443 472 444 public static DataSet getOrdered(DataSet dataSet, List<OrderByItem> orderByItems) { 445 return getOrdered(dataSet, orderByItems.toArray(new OrderByItem[orderByItems.size()])); 446 } 447 448 public static DataSet getOrdered(DataSet dataSet, final OrderByItem... orderByItems) { 473 public static DataSet getOrdered(DataSet dataSet, 474 List<OrderByItem> orderByItems) { 475 return getOrdered(dataSet, orderByItems 476 .toArray(new OrderByItem[orderByItems.size()])); 477 } 478 479 public static DataSet getOrdered(DataSet dataSet, 480 final OrderByItem... orderByItems) { 449 481 if (orderByItems != null && orderByItems.length != 0) { 450 482 final int[] sortIndexes = new int[orderByItems.length]; … … 456 488 List<Object[]> data = dataSet.toObjectArrays(); 457 489 458 final Comparator<Object> valueComparator = ObjectComparator.getComparator(); 490 final Comparator<Object> valueComparator = ObjectComparator 491 .getComparator(); 459 492 460 493 Collections.sort(data, new Comparator<Object[]>() { … … 463 496 Object sortObj1 = o1[sortIndexes[i]]; 464 497 Object sortObj2 = o2[sortIndexes[i]]; 465 int compare = valueComparator.compare(sortObj1, sortObj2); 498 int compare = valueComparator.compare(sortObj1, 499 sortObj2); 466 500 if (compare != 0) { 467 501 OrderByItem orderByItem = orderByItems[i]; … … 516 550 result.addAll(getTableFromItems(rightSide)); 517 551 } else { 518 throw new IllegalStateException("FromItem was neither of Table type, SubQuery type or Join type: " + item); 552 throw new IllegalStateException( 553 "FromItem was neither of Table type, SubQuery type or Join type: " 554 + item); 519 555 } 520 556 return result; … … 533 569 * if less or more than one Row is returned from the query 534 570 */ 535 public static Row executeSingleRowQuery(DataContext dataContext, Query query) throws MetaModelException { 571 public static Row executeSingleRowQuery(DataContext dataContext, Query query) 572 throws MetaModelException { 536 573 DataSet dataSet = dataContext.executeQuery(query); 537 574 boolean next = dataSet.next(); 538 575 if (!next) { 539 throw new MetaModelException("No rows returned from query: " + query); 576 throw new MetaModelException("No rows returned from query: " 577 + query); 540 578 } 541 579 Row row = dataSet.getRow(); 542 580 next = dataSet.next(); 543 581 if (next) { 544 throw new MetaModelException("More than one row returned from query: " + query); 582 throw new MetaModelException( 583 "More than one row returned from query: " + query); 545 584 } 546 585 dataSet.close(); … … 559 598 * @return the left joined result dataset 560 599 */ 561 public static DataSet getLeftJoin(DataSet ds1, DataSet ds2, FilterItem[] onConditions) { 600 public static DataSet getLeftJoin(DataSet ds1, DataSet ds2, 601 FilterItem[] onConditions) { 562 602 if (ds1 == null) { 563 603 throw new IllegalArgumentException("Left DataSet cannot be null"); … … 583 623 584 624 List<Object[]> carthesianRows = getCarthesianProduct( 585 new DataSet[] { new DataSet(ds1rows), new DataSet(si2, ds2data) }, onConditions).toObjectArrays(); 625 new DataSet[] { new DataSet(ds1rows), 626 new DataSet(si2, ds2data) }, onConditions) 627 .toObjectArrays(); 586 628 if (carthesianRows.size() > 0) { 587 629 resultRows.addAll(carthesianRows); … … 609 651 * @return the right joined result dataset 610 652 */ 611 public static DataSet getRightJoin(DataSet ds1, DataSet ds2, FilterItem[] onConditions) { 653 public static DataSet getRightJoin(DataSet ds1, DataSet ds2, 654 FilterItem[] onConditions) { 612 655 SelectItem[] ds1selects = ds1.getSelectItems(); 613 656 SelectItem[] ds2selects = ds2.getSelectItems(); 614 SelectItem[] leftOrderedSelects = new SelectItem[ds1selects.length + ds2selects.length]; 615 System.arraycopy(ds1selects, 0, leftOrderedSelects, 0, ds1selects.length); 616 System.arraycopy(ds2selects, 0, leftOrderedSelects, ds1selects.length, ds2selects.length); 657 SelectItem[] leftOrderedSelects = new SelectItem[ds1selects.length 658 + ds2selects.length]; 659 System.arraycopy(ds1selects, 0, leftOrderedSelects, 0, 660 ds1selects.length); 661 System.arraycopy(ds2selects, 0, leftOrderedSelects, ds1selects.length, 662 ds2selects.length); 617 663 618 664 // We will reuse the left join algorithm (but switch the datasets … … 645 691 } 646 692 647 public static Column[] getColumnsByType(Column[] columns, ColumnType columnType) { 693 public static Column[] getColumnsByType(Column[] columns, 694 ColumnType columnType) { 648 695 ArrayList<Column> result = new ArrayList<Column>(); 649 696 for (Column column : columns) {
Note: See TracChangeset
for help on using the changeset viewer.
