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.AlterTable;
013import io.ebeaninternal.dbmigration.migration.ChangeSet;
014import io.ebeaninternal.dbmigration.migration.CreateIndex;
015import io.ebeaninternal.dbmigration.migration.CreateTable;
016import io.ebeaninternal.dbmigration.migration.DropColumn;
017import io.ebeaninternal.dbmigration.migration.DropHistoryTable;
018import io.ebeaninternal.dbmigration.migration.DropIndex;
019import io.ebeaninternal.dbmigration.migration.DropTable;
020
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) {
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 AlterTable) {
053        generate(writer, (AlterTable) change);
054      } else if (change instanceof AddTableComment) {
055        generate(writer, (AddTableComment) change);
056      } else if (change instanceof CreateIndex) {
057        generate(writer, (CreateIndex) change);
058      } else if (change instanceof DropIndex) {
059        generate(writer, (DropIndex) change);
060      } else if (change instanceof AddColumn) {
061        generate(writer, (AddColumn) change);
062      } else if (change instanceof DropColumn) {
063        generate(writer, (DropColumn) change);
064      } else if (change instanceof AlterColumn) {
065        generate(writer, (AlterColumn) change);
066      } else if (change instanceof AddHistoryTable) {
067        generate(writer, (AddHistoryTable) change);
068      } else if (change instanceof DropHistoryTable) {
069        generate(writer, (DropHistoryTable) change);
070      } else if (change instanceof AddUniqueConstraint) {
071        generate(writer, (AddUniqueConstraint) change);
072      } else if (change instanceof AlterForeignKey) {
073        generate(writer, (AlterForeignKey) change);
074      } else {
075        throw new IllegalArgumentException("Unsupported change: " + change);
076      }
077    }
078  }
079
080  @Override
081  public void generateProlog(DdlWrite writer) {
082    tableDdl.generateProlog(writer);
083  }
084
085  @Override
086  public void generateEpilog(DdlWrite writer) {
087    tableDdl.generateEpilog(writer);
088  }
089
090  @Override
091  public void generate(DdlWrite writer, CreateTable createTable) {
092    tableDdl.generate(writer, createTable);
093  }
094
095  @Override
096  public void generate(DdlWrite writer, DropTable dropTable) {
097    tableDdl.generate(writer, dropTable);
098  }
099
100  @Override
101  public void generate(DdlWrite writer, AlterTable alterTable) {
102    tableDdl.generate(writer, alterTable);
103  }
104
105  @Override
106  public void generate(DdlWrite writer, AddTableComment addTableComment) {
107    tableDdl.generate(writer, addTableComment);
108  }
109
110  @Override
111  public void generate(DdlWrite writer, AddColumn addColumn) {
112    tableDdl.generate(writer, addColumn);
113  }
114
115  @Override
116  public void generate(DdlWrite writer, DropColumn dropColumn) {
117    tableDdl.generate(writer, dropColumn);
118  }
119
120  @Override
121  public void generate(DdlWrite writer, AlterColumn alterColumn) {
122    tableDdl.generate(writer, alterColumn);
123  }
124
125  @Override
126  public void generate(DdlWrite writer, AddHistoryTable addHistoryTable) {
127    tableDdl.generate(writer, addHistoryTable);
128  }
129
130  @Override
131  public void generate(DdlWrite writer, DropHistoryTable dropHistoryTable) {
132    tableDdl.generate(writer, dropHistoryTable);
133  }
134
135  @Override
136  public void generate(DdlWrite writer, CreateIndex createIndex) {
137    tableDdl.generate(writer, createIndex);
138  }
139
140  @Override
141  public void generate(DdlWrite writer, DropIndex dropIndex) {
142    tableDdl.generate(writer, dropIndex);
143  }
144
145  @Override
146  public void generate(DdlWrite writer, AddUniqueConstraint constraint) {
147    tableDdl.generate(writer, constraint);
148  }
149
150  @Override
151  public void generate(DdlWrite writer, AlterForeignKey alterForeignKey) {
152    tableDdl.generate(writer, alterForeignKey);
153  }
154}