Search in sources :

Example 1 with FreeSqlHost

use of com.ctrip.platform.dal.daogen.host.java.FreeSqlHost in project dal by ctripcorp.

the class JavaCodeGeneratorOfFreeSqlProcessor method generateFreeSqlDao.

private List<Callable<ExecuteResult>> generateFreeSqlDao(CodeGenContext codeGenCtx, final File mavenLikeDir) {
    JavaCodeGenContext ctx = (JavaCodeGenContext) codeGenCtx;
    final Progress progress = ctx.getProgress();
    List<Callable<ExecuteResult>> results = new ArrayList<>();
    Map<String, JavaMethodHost> _freeSqlPojoHosts = ctx.get_freeSqlPojoHosts();
    for (final JavaMethodHost host : _freeSqlPojoHosts.values()) {
        if (host.isSampleType())
            continue;
        Callable<ExecuteResult> worker = new Callable<ExecuteResult>() {

            @Override
            public ExecuteResult call() throws Exception {
                ExecuteResult result = new ExecuteResult("Generate Free SQL[" + host.getPojoClassName() + "] Pojo");
                progress.setOtherMessage(result.getTaskName());
                try {
                    VelocityContext context = GenUtils.buildDefaultVelocityContext();
                    context.put("host", host);
                    GenUtils.mergeVelocityContext(context, String.format("%s/Entity/%s.java", mavenLikeDir.getAbsolutePath(), host.getPojoClassName()), "templates/java/Pojo.java.tpl");
                    result.setSuccessal(true);
                } catch (Exception e) {
                    log.error(result.getTaskName() + " exception", e);
                }
                return result;
            }
        };
        results.add(worker);
    }
    Queue<FreeSqlHost> _freeSqlHosts = ctx.getFreeSqlHosts();
    for (final FreeSqlHost host : _freeSqlHosts) {
        Callable<ExecuteResult> worker = new Callable<ExecuteResult>() {

            @Override
            public ExecuteResult call() throws Exception {
                ExecuteResult result = new ExecuteResult("Generate Free SQL[" + host.getClassName() + "] Dap, Test");
                progress.setOtherMessage(result.getTaskName());
                try {
                    VelocityContext context = GenUtils.buildDefaultVelocityContext();
                    context.put("host", host);
                    GenUtils.mergeVelocityContext(context, String.format("%s/Dao/%sDao.java", mavenLikeDir.getAbsolutePath(), host.getClassName()), "templates/java/dao/freesql/FreeSqlDAO.java.tpl");
                    GenUtils.mergeVelocityContext(context, String.format("%s/Test/%sDaoUnitTest.java", mavenLikeDir.getAbsolutePath(), host.getClassName()), "templates/java/test/FreeSqlDaoUnitTest.java.tpl");
                    result.setSuccessal(true);
                } catch (Exception e) {
                    log.error(result.getTaskName() + " exception", e);
                }
                return result;
            }
        };
        results.add(worker);
    }
    return results;
}
Also used : Progress(com.ctrip.platform.dal.daogen.entity.Progress) VelocityContext(org.apache.velocity.VelocityContext) ArrayList(java.util.ArrayList) FreeSqlHost(com.ctrip.platform.dal.daogen.host.java.FreeSqlHost) JavaMethodHost(com.ctrip.platform.dal.daogen.host.java.JavaMethodHost) Callable(java.util.concurrent.Callable) ExecuteResult(com.ctrip.platform.dal.daogen.entity.ExecuteResult) JavaCodeGenContext(com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext)

Example 2 with FreeSqlHost

use of com.ctrip.platform.dal.daogen.host.java.FreeSqlHost in project dal by ctripcorp.

the class GenTaskResource method buildFreesqlTaskMethodParam.

