package cn.org.rapid_framework.generator.util.test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import cn.org.rapid_framework.generator.Generator;
import cn.org.rapid_framework.generator.GeneratorFacade;
import cn.org.rapid_framework.generator.Generator.GeneratorModel;
import cn.org.rapid_framework.generator.provider.db.sql.model.Sql;
import cn.org.rapid_framework.generator.util.FileHelper;
import cn.org.rapid_framework.generator.util.StringHelper;
/**
* 生成器的测试工具类,用于将模板内容生成在某个临时文件夹,
* 然后读取临时文件夹的内容返回 返回之前会删除临时文件夹
*
* @author badqiu
*
*/
public class GeneratorTestHelper {
private static AtomicLong count = new AtomicLong(System.currentTimeMillis());
public static String generateBy(GeneratorFacade gf,
GeneratorModel... models) throws Exception {
File tempDir = getOutputTempDir();
gf.getGenerator().setOutRootDir(tempDir.getPath());
gf.generateBy(models);
return readEntireDirectoryContentAndDelete(tempDir,gf.getGenerator().getOutputEncoding());
}
public static String generateByAllTable(GeneratorFacade gf)
throws Exception {
File tempDir = getOutputTempDir();
gf.getGenerator().setOutRootDir(tempDir.getPath());
gf.generateByAllTable();
return readEntireDirectoryContentAndDelete(tempDir,gf.getGenerator().getOutputEncoding());
}
public static String generateByClass(GeneratorFacade gf, Class... clazzes)
throws Exception {
File tempDir = getOutputTempDir();
gf.getGenerator().setOutRootDir(tempDir.getPath());
gf.generateByClass(clazzes);
return readEntireDirectoryContentAndDelete(tempDir,gf.getGenerator().getOutputEncoding());
}
public static String generateByMap(GeneratorFacade gf, Map... maps)
throws Exception {
File tempDir = getOutputTempDir();
gf.getGenerator().setOutRootDir(tempDir.getPath());
gf.generateByMap(maps);
return readEntireDirectoryContentAndDelete(tempDir,gf.getGenerator().getOutputEncoding());
}
public static String generateBySql(GeneratorFacade gf, Sql... sqls)
throws Exception {
File tempDir = getOutputTempDir();
gf.getGenerator().setOutRootDir(tempDir.getPath());
gf.generateBySql(sqls);
return readEntireDirectoryContentAndDelete(tempDir,gf.getGenerator().getOutputEncoding());
}
public static String generateByTable(GeneratorFacade gf,
String... tableNames) throws Exception {
File tempDir = getOutputTempDir();
gf.getGenerator().setOutRootDir(tempDir.getPath());
gf.generateByTable(tableNames);
return readEntireDirectoryContentAndDelete(tempDir,gf.getGenerator().getOutputEncoding());
}
public static String generateBy(Generator g, Map templateModel)
throws Exception {
return generateBy(g, templateModel,templateModel);
}
public static String generateBy(Generator g, Map templateModel, Map filePathModel)
throws Exception {
File tempDir = getOutputTempDir();
g.setOutRootDir(tempDir.getPath());
g.generateBy(templateModel, filePathModel);
return readEntireDirectoryContentAndDelete(tempDir,g.getOutputEncoding());
}
private static String readEntireDirectoryContentAndDelete(File tempDir,String encoding) {
String result = FileHelper.readEntireDirectoryContent(tempDir,encoding);
List<File> files = FileHelper.searchAllNotIgnoreFile(tempDir);
for(File f : files) {
if(f.isDirectory()) continue;
String relativePath = FileHelper.getRelativePath(tempDir,f).replace('\\', '/');
if(StringHelper.isBlank(relativePath)) continue;
result = result + "\n"+"file:"+relativePath;
}
try {
FileHelper.deleteDirectory(tempDir);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private static File getOutputTempDir() {
File tempDir = new File(FileHelper.getTempDir(), "GeneratorTestHelper/"
+ count.incrementAndGet() + ".tmp");
tempDir.deleteOnExit();
return tempDir;
}
}