private Info_Column createColumnInfo(final I_AD_InfoColumn field) { final Properties ctx = getCtx(); String columnName = field.getAD_Element().getColumnName(); String name = msgBL.translate(ctx, columnName); final int displayType = field.getAD_Reference_ID(); Class<?> colClass = DisplayType.getClass(displayType, true); String colSQL = Check.isEmpty(field.getDisplayField(), true) ? field.getSelectClause() : field.getDisplayField(); String idColSQL = null; if (DisplayType.isLookup(field.getAD_Reference_ID())) { colClass = KeyNamePair.class; idColSQL = field.getSelectClause(); final String displayColumnSQL = MLookupFactory.getLookupEmbed( ctx, colSQL, // BaseColumn null, // BaseTable field.getAD_Reference_ID(), field.getAD_Reference_Value_ID()); if (!Check.isEmpty(displayColumnSQL, true)) { colSQL = "(" + displayColumnSQL + ")"; } } if (DisplayType.List == field.getAD_Reference_ID()) { columnName = field.getName(); } if (columnName.endsWith("_ID") && DisplayType.ID == field.getAD_Reference_ID()) // should be only ID, 02883 { name = " "; colClass = IDColumn.class; } final Info_Column ic = new Info_Column(name, columnName, colClass); ic.setDisplayType(displayType); ic.setIDcolSQL(idColSQL); ic.setColSQL(colSQL); ic.setColumnName(columnName); // // Check/Load Column Controller final IInfoColumnController columnController = getInfoColumnControllerOrNull(field); if (columnController != null) { ic.setColumnController(columnController); columnController.customize(this, ic); } return ic; }
@Override public <T extends IInfoColumnController> T getInfoColumnControllerOrNull( final String columnName, final Class<T> controllerClass) { Check.assumeNotEmpty(columnName, "columnName not empty"); Check.assumeNotNull(controllerClass, "controllerClass not empty"); final int column = getColumnIndex(columnName); if (column < 0) { return null; } final Info_Column infoColumn = p_layout[column]; final IInfoColumnController controller = infoColumn.getColumnController(); if (controller == null) { return null; } if (!controllerClass.isAssignableFrom(controller.getClass())) { return null; } return controllerClass.cast(controller); }
private void initInfo() { displayedInfoColumns = adInfoWindowDAO.retrieveDisplayedColumns(infoWindow); final Info_Column[] layout = new Info_Column[displayedInfoColumns.size()]; // // Setup Layout int keyColumnIndex = -1; for (int i = 0; i < displayedInfoColumns.size(); i++) { final I_AD_InfoColumn field = displayedInfoColumns.get(i); layout[i] = createColumnInfo(field); if (layout[i].getColClass() == IDColumn.class && !field.isTree()) { keyColumnIndex = i; } } // No KeyColumnIndex found. Pick the first ID column if (keyColumnIndex < 0) { int count = 0; for (final Info_Column infoColumn : layout) { if (infoColumn.isIDcol()) { keyColumnIndex = count; break; } else { count++; } } } // // Setup dependent columns // NOTE: we need to do this after we initialized the layout for (int i = 0; i < displayedInfoColumns.size(); i++) { final Info_Column infoColumn = layout[i]; final IInfoColumnController columnController = infoColumn.getColumnController(); if (columnController == null) { continue; } final List<String> dependsOnColumnNames = columnController.getDependsOnColumnNames(); if (dependsOnColumnNames == null || dependsOnColumnNames.isEmpty()) { continue; } for (final String dependsOnColumnName : dependsOnColumnNames) { final int dependsOnColumnIndex = getIndexByColumnName(displayedInfoColumns, dependsOnColumnName); if (dependsOnColumnIndex < 0) { log.log( Level.WARNING, "Cannot find column name '" + dependsOnColumnName + "' required as dependency for " + columnController); continue; } final List<Info_Column> dependentColumns = layout[dependsOnColumnIndex].getDependentColumns(); if (!dependentColumns.contains(infoColumn)) { dependentColumns.add(infoColumn); } } } // Create Grid final StringBuffer where = new StringBuffer(); where.append(infoWindow.getOtherClause()); if (!Check.isEmpty(p_whereClause, true)) { if (!Check.isEmpty(where.toString())) { where.append(" AND "); } where.append("(").append(p_whereClause).append(")"); } // final String sqlFromClause = adInfoWindowBL.getSqlFrom(infoWindow); prepareTable(layout, sqlFromClause, where.toString(), infoWindow.getOrderByClause()); setKeyColumnIndex(keyColumnIndex); setShowTotals(adInfoWindowBL.isShowTotals(infoWindow)); initAddonPanel(); // // Notify controllers that Info window was initialized for (final Info_Column infoColumn : p_layout) { final IInfoColumnController controller = infoColumn.getColumnController(); if (controller == null) { continue; } controller.afterInfoWindowInit(this); } } // initInfo