private String buildFreesqlTaskMethodParam(GenTaskByFreeSql task) {
    try {
        DalGenerator generator = null;
        CodeGenContext context = null;
        Progress progress = new Progress();
        if ("java".equalsIgnoreCase(task.getSql_style())) {
            generator = new JavaDalGenerator();
            context = generator.createContext(task.getProject_id(), true, progress, true, true);
            generator.prepareData(context);
            JavaCodeGenContext ctx = (JavaCodeGenContext) context;
            Queue<FreeSqlHost> freeSqlHosts = ctx.getFreeSqlHosts();
            FreeSqlHost freeSqlHost = null;
            while ((freeSqlHost = freeSqlHosts.poll()) != null) {
                List<JavaMethodHost> methods = freeSqlHost.getMethods();
                for (JavaMethodHost method : methods) {
                    if (task.getMethod_name().equalsIgnoreCase(method.getName())) {
                        String param = method.getParameterDeclaration();
                        param = param.replaceAll("<", "&lt;");
                        param = param.replaceAll(">", "&gt;");
                        return param;
                    }
                }
            }
        } else {
            generator = new CSharpDalGenerator();
            context = generator.createContext(task.getProject_id(), true, progress, true, true);
            generator.prepareData(context);
            CSharpCodeGenContext ctx = (CSharpCodeGenContext) context;
            Queue<CSharpFreeSqlHost> freeSqlHosts = ctx.getFreeSqlHosts();
            CSharpFreeSqlHost freeSqlHost = null;
            while ((freeSqlHost = freeSqlHosts.poll()) != null) {
                List<CSharpMethodHost> methods = freeSqlHost.getMethods();
                for (CSharpMethodHost method : methods) {
                    if (task.getMethod_name().equalsIgnoreCase(method.getName())) {
                        String param = method.getParameterDeclaration();
                        param = param.replaceAll("<", "&lt;");
                        param = param.replaceAll(">", "&gt;");
                        return param;
                    }
                }
            }
        }
    } catch (Exception e) {
    }
    return null;
}
Also used : CSharpDalGenerator(com.ctrip.platform.dal.daogen.generator.csharp.CSharpDalGenerator) JavaDalGenerator(com.ctrip.platform.dal.daogen.generator.java.JavaDalGenerator) DalGenerator(com.ctrip.platform.dal.daogen.DalGenerator) CSharpCodeGenContext(com.ctrip.platform.dal.daogen.generator.csharp.CSharpCodeGenContext) CodeGenContext(com.ctrip.platform.dal.daogen.CodeGenContext) CSharpCodeGenContext(com.ctrip.platform.dal.daogen.generator.csharp.CSharpCodeGenContext) JavaCodeGenContext(com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext) FreeSqlHost(com.ctrip.platform.dal.daogen.host.java.FreeSqlHost) CSharpFreeSqlHost(com.ctrip.platform.dal.daogen.host.csharp.CSharpFreeSqlHost) JavaDalGenerator(com.ctrip.platform.dal.daogen.generator.java.JavaDalGenerator) JavaMethodHost(com.ctrip.platform.dal.daogen.host.java.JavaMethodHost) EmailException(org.apache.commons.mail.EmailException) CSharpDalGenerator(com.ctrip.platform.dal.daogen.generator.csharp.CSharpDalGenerator) CSharpFreeSqlHost(com.ctrip.platform.dal.daogen.host.csharp.CSharpFreeSqlHost) CSharpMethodHost(com.ctrip.platform.dal.daogen.host.csharp.CSharpMethodHost) JavaCodeGenContext(com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext)

Example 3 with FreeSqlHost

use of com.ctrip.platform.dal.daogen.host.java.FreeSqlHost in project dal by ctripcorp.

the class JavaDataPreparerOfFreeSqlProcessor method prepareFreeSql.

