package net.sf.minuteProject.application; import java.io.InputStream; import java.net.URL; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.apache.commons.lang.StringUtils; import org.apache.ddlutils.model.Database; import org.apache.log4j.Logger; import org.apache.velocity.VelocityContext; import net.sf.minuteProject.configuration.bean.AbstractConfiguration; import net.sf.minuteProject.configuration.bean.Configuration; import net.sf.minuteProject.configuration.bean.GeneratorBean; import net.sf.minuteProject.configuration.bean.Model; import net.sf.minuteProject.configuration.bean.Package; import net.sf.minuteProject.configuration.bean.Target; import net.sf.minuteProject.configuration.bean.Template; import net.sf.minuteProject.configuration.bean.TemplateTarget; import net.sf.minuteProject.configuration.bean.model.data.Table; import net.sf.minuteProject.configuration.bean.service.Scope; import net.sf.minuteProject.configuration.bean.system.Plugin; import net.sf.minuteProject.configuration.bean.view.Function; import net.sf.minuteProject.configuration.bean.view.Service; import net.sf.minuteProject.configuration.bean.view.View; import net.sf.minuteProject.exception.MinuteProjectException; import net.sf.minuteProject.utils.BslaLibraryUtils; import net.sf.minuteProject.utils.BslaViewLibraryUtils; import net.sf.minuteProject.utils.ColumnUtils; import net.sf.minuteProject.utils.CommonUtils; import net.sf.minuteProject.utils.ConvertUtils; import net.sf.minuteProject.utils.DatabaseUtils; import net.sf.minuteProject.utils.FormatUtils; import net.sf.minuteProject.utils.ModelUtils; import net.sf.minuteProject.utils.ReferenceUtils; import net.sf.minuteProject.utils.SqlUtils; import net.sf.minuteProject.utils.TableUtils; import net.sf.minuteProject.utils.TestUtils; import net.sf.minuteProject.utils.URLUtils; import net.sf.minuteProject.utils.ViewUtils; import net.sf.minuteProject.utils.WebUtils; /** * @author Florian Adler * */ public class ModelServiceGenerator extends ModelViewGenerator { private static Logger logger = Logger.getLogger(ModelGenerator.class); // public static final String GENERATOR_MODEL_RULES = "net/sf/minuteProject/configuration/model-config-rules.xml"; /* * context object */ // private CommonUtils commonUtils; // private ConvertUtils convertUtils; // private ColumnUtils columnUtils; // private ViewUtils viewUtils; // private FormatUtils formatUtils; // private BslaLibraryUtils bslaLibraryUtils; // private DatabaseUtils databaseUtils; // private ModelUtils modelUtils; // private URLUtils urlUtils; // private TestUtils testUtils; // private WebUtils webUtils; // private SqlUtils sqlUtils; // private TableUtils tableUtils; private Model model; // private String modelConfig; // // public String getModelConfig() { // return modelConfig; // } // // public void setModelConfig(String modelConfig) { // this.modelConfig = modelConfig; // } /** * Constructs the generator with its configuration * * @param configurationFile */ public ModelServiceGenerator(String configurationFile) { super(configurationFile); } // @Override // public AbstractConfiguration getConfigurationRoot() { // return new Configuration(); // } // // @Override // public String getConfigurationRulesFile() { // return GENERATOR_MODEL_RULES; // } public static void main(String args[]) { String config; if (args.length < 1) { System.exit(1); } config = args[0]; Date startDate = new Date(); logger.info("start time = "+new Date()); ModelGenerator generator = new ModelGenerator(config); // Model model = (Model) generator.load(); try { generator.generate(); } catch (MinuteProjectException e) { generator.exit (""); } // Configuration configuration = (Configuration) generator.load(); // Model model = configuration.getModel(); // generator.setModel(model); // generator.loadModel(model); // generator.loadTarget(model.getConfiguration(), model.getConfiguration() // .getTarget()); // generator.generate(model.getConfiguration().getTarget()); Date endDate = new Date(); //logger.info("start date = "+startDate.getTime()); //logger.info("end date = "+endDate.getTime()); logger.info("time taken : "+(endDate.getTime()-startDate.getTime())/1000+ "s."); } protected void loadModel(Model model) { model.getDataModel().loadDatabase(); model.getBusinessModel().complementDataModelWithTables(); } /* * (non-Javadoc) * * @see net.sf.minuteProject.application.Generator#generate(net.sf.minuteProject.configuration.bean.Template) */ public void generate(Template template) throws MinuteProjectException { // TODO Auto-generated method stub // getView(); if (template.getEntitySpecific().equals("true")) generateArtifactsByEntity(template); else if (template.getPackageSpecific().equals("true")) generateArtifactsByPackage(template); else if (template.getModelSpecific().equals("true")) generateArtifactsByModel(template); else if (template.getApplicationSpecific().equals("true")) generateArtifactsByApplication(template); } public Model getModel() { return model; } public void setModel(Model model) { this.model = model; } protected void generateArtifactsByModel(Template template) throws MinuteProjectException { writeTemplateResult(getModel(), template); } protected void generateArtifactsByPackage(Template template) throws MinuteProjectException { List<Package> packages = model.getBusinessModel().getBusinessPackage() .getPackages(); for (Package pack : packages) { writeTemplateResult(pack, template); } } protected void generateArtifactsByEntity(Template template) throws MinuteProjectException { for (Scope scope : model.getBusinessModel().getService().getScopes() ) { writeTemplateResult(scope, template); } } private void generateArtifactsByApplication(Template template) throws MinuteProjectException { writeTemplateResult(getModel().getConfiguration(), template); } protected void writeTemplateResult(GeneratorBean bean, Template template) throws MinuteProjectException { String outputFilename = template .getGeneratorOutputFileNameForConfigurationBean(bean, template); VelocityContext context = getVelocityContext(template); String beanName = getAbstractBeanName(bean); context.put(beanName, bean); context.put("template", template); putCommonContextObject(context, template); try { produce(context, template, outputFilename); } catch (Exception ex) { throwException(ex, "ERROR on template "+template.getName()+" - on bean "+bean.getName()); } } protected void putCommonContextObject(VelocityContext context, Template template) { putStandardContextObject(context); putPluginContextObject(context, template); context.put("model", model); } }