001package io.ebeaninternal.dbmigration.ddlgeneration;
002
003import io.ebean.config.DatabaseConfig;
004import io.ebeaninternal.dbmigration.ddlgeneration.platform.BaseTableDdl;
005import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
006import io.ebeaninternal.dbmigration.migration.AddColumn;
007import io.ebeaninternal.dbmigration.migration.AddHistoryTable;
008import io.ebeaninternal.dbmigration.migration.AddTableComment;
009import io.ebeaninternal.dbmigration.migration.AddUniqueConstraint;
010import io.ebeaninternal.dbmigration.migration.AlterColumn;
011import io.ebeaninternal.dbmigration.migration.AlterForeignKey;
012import io.ebeaninternal.dbmigration.migration.ChangeSet;
013import io.ebeaninternal.dbmigration.migration.CreateIndex;
014import io.ebeaninternal.dbmigration.migration.CreateTable;
015import io.ebeaninternal.dbmigration.migration.DropColumn;
016import io.ebeaninternal.dbmigration.migration.DropHistoryTable;
017import io.ebeaninternal.dbmigration.migration.DropIndex;
018import io.ebeaninternal.dbmigration.migration.DropTable;
019
020import java.io.IOException;
021import java.util.List;
022
023/**
024 *
025 */
026public class BaseDdlHandler implements DdlHandler {
027
028  protected final TableDdl tableDdl;
029
030  public BaseDdlHandler(DatabaseConfig config, PlatformDdl platformDdl) {
031    this(config, platformDdl, new BaseTableDdl(config, platformDdl));
032  }
033
034  protected BaseDdlHandler(DatabaseConfig config, PlatformDdl platformDdl, TableDdl tableDdl) {
035    this.tableDdl = tableDdl;
036  }
037
038  @Override
039  public void generate(DdlWrite writer, ChangeSet changeSet) throws IOException {
040
041    List<Object> changeSetChildren = changeSet.getChangeSetChildren();
042    for (Object change : changeSetChildren) {
043      if (change instanceof CreateTable) {
044        generate(writer, (CreateTable) change);
045      }
046    }
047    for (Object change : changeSetChildren) {
048      if (change instanceof CreateTable) {
049        // ignore
050      } else if (change instanceof DropTable) {
051        generate(writer, (DropTable) change);
052      } else if (change instanceof AddTableComment) {
053        generate(writer, (AddTableComment) change);
054      } else if (change instanceof CreateIndex) {
055        generate(writer, (CreateIndex) change);
056      } else if (change instanceof DropIndex) {
057        generate(writer, (DropIndex) change);
058      } else if (change instanceof AddColumn) {
059        generate(writer, (AddColumn) change);
060      } else if (change instanceof DropColumn) {
061        generate(writer, (DropColumn) change);
062      } else if (change instanceof AlterColumn) {
063        generate(writer, (AlterColumn) change);
064      } else if (change instanceof AddHistoryTable) {
065        generate(writer, (AddHistoryTable) change);
066      } else if (change instanceof DropHistoryTable) {
067        generate(writer, (DropHistoryTable) change);
068      } else if (change instanceof AddUniqueConstraint) {
069        generate(writer, (AddUniqueConstraint) change);
070      } else if (change instanceof AlterForeignKey) {
071        generate(writer, (AlterForeignKey) change);
072      } else {
073        throw new IllegalArgumentException("Unsupported change: " + change);
074      }
075    }
076  }
077
078  @Override
079  public void generateProlog(DdlWrite write) throws IOException {
080    tableDdl.generateProlog(write);
081  }
082
083  @Override
084  public void generateEpilog(DdlWrite write) throws IOException {
085    tableDdl.generateEpilog(write);
086  }
087
088  @Override
089  public void generate(DdlWrite writer, CreateTable createTable) throws IOException {
090    tableDdl.generate(writer, createTable);
091  }
092
093  @Override
094  public void generate(DdlWrite writer, DropTable dropTable) throws IOException {
095    tableDdl.generate(writer, dropTable);
096  }
097
098  @Override
099  public void generate(DdlWrite writer, AddTableComment addTableComment) throws IOException {
100    tableDdl.generate(writer, addTableComment);
101  }
102
103  @Override
104  public void generate(DdlWrite writer, AddColumn addColumn) throws IOException {
105    tableDdl.generate(writer, addColumn);
106  }
107
108  @Override
109  public void generate(DdlWrite writer, DropColumn dropColumn) throws IOException {
110    tableDdl.generate(writer, dropColumn);
111  }
112
113  @Override
114  public void generate(DdlWrite writer, AlterColumn alterColumn) throws IOException {
115    tableDdl.generate(writer, alterColumn);
116  }
117
118  @Override
119  public void generate(DdlWrite writer, AddHistoryTable addHistoryTable) throws IOException {
120    tableDdl.generate(writer, addHistoryTable);
121  }
122
123  @Override
124  public void generate(DdlWrite writer, DropHistoryTable dropHistoryTable) throws IOException {
125    tableDdl.generate(writer, dropHistoryTable);
126  }
127
128  @Override
129  public void generate(DdlWrite writer, CreateIndex createIndex) throws IOException {
130    tableDdl.generate(writer, createIndex);
131  }
132
133  @Override
134  public void generate(DdlWrite writer, DropIndex dropIndex) throws IOException {
135    tableDdl.generate(writer, dropIndex);
136  }
137
138  @Override
139  public void generate(DdlWrite writer, AddUniqueConstraint constraint) throws IOException {
140    tableDdl.generate(writer, constraint);
141  }
142
143  @Override
144  public void generate(DdlWrite writer, AlterForeignKey alterForeignKey) throws IOException {
145    tableDdl.generate(writer, alterForeignKey);
146  }
147}