private List<Callable<ExecuteResult>> prepareFreeSql(CodeGenContext codeGenCtx) {
    JavaCodeGenContext ctx = (JavaCodeGenContext) codeGenCtx;
    int projectId = ctx.getProjectId();
    final Progress progress = ctx.getProgress();
    final String namespace = ctx.getNamespace();
    final Map<String, JavaMethodHost> _freeSqlPojoHosts = ctx.get_freeSqlPojoHosts();
    final Queue<FreeSqlHost> _freeSqlHosts = ctx.getFreeSqlHosts();
    DaoByFreeSql daoByFreeSql = SpringBeanGetter.getDaoByFreeSql();
    List<GenTaskByFreeSql> freeSqlTasks;
    if (ctx.isRegenerate()) {
        freeSqlTasks = daoByFreeSql.updateAndGetAllTasks(projectId);
        prepareDbFromFreeSql(ctx, freeSqlTasks);
    } else {
        freeSqlTasks = daoByFreeSql.updateAndGetTasks(projectId);
        prepareDbFromFreeSql(ctx, daoByFreeSql.getTasksByProjectId(projectId));
    }
    if (!ctx.isIgnoreApproveStatus() && freeSqlTasks != null && freeSqlTasks.size() > 0) {
        Iterator<GenTaskByFreeSql> ite = freeSqlTasks.iterator();
        while (ite.hasNext()) {
            int approved = ite.next().getApproved();
            if (approved != 2 && approved != 0) {
                ite.remove();
            }
        }
    }
    // 按照DbName以及ClassName做一次GroupBy(相同DbName的GenTaskByFreeSql作为一组),且ClassName不区分大小写
    final Map<String, List<GenTaskByFreeSql>> groupBy = freeSqlGroupBy(freeSqlTasks);
    List<Callable<ExecuteResult>> results = new ArrayList<>();
    // 以DbName以及ClassName为维度,为每个维度生成一个DAO类
    for (final Map.Entry<String, List<GenTaskByFreeSql>> entry : groupBy.entrySet()) {
        Callable<ExecuteResult> worker = new Callable<ExecuteResult>() {

            @Override
            public ExecuteResult call() throws Exception {
                ExecuteResult result = new ExecuteResult("Build  Free SQL[" + entry.getKey() + "] Host");
                progress.setOtherMessage(result.getTaskName());
                List<GenTaskByFreeSql> currentTasks = entry.getValue();
                if (currentTasks.size() < 1)
                    return result;
                FreeSqlHost host = new FreeSqlHost();
                host.setDbSetName(currentTasks.get(0).getDatabaseSetName());
                host.setClassName(currentTasks.get(0).getClass_name());
                host.setPackageName(namespace);
                host.setDatabaseCategory(getDatabaseCategory(currentTasks.get(0).getAllInOneName()));
                List<JavaMethodHost> methods = new ArrayList<>();
                // 每个Method可能就有一个Pojo
                for (GenTaskByFreeSql task : currentTasks) {
                    JavaMethodHost method = new JavaMethodHost();
                    method.setSql(task.getSql_content());
                    method.setName(task.getMethod_name());
                    method.setPackageName(namespace);
                    method.setScalarType(task.getScalarType());
                    method.setPojoType(task.getPojoType());
                    method.setPaging(task.isPagination());
                    method.setCrud_type(task.getCrud_type());
                    method.setComments(task.getComment());
                    if (task.getPojo_name() != null && !task.getPojo_name().isEmpty())
                        method.setPojoClassName(WordUtils.capitalize(task.getPojo_name() + "Pojo"));
                    List<JavaParameterHost> params = new ArrayList<>();
                    for (String param : StringUtils.split(task.getParameters(), ";")) {
                        String[] splitedParam = StringUtils.split(param, ",");
                        JavaParameterHost p = new JavaParameterHost();
                        p.setName(splitedParam[0]);
                        p.setSqlType(Integer.valueOf(splitedParam[1]));
                        p.setJavaClass(Consts.jdbcSqlTypeToJavaClass.get(p.getSqlType()));
                        p.setValidationValue(DbUtils.mockATest(p.getSqlType()));
                        boolean sensitive = splitedParam.length >= 3 ? Boolean.parseBoolean(splitedParam[2]) : false;
                        p.setSensitive(sensitive);
                        params.add(p);
                    }
                    SqlBuilder.rebuildJavaInClauseSQL(task.getSql_content(), params);
                    method.setParameters(params);
                    method.setHints(task.getHints());
                    methods.add(method);
                    if (method.getPojoClassName() != null && !method.getPojoClassName().isEmpty() && !_freeSqlPojoHosts.containsKey(method.getPojoClassName()) && !"update".equalsIgnoreCase(method.getCrud_type())) {
                        List<JavaParameterHost> paramHosts = new ArrayList<>();
                        for (AbstractParameterHost _ahost : DbUtils.testAQuerySql(task.getAllInOneName(), task.getSql_content(), task.getParameters(), new JavaGivenSqlResultSetExtractor())) {
                            paramHosts.add((JavaParameterHost) _ahost);
                        }
                        method.setFields(paramHosts);
                        _freeSqlPojoHosts.put(method.getPojoClassName(), method);
                    }
                }
                host.setMethods(methods);
                _freeSqlHosts.add(host);
                result.setSuccessal(true);
                return result;
            }
        };
        results.add(worker);
    }
    return results;
}
Also used : JavaGivenSqlResultSetExtractor(com.ctrip.platform.dal.daogen.host.java.JavaGivenSqlResultSetExtractor) JavaParameterHost(com.ctrip.platform.dal.daogen.host.java.JavaParameterHost) FreeSqlHost(com.ctrip.platform.dal.daogen.host.java.FreeSqlHost) GenTaskByFreeSql(com.ctrip.platform.dal.daogen.entity.GenTaskByFreeSql) JavaMethodHost(com.ctrip.platform.dal.daogen.host.java.JavaMethodHost) Callable(java.util.concurrent.Callable) ExecuteResult(com.ctrip.platform.dal.daogen.entity.ExecuteResult) JavaCodeGenContext(com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext) AbstractParameterHost(com.ctrip.platform.dal.daogen.host.AbstractParameterHost) Progress(com.ctrip.platform.dal.daogen.entity.Progress) DaoByFreeSql(com.ctrip.platform.dal.daogen.dao.DaoByFreeSql)

