View Javadoc

    1   /*
    2    * joey-gen and its relative products are published under the terms
    3    * of the Apache Software License.
    4    *
    5    * Created on 2004/10/26 15:58:51
    6    */
    7   package org.asyrinx.joey.gen.command.rdb;
    8
    9   import org.asyrinx.brownie.core.lang.StringUtils;
    10  import org.asyrinx.joey.gen.model.rdb.Column;
    11  import org.asyrinx.joey.gen.model.rdb.Database;
    12  import org.asyrinx.joey.gen.model.rdb.ForeignKey;
    13  import org.asyrinx.joey.gen.model.rdb.ForeignKeyEntry;
    14  import org.asyrinx.joey.gen.model.rdb.ForeignKeyType;
    15  import org.asyrinx.joey.gen.model.rdb.Table;
    16
    17  /***
    18   * @author takeshi
    19   */
    20  public class PrepareColumnFk extends RdbCommand {
    21
    22      public void visit(Column column) {
    23          final ForeignKeyType foreignKeyType = ForeignKeyType.get(column.getFkType());
    24          buildFk(column, column.getFk(), foreignKeyType);
    25      }
    26
    27      /***
    28       * @param column
    29       */
    30      private ForeignKey buildFk(Column column, String foreignColumnName, ForeignKeyType fkType) {
    31          if (fkType == ForeignKeyType.EXTENDS)
    32              throw new UnsupportedOperationException("fkType must be " + ForeignKeyType.NORMAL.getName() + " or "
    33                      + ForeignKeyType.BIDIRECTION.getName());
    34          if (StringUtils.isEmpty(foreignColumnName))
    35              return null;
    36          final Table localTable = column.getParent();
    37          final Database db = localTable.getParent();
    38          final Column fkCol = db.getColumn(foreignColumnName);
    39          if (fkCol == null) {
    40              addError(column, "cannot find:" + foreignColumnName);
    41              return null;
    42          }
    43          final ForeignKey foreignKey = new ForeignKey(localTable, fkCol.getParent().getName());
    44          foreignKey.setLabel(column.getLabel());
    45          foreignKey.setType(fkType);
    46          foreignKey.setCascade(column.getFkCascade());
    47          new ForeignKeyEntry(foreignKey, column.getName(), fkCol.getName());
    48          this.log(foreignKey, "create FK from " + column.getFullName());
    49          return foreignKey;
    50      }
    51
    52  }