/**
* Created at 2008-01-23.
*/
package com.allinpay.generator.ibatis.generator;
import java.io.CharArrayWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
import com.allinpay.frameworkdao.ibatis.metadata.TableMetaData;
import com.allinpay.util.FileUtil;
import freemarker.template.Template;
/**
* @author pony
* 如果有任何对代码的修改,请按下面的格式注明修改的内容.
* 序号 时间 作者 修改内容
* 1. 2008-1-23 pony created this class.
*/
public abstract class AbstractConfigFileGenerator extends AbstractCodeGenerator {
private static final String tokenBegin = "<!--Auto Generated Begin-->";
private static final String tokenEnd = "<!--Auto Generated End-->";
/**
* 把已经生成的配置文件内容读取出.
* @param filename
* @return
*/
public String readGeneratedContent(String filename) {
try {
String temp = FileUtil.read(filename);
return parseGeneratedContent(temp);
} catch (IOException e) {
}
return "";
}
public String parseGeneratedContent(String content) {
int index1 = content.indexOf(tokenBegin);
if (index1 == -1) {
return "";
}
int index2 = content.indexOf(tokenEnd, index1);
String result = content.substring(index1+tokenBegin.length(), index2);
return result;
}
public String mergeContent(String oldContent, String newContent) {
String temp = parseGeneratedContent(newContent);
String content = oldContent + temp;
int index1 = newContent.indexOf(tokenBegin);
if (index1 == -1) {
return "";
}
String prefix = newContent.substring(0, index1+tokenBegin.length());
int index2 = newContent.indexOf(tokenEnd, index1);
String postfix = newContent.substring(index2);
content = prefix + content + postfix;
return content;
}
abstract String getGeneratedFilename(String fileName);
/* (non-Javadoc)
* @see com.allinpay.generator.ibatis.generator.AbstractCodeGenerator#generate(java.util.Map)
*/
@Override
public void generate(Map model) {
this.model = model;
Writer writer = null;
FileWriter fw = null;
try {
writer = new CharArrayWriter();
Template modelDao = getTemplate(getTemplateFile());
model.put("package", getRealPackageName());
modelDao.process(model, writer);
writer.flush();
String filename = ((TableMetaData)model.get("tmd")).getJavaName();
String generatedContent = readGeneratedContent(getGeneratedFilename(filename));
String newContent = writer.toString();
String content = mergeContent(generatedContent, newContent);
File file = createEmptyGeneratedFile(filename);
fw = new FileWriter(file);
fw.write(content);
fw.flush();
fw.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != writer) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != fw) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}