Ejemplo n.º 1
0
  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;
  }
Ejemplo n.º 2
0
  @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);
  }
Ejemplo n.º 3
0
  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