Aggregations

JavaCodeGenContext (com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext)3 FreeSqlHost (com.ctrip.platform.dal.daogen.host.java.FreeSqlHost)3 JavaMethodHost (com.ctrip.platform.dal.daogen.host.java.JavaMethodHost)3 ExecuteResult (com.ctrip.platform.dal.daogen.entity.ExecuteResult)2 Progress (com.ctrip.platform.dal.daogen.entity.Progress)2 Callable (java.util.concurrent.Callable)2 CodeGenContext (com.ctrip.platform.dal.daogen.CodeGenContext)1 DalGenerator (com.ctrip.platform.dal.daogen.DalGenerator)1 DaoByFreeSql (com.ctrip.platform.dal.daogen.dao.DaoByFreeSql)1 GenTaskByFreeSql (com.ctrip.platform.dal.daogen.entity.GenTaskByFreeSql)1 CSharpCodeGenContext (com.ctrip.platform.dal.daogen.generator.csharp.CSharpCodeGenContext)1 CSharpDalGenerator (com.ctrip.platform.dal.daogen.generator.csharp.CSharpDalGenerator)1 JavaDalGenerator (com.ctrip.platform.dal.daogen.generator.java.JavaDalGenerator)1 AbstractParameterHost (com.ctrip.platform.dal.daogen.host.AbstractParameterHost)1 CSharpFreeSqlHost (com.ctrip.platform.dal.daogen.host.csharp.CSharpFreeSqlHost)1 CSharpMethodHost (com.ctrip.platform.dal.daogen.host.csharp.CSharpMethodHost)1 JavaGivenSqlResultSetExtractor (com.ctrip.platform.dal.daogen.host.java.JavaGivenSqlResultSetExtractor)1 JavaParameterHost (com.ctrip.platform.dal.daogen.host.java.JavaParameterHost)1 ArrayList (java.util.ArrayList)1 EmailException (org.apache.commons.mail.EmailException)1