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}