예제 #1
0
  private int getAD_Element_ID(final String columnName) {
    if (Check.isEmpty(columnName, true)) {
      return -1;
    }

    //
    // Search from local cache first
    Integer elementId = columnName2elementId.get(columnName);
    if (elementId != null) {
      return elementId;
    }

    final I_AD_Element element = M_Element.get(getCtx(), columnName);
    if (element == null) {
      return -1;
    }
    elementId = element.getAD_Element_ID();
    columnName2elementId.put(columnName, elementId);
    return elementId;
  }
  /**
   * Process
   *
   * @return info
   * @throws Exception
   */
  protected String doIt() throws Exception {
    if (p_target_AD_Table_ID == 0)
      throw new AdempiereSystemError("@NotFound@ @AD_Table_ID@ " + p_target_AD_Table_ID);
    if (p_source_AD_Table_ID == 0)
      throw new AdempiereSystemError("@NotFound@ @AD_Table_ID@ " + p_source_AD_Table_ID);
    if (log.isLoggable(Level.INFO))
      log.info(
          "Source AD_Table_ID="
              + p_source_AD_Table_ID
              + ", Target AD_Table_ID="
              + p_target_AD_Table_ID);

    MTable targetTable = new MTable(getCtx(), p_target_AD_Table_ID, get_TrxName());
    MColumn[] targetColumns = targetTable.getColumns(true);
    if (targetColumns.length > 0)
      // TODO: dictionary message
      throw new AdempiereSystemError("Target table must not have columns");

    MTable sourceTable = new MTable(getCtx(), p_source_AD_Table_ID, get_TrxName());
    MColumn[] sourceColumns = sourceTable.getColumns(true);

    for (int i = 0; i < sourceColumns.length; i++) {
      MColumn colTarget = new MColumn(targetTable);
      PO.copyValues(sourceColumns[i], colTarget);
      colTarget.setAD_Table_ID(targetTable.getAD_Table_ID());
      colTarget.setEntityType(targetTable.getEntityType());
      // special case the key -> sourceTable_ID
      if (sourceColumns[i].getColumnName().equals(sourceTable.getTableName() + "_ID")) {
        String targetColumnName = new String(targetTable.getTableName() + "_ID");
        colTarget.setColumnName(targetColumnName);
        // if the element doesn't exist, create it
        M_Element element = M_Element.get(getCtx(), targetColumnName);
        if (element == null) {
          element =
              new M_Element(getCtx(), targetColumnName, targetTable.getEntityType(), get_TrxName());
          if (targetColumnName.equalsIgnoreCase(targetTable.getTableName() + "_ID")) {
            element.setColumnName(targetTable.getTableName() + "_ID");
            element.setName(targetTable.getName());
            element.setPrintName(targetTable.getName());
          }
          element.saveEx(get_TrxName());
        }
        colTarget.setAD_Element_ID(element.getAD_Element_ID());
        colTarget.setName(targetTable.getName());
        colTarget.setDescription(targetTable.getDescription());
        colTarget.setHelp(targetTable.getHelp());
      }
      // special case the UUID column -> sourceTable_UU
      if (sourceColumns[i].getColumnName().equals(sourceTable.getTableName() + "_UU")) {
        String targetColumnName = new String(targetTable.getTableName() + "_UU");
        colTarget.setColumnName(targetColumnName);
        // if the element doesn't exist, create it
        M_Element element = M_Element.get(getCtx(), targetColumnName);
        if (element == null) {
          element =
              new M_Element(getCtx(), targetColumnName, targetTable.getEntityType(), get_TrxName());
          if (targetColumnName.equalsIgnoreCase(targetTable.getTableName() + "_UU")) {
            element.setColumnName(targetTable.getTableName() + "_UU");
            element.setName(targetTable.getTableName() + "_UU");
            element.setPrintName(targetTable.getTableName() + "_UU");
          }
          element.saveEx(get_TrxName());
        }
        colTarget.setAD_Element_ID(element.getAD_Element_ID());
        colTarget.setName(targetTable.getName());
        colTarget.setDescription(targetTable.getDescription());
        colTarget.setHelp(targetTable.getHelp());
      }
      colTarget.setIsActive(sourceColumns[i].isActive());
      colTarget.saveEx(get_TrxName());
      // TODO: Copy translations
      m_count++;
    }

    //
    return "#" + m_count;
  } //	doIt