package org.objectstyle.wolips.eomodeler.core.sql; import java.util.LinkedList; import java.util.List; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.objectstyle.wolips.eomodeler.core.Activator; import org.objectstyle.wolips.eomodeler.core.model.EOEntity; import org.objectstyle.wolips.eomodeler.core.model.EOEntityForest; import org.objectstyle.wolips.eomodeler.core.model.EOModel; import org.objectstyle.wolips.thirdparty.velocity.WOLipsVelocityUtils; import org.objectstyle.wolips.thirdparty.velocity.resourceloader.ResourceLoader; public class MigrationGenerator { public static String generate(EOModel model, List<EOEntity> entities) throws Exception { List<EOEntity> generateEntities; if (entities == null || entities.isEmpty()) { generateEntities = new LinkedList<EOEntity>(); for (EOEntity entity : model.getEntities()) { if (!entity.isPrototype()) { generateEntities.add(entity); } } } else { generateEntities = entities; } EOEntityForest entityForest = new EOEntityForest(); entityForest.add(generateEntities); generateEntities = entityForest.breadthFirst(); VelocityEngine velocityEngine = WOLipsVelocityUtils.createVelocityEngine("EOGenerator", Activator.getDefault().getBundle(), null, null, true, ResourceLoader.class); VelocityContext context = new VelocityContext(); List<String> entityMigrations = new LinkedList<String>(); for (EOEntity entity : generateEntities) { context.put("entity", entity); String entityMigration = WOLipsVelocityUtils.writeTemplateToString(velocityEngine, context, "EntityMigration0.java"); entityMigrations.add(entityMigration); } List<String> foreignKeyMigrations = new LinkedList<String>(); for (EOEntity entity : generateEntities) { context.put("entity", entity); String foreignKeyMigration = WOLipsVelocityUtils.writeTemplateToString(velocityEngine, context, "ForeignKeyMigration0.java"); foreignKeyMigrations.add(foreignKeyMigration); } context.remove("entity"); context.put("model", model); context.put("entityMigrations", entityMigrations); context.put("foreignKeyMigrations", foreignKeyMigrations); String modelMigration = WOLipsVelocityUtils.writeTemplateToString(velocityEngine, context, "Migration0.java"); return modelMigration; } }