/**
  * 名前を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doName(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
   TableMeta tableMeta = entityMeta.getTableMeta();
   tableDesc.setCatalogName(tableMeta.getCatalog());
   tableDesc.setSchemaName(tableMeta.getSchema());
   tableDesc.setName(tableMeta.getName());
   tableDesc.setCanonicalName(buildCanonicalName(tableMeta));
 }
  /**
   * カラム記述の{@link Comparator}を作成します。
   *
   * @param tableDesc テーブル記述
   * @return カラム記述の{@link Comparator}
   */
  protected Comparator<ColumnDescRef> createColumnDescRefComparator(TableDesc tableDesc) {
    final List<String> pkColumnNameList = new ArrayList<String>();
    if (tableDesc.getPrimaryKeyDesc() != null) {
      PrimaryKeyDesc primaryKeyDesc = tableDesc.getPrimaryKeyDesc();
      pkColumnNameList.addAll(primaryKeyDesc.getColumnNameList());
    }
    return new Comparator<ColumnDescRef>() {

      public int compare(ColumnDescRef o1, ColumnDescRef o2) {
        int index1 = pkColumnNameList.indexOf(o1.columnDesc.getName());
        int index2 = pkColumnNameList.indexOf(o2.columnDesc.getName());
        int ret = 0;
        if (index1 < 0) {
          if (index2 < 0) {
            ret = o1.index - o2.index;
          } else {
            ret = 1;
          }
        } else {
          if (index2 < 0) {
            ret = -1;
          } else {
            ret = index1 - index2;
          }
        }
        return ret;
      }
    };
  }
 /**
  * シーケンス記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doSequenceDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
   for (PropertyMeta propertyMeta : entityMeta.getIdPropertyMetaList()) {
     SequenceDesc sequenceDesc = sequenceDescFactory.getSequenceDesc(entityMeta, propertyMeta);
     if (sequenceDesc != null) {
       tableDesc.addSequenceDesc(sequenceDesc);
     }
   }
 }
 /**
  * 一意キー記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param generator テーブルジェネレータ
  */
 protected void doUniqueConstraints(
     EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) {
   for (UniqueConstraint uc : generator.uniqueConstraints()) {
     UniqueKeyDesc uniqueKeyDesc = uniqueKeyDescFactory.getCompositeUniqueKeyDesc(uc);
     if (uniqueKeyDesc != null) {
       tableDesc.addUniqueKeyDesc(uniqueKeyDesc);
     }
   }
 }
  /**
   * 主キー記述を処理します。
   *
   * @param entityMeta エンティティメタデータ
   * @param propertyMeta プロパティメタデータ
   * @param tableDesc テーブル記述
   * @param generator テーブルジェネレータ
   */
  protected void doPrimaryKeyColumn(
      EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) {
    String pkColumnName = generator.pkColumnName();
    if (StringUtil.isEmpty(pkColumnName)) {
      pkColumnName = TableIdGenerator.DEFAULT_PK_COLUMN_NAME;
    }
    PrimaryKeyDesc primaryKeyDesc = new PrimaryKeyDesc();
    primaryKeyDesc.addColumnName(pkColumnName);
    tableDesc.setPrimaryKeyDesc(primaryKeyDesc);

    ColumnDesc columnDesc = new ColumnDesc();
    columnDesc.setName(pkColumnName);
    SqlType sqlType = dialect.getSqlType(Types.VARCHAR);
    columnDesc.setSqlType(sqlType);
    Column column = AnnotationUtil.getDefaultColumn();
    columnDesc.setDefinition(sqlType.getDataType(column.length(), 0, 0, false));
    tableDesc.addColumnDesc(columnDesc);
  }
  /**
   * 名前を処理します。
   *
   * @param entityMeta エンティティメタデータ
   * @param tableDesc テーブル記述
   * @param generator テーブルジェネレータ
   */
  protected void doName(EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) {
    String catalog = generator.catalog();
    if (StringUtil.isEmpty(catalog)) {
      catalog = entityMeta.getTableMeta().getCatalog();
    }
    String schema = generator.schema();
    if (StringUtil.isEmpty(schema)) {
      schema = entityMeta.getTableMeta().getSchema();
    }
    String name = generator.table();
    if (StringUtil.isEmpty(name)) {
      name = TableIdGenerator.DEFAULT_TABLE;
    }

    tableDesc.setCatalogName(catalog);
    tableDesc.setSchemaName(schema);
    tableDesc.setName(name);
    tableDesc.setCanonicalName(buildCanonicalName(catalog, schema, name));
  }
 /**
  * 外部キー記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doForeignKeyDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
   for (int i = 0; i < entityMeta.getPropertyMetaSize(); i++) {
     PropertyMeta propertyMeta = entityMeta.getPropertyMeta(i);
     ForeignKeyDesc foreignKeyDesc =
         foreignKeyDescFactory.getForeignKeyDesc(entityMeta, propertyMeta);
     if (foreignKeyDesc != null) {
       tableDesc.addForeignKeyDesc(foreignKeyDesc);
     }
   }
 }
 /**
  * 一意キー記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doUniqueKeyDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
   String singlePkColumnName = null;
   PrimaryKeyDesc primaryKeyDesc = tableDesc.getPrimaryKeyDesc();
   if (primaryKeyDesc != null && primaryKeyDesc.getColumnNameList().size() == 1) {
     singlePkColumnName = primaryKeyDesc.getColumnNameList().get(0);
   }
   for (ColumnDesc columnDesc : tableDesc.getColumnDescList()) {
     if (columnDesc.getName().equals(singlePkColumnName)) {
       continue;
     }
     UniqueKeyDesc uniqueKeyDesc = uniqueKeyDescFactory.getSingleUniqueKeyDesc(columnDesc);
     if (uniqueKeyDesc != null) {
       tableDesc.addUniqueKeyDesc(uniqueKeyDesc);
     }
   }
   for (UniqueConstraint uc : table.uniqueConstraints()) {
     UniqueKeyDesc uniqueKeyDesc = uniqueKeyDescFactory.getCompositeUniqueKeyDesc(uc);
     if (uniqueKeyDesc != null) {
       tableDesc.addUniqueKeyDesc(uniqueKeyDesc);
     }
   }
 }
 /**
  * カラム記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doColumnDesc(EntityMeta entityMeta, final TableDesc tableDesc, Table table) {
   List<ColumnDescRef> columnDescRefList = new ArrayList<ColumnDescRef>();
   for (int i = 0; i < entityMeta.getColumnPropertyMetaSize(); i++) {
     PropertyMeta propertyMeta = entityMeta.getColumnPropertyMeta(i);
     ColumnDesc columnDesc = columnDescFactory.getColumnDesc(entityMeta, propertyMeta);
     if (columnDesc != null) {
       columnDescRefList.add(new ColumnDescRef(i, columnDesc));
     }
   }
   Collections.sort(columnDescRefList, createColumnDescRefComparator(tableDesc));
   for (ColumnDescRef columnDescRef : columnDescRefList) {
     tableDesc.addColumnDesc(columnDescRef.columnDesc);
   }
 }
 /**
  * カラム記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param propertyMetaList プロパティメタデータのリスト
  * @param tableDesc テーブル記述
  * @param generator テーブルジェネレータ
  */
 protected void doValueColumn(
     EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) {
   String valueColumnName = generator.valueColumnName();
   if (StringUtil.isEmpty(valueColumnName)) {
     valueColumnName = TableIdGenerator.DEFAULT_VALUE_COLUMN_NAME;
   }
   ColumnDesc columnDesc = new ColumnDesc();
   columnDesc.setName(valueColumnName);
   SqlType sqlType = dialect.getSqlType(Types.BIGINT);
   columnDesc.setSqlType(sqlType);
   Column column = AnnotationUtil.getDefaultColumn();
   columnDesc.setDefinition(sqlType.getDataType(0, column.precision(), 0, false));
   columnDesc.setNullable(false);
   tableDesc.addColumnDesc(columnDesc);
 }
