package ilarkesto.mda.legacy; import ilarkesto.auth.AUser; import ilarkesto.base.Str; import ilarkesto.concurrent.TaskManager; import ilarkesto.core.logging.Log; import ilarkesto.di.BeanProvider; import ilarkesto.di.Context; import ilarkesto.di.app.AApplication; import ilarkesto.mda.legacy.generator.ApplicationGenerator; import ilarkesto.mda.legacy.generator.BeanTemplateGenerator; import ilarkesto.mda.legacy.generator.ComponentGenerator; import ilarkesto.mda.legacy.generator.DaoGenerator; import ilarkesto.mda.legacy.generator.DaoTepmplateGenerator; import ilarkesto.mda.legacy.generator.DatobGenerator; import ilarkesto.mda.legacy.generator.EntityGenerator; import ilarkesto.mda.legacy.model.ApplicationModel; import ilarkesto.mda.legacy.model.BeanModel; import ilarkesto.mda.legacy.model.ComponentModel; import ilarkesto.mda.legacy.model.DatobModel; import ilarkesto.mda.legacy.model.EntityModel; import ilarkesto.mda.legacy.model.GwtServiceModel; import ilarkesto.persistence.AEntity; import ilarkesto.persistence.AStructure; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; public abstract class AGeneratorApplication extends AApplication { private static final Log LOG = Log.get(AGeneratorApplication.class); protected void onGeneration() { BeanProvider beanProvider = Context.get().getBeanProvider(); for (BeanModel beanModel : beanProvider.getBeansByType(BeanModel.class)) { if (beanModel.getPackageName().startsWith("ilarkesto")) continue; onBeanGeneration(beanModel); } // for (UiComponentModel uiComponentModel : beanProvider.getBeansByType(UiComponentModel.class)) { // onUiComponentGeneration(uiComponentModel); // } } protected void onBeanGeneration(BeanModel beanModel) { if (beanModel instanceof EntityModel) { EntityModel em = (EntityModel) beanModel; new EntityGenerator(em).generate(); new DaoGenerator(em).generate(); new BeanTemplateGenerator(em).generate(); new DaoTepmplateGenerator(em).generate(); } else if (beanModel instanceof ApplicationModel) { ApplicationModel am = (ApplicationModel) beanModel; new ApplicationGenerator(am).generate(); } else if (beanModel instanceof ComponentModel) { ComponentModel cm = (ComponentModel) beanModel; if (cm.isGwt()) return; new ComponentGenerator(cm).generate(); new BeanTemplateGenerator(cm).generate(); } else { new DatobGenerator((DatobModel) beanModel).generate(); } } @Override public final void onStart() {} @Override protected void scheduleTasks(TaskManager tm) {} public final AGeneratorApplication generateClasses() { try { onGeneration(); } catch (Throwable ex) { LOG.fatal("Generation failed.", ex); } return this; } @Override protected final void onShutdown() { System.exit(0); } // -------------- // --- models --- // -------------- protected abstract String getBasePackageName(); private EntityModel userModel; public EntityModel getUserModel() { if (userModel == null) { userModel = new EntityModel(AUser.class.getSimpleName(), AUser.class.getPackage().getName()); userModel.setUserModel(userModel); Context.get().autowire(userModel); } return userModel; } private EntityModel entityModel; public EntityModel getEntityModel() { if (entityModel == null) { entityModel = new EntityModel(AEntity.class.getSimpleName(), AEntity.class.getPackage().getName()); entityModel.setAbstract(true); Context.get().autowire(entityModel); } return entityModel; } private EntityModel abstractEntityModel; private EntityModel getAbstractEntityModel() { if (abstractEntityModel == null) { abstractEntityModel = new EntityModel(AEntity.class.getSimpleName(), AEntity.class.getPackage().getName()); abstractEntityModel.setAbstract(true); Context.get().autowire(abstractEntityModel); } return abstractEntityModel; } private DatobModel abstractValueObjectModel; private DatobModel getAbstractStructureModel() { if (abstractValueObjectModel == null) { abstractValueObjectModel = new DatobModel(AStructure.class.getSimpleName(), AStructure.class.getPackage() .getName()); Context.get().autowire(abstractValueObjectModel); } return abstractValueObjectModel; } public final List<EntityModel> getEntityModels(boolean excludeUser) { List<EntityModel> entityModels = new ArrayList<EntityModel>(); for (Iterator iterator = Context.get().getBeanProvider().getBeansByType(EntityModel.class).iterator(); iterator .hasNext();) { EntityModel entityModel = (EntityModel) iterator.next(); if (excludeUser && entityModel == getUserModel()) continue; if (entityModel == getEntityModel()) continue; entityModels.add(entityModel); } Collections.sort(entityModels); return entityModels; } public final List<EntityModel> getFinalEntityModels(boolean excludeUser) { List<EntityModel> result = new ArrayList<EntityModel>(); for (EntityModel em : getEntityModels(excludeUser)) { if (!em.isAbstract()) result.add(em); } return result; } // -------------- // --- helper --- // -------------- protected GwtServiceModel createGwtServiceModel(String name) { return new GwtServiceModel(name, getBasePackageName()); } protected ApplicationModel createSwingApplicationModel(String name) { ApplicationModel model = new ApplicationModel(ApplicationModel.Type.SWING, Str.uppercaseFirstLetter(name), getBasePackageName()); return model; } protected ApplicationModel createWebApplicationModel(String name) { ApplicationModel model = new ApplicationModel(ApplicationModel.Type.WEB, Str.uppercaseFirstLetter(name), getBasePackageName()); return model; } protected ComponentModel createComponentModel(String name, String packageName) { ComponentModel model = new ComponentModel(name, getBasePackageName() + "." + packageName); return model; } protected EntityModel createEntityModel(String name, String packageName) { EntityModel model = new EntityModel(name, getBasePackageName() + "." + packageName); model.setSuperbean(getAbstractEntityModel()); if (!name.equals("User")) model.setUserModel(getUserModel()); return model; } protected DatobModel createStructureModel(String name, String packageName) { DatobModel model = new DatobModel(name, getBasePackageName() + "." + packageName); model.setSuperbean(getAbstractStructureModel()); return model; } // --- dependencies --- }