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