Example #11
0
  /**
   * 識別子生成用のテーブル記述を処理します。
   *
   * @param entityMeta エンティティメタデータ
   * @param tableDesc テーブル記述
   * @param table テーブル
   */
  protected void doIdTableDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
    for (PropertyMeta propertyMeta : entityMeta.getIdPropertyMetaList()) {
      TableDesc idTableDesc = idTableDescFactory.getTableDesc(entityMeta, propertyMeta);
      if (idTableDesc == null) {
        continue;
      }
      tableDesc.addIdTableDesc(idTableDesc);

      String fullName = idTableDesc.getFullName().toLowerCase();
      TableDesc cache = tableDescMap.get(fullName);
      if (cache == null) {
        tableDescMap.put(fullName, idTableDesc);
      } else {
        cache.setCatalogName(idTableDesc.getCatalogName());
        cache.setSchemaName(idTableDesc.getSchemaName());
        cache.setName(idTableDesc.getName());
        cache.setPrimaryKeyDesc(idTableDesc.getPrimaryKeyDesc());
        for (ColumnDesc columnDesc : idTableDesc.getColumnDescList()) {
          cache.addColumnDesc(columnDesc);
        }
        for (UniqueKeyDesc uniqueKeyDesc : idTableDesc.getUniqueKeyDescList()) {
          cache.addUniqueKeyDesc(uniqueKeyDesc);
        }
      }
    }
  }
Example #12
0
 /**
  * 主キー記述を処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doPrimaryKeyDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
   PrimaryKeyDesc primaryKeyDesc = primaryKeyDescFactory.getPrimaryKeyDesc(entityMeta);
   if (primaryKeyDesc != null) {
     tableDesc.setPrimaryKeyDesc(primaryKeyDesc);
   }
 }
Example #13
0
 /**
  * コメントを処理します。
  *
  * @param entityMeta エンティティメタデータ
  * @param tableDesc テーブル記述
  * @param table テーブル
  */
 protected void doComment(EntityMeta entityMeta, TableDesc tableDesc, Table table) {
   String comment = EntityMetaUtil.getComment(entityMeta);
   tableDesc.setComment(comment);
 }