package cn.org.rapid_framework.generator.ext.tableconfig.model; import java.io.File; import java.io.FileInputStream; import java.util.HashMap; import java.util.Map; import cn.org.rapid_framework.generator.GeneratorConstants; import cn.org.rapid_framework.generator.GeneratorProperties; import cn.org.rapid_framework.generator.GeneratorTestCase; import cn.org.rapid_framework.generator.Generator.GeneratorModel; import cn.org.rapid_framework.generator.GeneratorFacade.GeneratorModelUtils; import cn.org.rapid_framework.generator.ext.tableconfig.builder.TableConfigXmlBuilder; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.Convert2SqlsProecssor; import cn.org.rapid_framework.generator.ext.tableconfig.model.TableConfig.SqlConfig; import cn.org.rapid_framework.generator.provider.db.sql.model.Sql; import cn.org.rapid_framework.generator.util.BeanHelper; import cn.org.rapid_framework.generator.util.FileHelper; import cn.org.rapid_framework.generator.util.GLogger; import cn.org.rapid_framework.generator.util.StringHelper; import cn.org.rapid_framework.generator.util.test.GeneratorTestHelper; public class MetaTableTest extends GeneratorTestCase { public void setUp() throws Exception { super.setUp(); g.setOutRootDir("./target/temp/"+getClass().getSimpleName()+"/"+getName()); GeneratorProperties.setProperty("appName", "rapid"); GLogger.perfLogLevel = GLogger.INFO; } public void test_genereate_by_sql_config() throws Exception { g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql_config")); File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/user_info.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(new FileInputStream(file)); GeneratorModel gm = newFromTable(t); g.generateBy(gm.templateModel, gm.filePathModel); g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql")); for(Sql sql : t.getSqls()) { GeneratorModel sqlGM = MetaTableTest.newFromSql(sql,t); g.generateBy(sqlGM.templateModel, sqlGM.filePathModel); } } public void test_generate_by_user_info() throws Exception { g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql")); File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/user_info.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(new FileInputStream(file)); for(Sql sql : t.getSqls()) { GeneratorModel gm = newFromSql(sql,t); g.generateBy(gm.templateModel, gm.filePathModel); } } public void test_generate_by_user_info_freemarker() throws Exception { g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql_config")); File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/user_info_freemarker.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(new FileInputStream(file)); GeneratorModel gm = newFromTable(t); g.generateBy(gm.templateModel, gm.filePathModel); g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql")); for(Sql sql : t.getSqls()) { GeneratorModel sqlGM = MetaTableTest.newFromSql(sql,t); g.generateBy(sqlGM.templateModel, sqlGM.filePathModel); } } public void testSetOperations() throws Exception { g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql")); File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/user_info.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(new FileInputStream(file)); GeneratorModel gm = newFromSql(new Convert2SqlsProecssor().toSql(t, getName()),t); g.generateBy(gm.templateModel, gm.filePathModel); } public void test_include_sql_by_refid() throws Exception { g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql")); File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/user_info.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(file); System.out.println(t.getIncludeSqls()); SqlConfig metaSql = t.getIncludeSqls().get(0); assertEquals(metaSql.sql.trim(),"<![CDATA[ USER_ID ,USERNAME ,PASSWORD ,BIRTH_DATE ,SEX ,AGE ]]>"); } public void test_generate_by_mybatis_user_info() throws Exception { g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql_config")); File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/mybatis_user_info.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(file); GeneratorModel gm = newFromTable(t); g.generateBy(gm.templateModel, gm.filePathModel); g.setTemplateRootDir(FileHelper.getFileByClassLoader("for_generate_by_sql")); for(Sql sql : t.getSqls()) { gm = newFromSql(sql,t); g.generateBy(gm.templateModel, gm.filePathModel); } } public void test_remove_table_prefix() { GeneratorProperties.setProperty(GeneratorConstants.TABLE_REMOVE_PREFIXES, "t_,v_"); TableConfig tc = new TableConfig(); tc.setSqlName("t_user_info"); assertEquals("UserInfo",tc.getClassName()); tc.setSqlName("v_user"); assertEquals("User",tc.getClassName()); tc.setSqlName("diy_user"); assertEquals("DiyUser",tc.getClassName()); } public static GeneratorModel newFromSql(Sql sql, TableConfig t) { Map templateModel = new HashMap(); templateModel.putAll(GeneratorProperties.getProperties()); templateModel.put("sql", sql); templateModel.put("tableConfig", t); setShareVars(templateModel); Map filePathModel = new HashMap(); filePathModel.putAll(GeneratorProperties.getProperties()); filePathModel.putAll(BeanHelper.describe(t)); filePathModel.putAll(BeanHelper.describe(sql)); setShareVars(filePathModel); GeneratorModel gm = new GeneratorModel(templateModel,filePathModel); return gm; } public static GeneratorModel newFromTable(TableConfig t) { t.setPackage("com.company.project"); Map templateModel = new HashMap(); templateModel.putAll(GeneratorProperties.getProperties()); templateModel.put("tableConfig", t); setShareVars(templateModel); Map filePathModel = new HashMap(); setShareVars(filePathModel); filePathModel.putAll(GeneratorProperties.getProperties()); filePathModel.putAll(BeanHelper.describe(t)); GeneratorModel gm = new GeneratorModel(templateModel,filePathModel); return gm; } public void test_gen_by_operation() throws Exception{ File file = FileHelper.getFileByClassLoader("cn/org/rapid_framework/generator/ext/tableconfig/user_info.xml"); TableConfig t = new TableConfigXmlBuilder().parseFromXML(new FileInputStream(file)); g.addTemplateRootDir("classpath:generator/template/rapid/operation/dal/src/main"); g.addTemplateRootDir("classpath:generator/template/rapid/share/dal"); String content = GeneratorTestHelper.generateBy(g,new Helper().getMapBySql(t, "testIncludeWhere")); assertContains(content,"java/com/company/project/user_info/operation/userinfo/TestIncludeWhereQuery.java"); assertContains(content, "package com.company.project.user_info.operation.userinfo;"); assertContains(content, "/** 用户名 */"); assertContains(content, "用户信息表"); assertContains(content, "PageQuery"); content = GeneratorTestHelper.generateBy(g,new Helper().getMapBySql(t, "testIncludeWhereWithNoPaging")); assertContains("java/com/company/project/user_info/operation/userinfo/TestIncludeWhereWithNoPagingQuery.java"); assertContains(content, "/** 用户名 */"); assertNotContains(content, " PageQuery"); System.out.println(content); } public static void setShareVars(Map templateModel) { templateModel.putAll(GeneratorModelUtils.getShareVars()); templateModel.put("StringHelper", new StringHelper()); templateModel.put("basepackage", "com.company.project"); } }