Package xgenerator.generators

Source Code of xgenerator.generators.AbstractGenerator

/**
* AbstractGenerator.java
* 2012-3-3 上午12:49:06
*/
package xgenerator.generators;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

import xgenerator.model.ModelMetadata;

import freemarker.template.Configuration;
import freemarker.template.Template;

/**
* <p>
* Title:类的中文名
* </p>
* <p>
* Description:具体功能见各方法描述
* </p>
* <p>
* Copyright:Copyright (c) 2012
* </p>
*
* @author <a href="mailto:lishushan@gmail.com">liss</a>
* @version 1.0
*/
public abstract class AbstractGenerator implements Generator {

  /**
   * 默认模板文件目录
   */
  public static final String DEFAULT_TEMPLATES_DIR = System.getProperty("user.dir") + File.separator + "templates";
 
  /**
   * freemarker template Configuration;
   */
  public static final Configuration CONFIG = new Configuration();
 
  /**
   * static init
   */
  static {
    try {
      CONFIG.setDirectoryForTemplateLoading(new File(DEFAULT_TEMPLATES_DIR));
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }
 
  /**
   * <p>
   * Title:生成代码文件,提供给子类用来生成代码文件
   * </p>
   * @param modelMetadata
   * @param templateFile
   * @param codeFilePath
   * @param codeFileName
   */
  protected String generateCode(ModelMetadata modelMetadata, String templateFile, String codeFilePath, String codeFileName) {
    try {
      /*
       * 创建数据模型
       */
      Map root = new HashMap();
      root.put("modelMetadata", modelMetadata);
     
      /*
       *  使用Configuration实例来加载指定模板
       */
      Template template = CONFIG.getTemplate(templateFile);
      template.setEncoding(modelMetadata.getEncoding());
     
      /*
       * 代码目录与文件
       */
      File fileDir = new File(codeFilePath);
      if(!fileDir.exists()) {
        fileDir.mkdirs();
      }
      File codeFile = new File(codeFilePath + File.separator + codeFileName);
      System.out.println("generate file " + codeFile);
      FileOutputStream fos = new FileOutputStream(codeFile);
      OutputStreamWriter out = new OutputStreamWriter(fos, modelMetadata.getEncoding());
      BufferedWriter bw = new BufferedWriter(out);
     
      /*
       * 合并处理数据与模型
       */
      template.process(root, bw);
      bw.flush();
      bw.close();
     
      return codeFile.getAbsolutePath();
    } catch (Exception e) {
      //throw new RuntimeException("generate " + codeFileName + " failure!", e);
      throw new RuntimeException(e.getMessage(), e);
    }
  }
}
TOP

Related Classes of xgenerator.generators.AbstractGenerator

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.