Package org.objectstyle.wolips.eomodeler.doc

Source Code of org.objectstyle.wolips.eomodeler.doc.EOModelDocGenerator

package org.objectstyle.wolips.eomodeler.doc;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashSet;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.runtime.log.LogSystem;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import org.apache.velocity.runtime.resource.loader.FileResourceLoader;
import org.objectstyle.wolips.eomodeler.core.model.EOEntity;
import org.objectstyle.wolips.eomodeler.core.model.EOModel;
import org.objectstyle.wolips.eomodeler.core.model.EOModelGroup;
import org.objectstyle.wolips.eomodeler.core.model.EOModelVerificationFailure;
import org.objectstyle.wolips.eomodeler.core.model.EOStoredProcedure;

public class EOModelDocGenerator {
  public static class ConsoleLogger implements LogSystem {
    public void init(RuntimeServices runtimeservices) throws Exception {
      // DO NOTHING
    }

    public void logVelocityMessage(int i, String s) {
      System.out.println("ConsoleLogger.logVelocityMessage: " + i + ", " + s);
    }
  }

  public static void generate(EOModelGroup modelGroup, File outputFolder, File templatePath, String entityURLTemplate) throws Exception {
    Thread thread = Thread.currentThread();
    ClassLoader loader = thread.getContextClassLoader();
    thread.setContextClassLoader(modelGroup.getClass().getClassLoader());
    try {
      VelocityEngine velocityEngine = new VelocityEngine();
      velocityEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, org.apache.velocity.runtime.log.NullLogSystem.class.getName());
      // velocityEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
      // ConsoleLogger.class.getName());
      StringBuffer templatePaths = new StringBuffer();
      templatePaths.append(".");
      if (templatePath != null) {
        templatePaths.append(",");
        templatePaths.append(templatePath.getAbsolutePath());
      }
      velocityEngine.setProperty("resource.loader", "file,class");
      velocityEngine.setProperty("file.resource.loader.class", FileResourceLoader.class.getName());
      velocityEngine.setProperty("file.resource.loader.path", templatePaths.toString());
      velocityEngine.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
 
      velocityEngine.init();

      VelocityContext context = new VelocityContext();
 
      context.put("modelGroup", modelGroup);
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "eomodeldoc.css.vm", new File(outputFolder, "eomodeldoc.css"));
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "eomodeldoc.js.vm", new File(outputFolder, "eomodeldoc.js"));
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "prototype.js.vm", new File(outputFolder, "prototype.js"));
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "index.html.vm", new File(outputFolder, "index.html"));
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "indexContent.html.vm", new File(outputFolder, "content.html"));
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "indexOverview.html.vm", new File(outputFolder, "overview.html"));
      EOModelDocGenerator.writeTemplate(velocityEngine, context, "indexModels.html.vm", new File(outputFolder, "models.html"));
      for (EOModel model : modelGroup.getModels()) {
        System.out.println("Generating " + model.getName() + " ...");
        context.put("model", model);
        EOModelDocGenerator.writeTemplate(velocityEngine, context, "modelOverview.html.vm", new File(outputFolder, model.getName() + "/overview.html"));
        EOModelDocGenerator.writeTemplate(velocityEngine, context, "modelContent.html.vm", new File(outputFolder, model.getName() + "/content.html"));
 
        for (EOEntity entity : model.getEntities()) {
          System.out.println("Generating " + model.getName() + "." + entity.getName() + " ...");
          context.put("entity", entity);
          if (entityURLTemplate != null) {
            String className = entity.getClassName();
            if (className != null && className.length() > 0) {
              StringWriter entityURLWriter = new StringWriter();
              VelocityContext entityURLContext = new VelocityContext();
              entityURLContext.put("entity", entity);
              entityURLContext.put("model", model);
              Velocity.evaluate(entityURLContext, entityURLWriter, "entityURL", entityURLTemplate);
              context.put("entityURL", entityURLWriter.toString());
            }
          }
          EOModelDocGenerator.writeTemplate(velocityEngine, context, "entityContent.html.vm", new File(outputFolder, model.getName() + "/entities/" + entity.getName() + ".html"));
        }
 
        for (EOStoredProcedure storedProcedure : model.getStoredProcedures()) {
          System.out.println("Generating " + model.getName() + "." + storedProcedure.getName() + " ...");
          context.put("storedProcedure", storedProcedure);
          EOModelDocGenerator.writeTemplate(velocityEngine, context, "storedProcedureContent.html.vm", new File(outputFolder, model.getName() + "/storedProcedures/" + storedProcedure.getName() + ".html"));
        }
      }
    } finally {
      thread.setContextClassLoader(loader);
    }

    System.out.println("Done: " + new File(outputFolder, "index.html"));
  }

  public static void main(String[] args) throws Exception {
    // String userHomeWOLipsPath = System.getProperty("user.home") +
    // File.separator + "Library" + File.separator + "WOLips";
    // URL url = null;
    // url = FileLocator.resolve(Activator.getDefault().getBundle().);
    // String templatePaths = userHomeWOLipsPath + ", ";
    // Path path = new Path(url.getPath());
    // templatePaths = templatePaths +
    // path.append("templates").toOSString();
    // velocityEngine.setProperty("resource.loader", "wolips");
    // velocityEngine.setProperty("wolips.resource.loader.class",
    // org.objectstyle.wolips.thirdparty.velocity.resourceloader.ResourceLoader.class.getName());
    // velocityEngine.setProperty("wolips.resource.loader.bundle",
    // Activator.getDefault().getBundle());
    // velocityEngine.setProperty("jar.resource.loader.path", "jar:" +
    // TemplateEnginePlugin.getDefault().getBundle().getResource("plugin.xml").getFile());
    EOModelGroup modelGroup = new EOModelGroup();
    modelGroup.loadModelFromURL(new File("/Users/mschrag/Documents/workspace/ERPrototypes/Resources/erprototypes.eomodeld").toURL());
    modelGroup.loadModelFromURL(new File("/Users/mschrag/Documents/workspace/MDTAccounting/MDTAccounting.eomodeld").toURL());
    modelGroup.loadModelFromURL(new File("/Users/mschrag/Documents/workspace/MDTask/MDTask.eomodeld").toURL());
    modelGroup.resolve(new HashSet<EOModelVerificationFailure>());

    File outputFolder = new File("/tmp/eomodeldoc");

    EOModelDocGenerator.generate(modelGroup, outputFolder, null, null);
  }

  public static void writeTemplate(VelocityEngine engine, VelocityContext context, String templateName, File outputFile) throws Exception {
    try {
      Template template = engine.getTemplate(templateName, "UTF-8");
      if (!outputFile.getParentFile().exists()) {
        if (!outputFile.getParentFile().mkdirs()) {
          throw new IOException("Unable to create the folder " + outputFile.getParentFile() + ".");
        }
      }
      Writer outputWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"));
      try {
        template.merge(context, outputWriter);
      } finally {
        outputWriter.close();
      }
    } catch (Exception e) {
      throw new Exception("Failed to generate '" + outputFile + "' with template '" + templateName + "'.", e);
    }
  }
}
TOP

Related Classes of org.objectstyle.wolips.eomodeler.doc.EOModelDocGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.