package com.hundsun.ares.studio.atom.ui; import java.text.SimpleDateFormat; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Queue; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.eclipse.emf.common.util.EList; import com.hundsun.ares.studio.atom.AtomFunction; import com.hundsun.ares.studio.atom.AtomService; import com.hundsun.ares.studio.atom.compiler.constant.IAtomEngineContextConstant; import com.hundsun.ares.studio.atom.compiler.constant.IAtomSkeletonFactoryConstant; import com.hundsun.ares.studio.atom.compiler.mysql.constant.IAtomSkeletonFactoryConstantMySQL; import com.hundsun.ares.studio.atom.constants.IAtomResType; import com.hundsun.ares.studio.atom.ui.util.AtomModuelGeneratorHelper; import com.hundsun.ares.studio.biz.Parameter; import com.hundsun.ares.studio.biz.util.ParamGroupUtil; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.ARESProblem; import com.hundsun.ares.studio.core.IARESModule; import com.hundsun.ares.studio.core.IARESProblem; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.model.ICommonModel; import com.hundsun.ares.studio.cres.constant.ICresUIConstant; import com.hundsun.ares.studio.cres.extend.cresextend.CresMoudleExtendProperty; import com.hundsun.ares.studio.cres.extend.cresextend.MoudleDepend; import com.hundsun.ares.studio.cres.extend.ui.module.gencode.GenCresModuleCode; import com.hundsun.ares.studio.cres.extend.ui.module.gencode.util.FileNameHelper; import com.hundsun.ares.studio.cres.extend.ui.module.gencode.util.MakeFileBuilder; import com.hundsun.ares.studio.cres.extend.ui.module.gencode.util.ModuleGeneratorHelper; import com.hundsun.ares.studio.cres.extend.ui.module.gencode.util.RevisionHistoryGenUtil; import com.hundsun.ares.studio.engin.format.CodeFormater; import com.hundsun.ares.studio.engin.logic.ResourceEngin; import com.hundsun.ares.studio.engin.skeleton.DefaultSkeletonInput; import com.hundsun.ares.studio.jres.database.utils.ProjectSettingUtil; import com.hundsun.ares.studio.ui.ARESUI; public class GenAtomModuleCode extends GenCresModuleCode { @Override public void genModuleCode(IARESModule module, Map<Object, Object> context, boolean isWithPath, boolean isPathWithCname,IProgressMonitor monitor) { if(monitor.isCanceled()){ return; } String newPath = ModuleGeneratorHelper.getModuleGenCodePath(module.getARESProject()); try { if(isWithPath) {//��Ŀ¼ if(isPathWithCname){//ʹ����������Ϊ�ļ�Ŀ¼ String moduleCName = ModuleGeneratorHelper.getModuleProperty(module).getString(ICommonModel.CNAME); if(moduleCName != null && moduleCName.trim().length() > 0){ newPath += ModuleGeneratorHelper.getParentModuleCnamePath(module);//����ģ��·�� newPath += StringUtils.trim(FileNameHelper.legalFileOrDirName(moduleCName));//ģ�����������˵Ŀո�Ҫȥ�� newPath += "\\"; createFilePath(newPath);//�����ļ�Ŀ¼ } }else{ String moduleName = module.getShortName(); if(moduleName != null && moduleName.trim().length() > 0){ newPath += ModuleGeneratorHelper.getParentModulePath(module);//����ģ��·�� newPath += moduleName; newPath += "\\"; createFilePath(newPath);//�����ļ�Ŀ¼ } } } IPreferencesService service = Platform.getPreferencesService(); String charSet = service.getString(ARESUI.PLUGIN_ID, ARESUI.PRE_GENERATE_CHARSET, StringUtils.EMPTY, null); //��ģ�� IARESModule[] subModules = module.getSubModules(); //��ģ����Դ IARESResource[] mRess = module.getARESResources(); monitor.beginTask(newPath, mRess.length + subModules.length*10 + 2); if(mRess.length > 0) {//����Դ������ if(mRess.length == 1 && StringUtils.equals(mRess[0].getType(), "module.xml")) {//�п�����ģ������ System.out.println(mRess[0].getType()); }else { String databaseType = ProjectSettingUtil.getDatabaseType(module.getARESProject()); if(databaseType.equalsIgnoreCase(ProjectSettingUtil.MYSQL)){ createFlowCPPFile(monitor,module,newPath,isWithPath,charSet);//ԭ�ӷ���,MySQLʱ������CPP createFunctionCPPFile(monitor,module,newPath,charSet);//ԭ�Ӻ���,MySQLʱ������CPP createFlowGCCFile_MySQL(monitor,module,newPath,isWithPath,charSet);//GCC�ļ���������ά�� }else{ createFlowPCFile(monitor,module,newPath,isWithPath,charSet);//ԭ�ӷ��� createFunctionPCFile(monitor,module,newPath,charSet);//ԭ�Ӻ��� createFlowGCCFile(monitor,module,newPath,isWithPath,charSet);//GCC�ļ���������ά�� } createrHFile("as_",module,newPath,charSet);//ͷ��Ϣ generateAtomicServiceTest(module,newPath,charSet);//ԭ�ӷ�������ļ� monitor.worked(1); //���� // new GenProcedureModuleCode(module, errLog).createProcedureFile(monitor, module, newPath); // monitor.worked(1); } } //�ݹ�ģ�� for (IARESModule subModule : subModules) { genModuleCode(subModule,context,isWithPath,isPathWithCname,new SubProgressMonitor(monitor, 10)); } monitor.done(); } catch (Exception e) { e.printStackTrace(); monitor.setCanceled(true); } } /** * ����ԭ�ӷ�������ļ� * @param path * @param module * @param charSet */ private void generateAtomicServiceTest(IARESModule module, String path,String charSet) throws Exception{ String codeFileNname = path + "s_as_" + module.getShortName() + ".xml"; StringBuffer codeBuffer = new StringBuffer(); codeBuffer.append("<?xml version=\"1.0\" encoding=\"GBK\"?>"); codeBuffer.append("\r\n"); codeBuffer.append("<TEST_PACK note=\"ct���ù��ܺ���������԰�\">"); codeBuffer.append("\r\n"); codeBuffer.append(" <Test>"); codeBuffer.append("\r\n"); //ԭ�ӷ��� IARESResource[] moduleRes = module.getARESResources(IAtomResType.ATOM_SERVICE);//ԭ�ӷ��� List<IARESResource> modulesReslist = Arrays.asList(moduleRes); //���� Collections.sort(modulesReslist,new Comparator<IARESResource>() { @Override public int compare(IARESResource o1, IARESResource o2) { try { //��ʱ��ԴΪԭ�ӷ��� AtomService as1 = o1.getInfo(AtomService.class); AtomService as2 = o2.getInfo(AtomService.class); return Integer.valueOf(as1.getObjectId()) - Integer.valueOf(as2.getObjectId()); } catch (ARESModelException e) { e.printStackTrace(); return 0; } } }); String inparams = " <in name=\"%s\" value=\"%s\"/>"; for (IARESResource res : modulesReslist) { AtomService service = res.getInfo(AtomService.class); if(!ParamGroupUtil.isContainObjectParameter(service.getInputParameters(),res.getARESProject()) && !ParamGroupUtil.isContainObjectParameter(service.getOutputParameters(),res.getARESProject())){ codeBuffer.append(" <sub id=\"" + service.getObjectId() + "\" block=\"1\" livetime=\"" + service.getTimeout() + "\" pri=\"8\" pack_ver=\"32\" note=\"" + service.getChineseName() + "\">"); codeBuffer.append("\r\n"); codeBuffer.append(" <route system=\"\" sub_system=\"\" branch=\"\" esb_name=\"\" esb_no=\"0\" neighbor=\"\" plugin=\"\"/>"); codeBuffer.append("\r\n"); codeBuffer.append(" <inparams note=\"" + service.getChineseName() + "\">"); codeBuffer.append("\r\n"); List<Parameter> allInputParametersWithNoObjectParameter = new ArrayList<Parameter>(); ParamGroupUtil.parserParametersWithNoObjectParameter(service.getInputParameters(), allInputParametersWithNoObjectParameter, res.getARESProject()); for(Parameter inParameter:allInputParametersWithNoObjectParameter){ codeBuffer.append(String.format(inparams, inParameter.getId(), "")).append("\r\n"); } List<Parameter> allOutParametersWithNoObjectParameter = new ArrayList<Parameter>(); ParamGroupUtil.parserParametersWithNoObjectParameter(service.getOutputParameters(), allInputParametersWithNoObjectParameter, res.getARESProject()); for (Parameter outParameter : allOutParametersWithNoObjectParameter) { if (StringUtils.indexOf(outParameter.getId(), "IO") >= 0) { codeBuffer.append(String.format(inparams, outParameter.getId(), "")).append("\r\n"); } } codeBuffer.append(" </inparams>"); codeBuffer.append("\r\n"); codeBuffer.append(" </sub>"); codeBuffer.append("\r\n"); } } codeBuffer.append(" </Test>"); codeBuffer.append("\r\n"); codeBuffer.append("</TEST_PACK>"); codeBuffer.append("\r\n"); writeToFile(codeFileNname, codeBuffer.toString(),charSet); } /* ����.h�ļ� */ protected void createrHFile(String prefix_as, IARESModule module, String path,String charSet) throws Exception{ String codeFileName = path + "s_" + prefix_as + module.getShortName() + "func.h"; StringBuffer codeBuffer = new StringBuffer(); // д��ע��ͷ ModuleGeneratorHelper.writeCommentHeader(codeBuffer, ModuleGeneratorHelper.getCresProjectExtendProperty(module).getHeadFile(), codeFileName, module.getShortName(), new Date()); codeBuffer.append("\r\n"); codeBuffer.append(getHString(module)); writeToFile(codeFileName, codeBuffer.toString(),charSet); } private StringBuffer getHString(IARESModule module) throws Exception{ StringBuffer hStr = new StringBuffer(); String upperModuleName = module.getShortName().toUpperCase(); hStr.append("#ifndef _S_AS_" + upperModuleName + "FUNC_H\r\n"); hStr.append("#define _S_AS_" + upperModuleName + "FUNC_H\r\n"); // ͷ�ļ��м��϶������������ List<String> includes = new ArrayList<String>(); includes.add("hshead.h"); //=======ģ�������� EList<MoudleDepend> depends = ModuleGeneratorHelper.getCresMoudleExtendProperty(module).getDepends(); for (MoudleDepend depend : depends) { includes.add("s_as_" + depend.getName() + "func.h"); } // д��include�ļ� ModuleGeneratorHelper.writeIncludeSection(hStr, includes); // --------------------------end---------------------------------------------------------- // hStr.append("#include \"hshead.h\"\n"); IARESResource[] moduleRes = module.getARESResources(IAtomResType.ATOM_FUNCTION);//ԭ�Ӻ��� List<IARESResource> modulesReslist = Arrays.asList(moduleRes); //���� Collections.sort(modulesReslist,new Comparator<IARESResource>() { @Override public int compare(IARESResource o1, IARESResource o2) { try { //��ʱ��ԴΪԭ�ӷ��� AtomFunction af1 = o1.getInfo(AtomFunction.class); AtomFunction af2 = o2.getInfo(AtomFunction.class); if(af1.getObjectId() != null && af1.getObjectId() != "" && af2.getObjectId() != null && af2.getObjectId() != ""){ return Integer.valueOf(af1.getObjectId()) - Integer.valueOf(af2.getObjectId()); } return 0; } catch (ARESModelException e) { e.printStackTrace(); return 0; } } }); for (IARESResource res : modulesReslist) { AtomFunction func; try { func = res.getInfo(AtomFunction.class); // ˵�� hStr.append("//" + func.getChineseName() + "\n"); hStr.append("int FUNCTION_CALL_MODE "); hStr.append(StringUtils.isBlank(func.getObjectId())?func.getName():"F"+func.getObjectId());// ������ hStr.append("(IAS2Context * lpContext,IF2UnPacker * lpInUnPacker,IF2Packer * lpOutPacker,IConnection * lpParentConn=NULL);\n"); hStr.append("\n"); } catch (ARESModelException e) { e.printStackTrace(); } } hStr.append("#endif /* _S_AS_" + upperModuleName + "FUNC_H */\r\n"); return hStr; } /** * @param monitor * @param module * @param path */ private void createFunctionPCFile(IProgressMonitor monitor, IARESModule module, String path,String charSet) throws Exception{ IARESResource[] moduleRes = module.getARESResources(IAtomResType.ATOM_FUNCTION);//ԭ�Ӻ��� List<IARESResource> modulesReslist = Arrays.asList(moduleRes); //���� Collections.sort(modulesReslist,new Comparator<IARESResource>() { @Override public int compare(IARESResource o1, IARESResource o2) { try { //��ʱ��ԴΪԭ�ӷ��� AtomFunction af1 = o1.getInfo(AtomFunction.class); AtomFunction af2 = o2.getInfo(AtomFunction.class); if(af1.getObjectId() != null && af1.getObjectId() != "" && af2.getObjectId() != null && af2.getObjectId() != ""){ return Integer.valueOf(af1.getObjectId()) - Integer.valueOf(af2.getObjectId()); } return 0; } catch (ARESModelException e) { e.printStackTrace(); return 0; } } }); //���ɴ���ʱ��������Ϣ�������Ϣ���� Queue<IARESProblem> msgQueue = new ArrayDeque<IARESProblem>(); String codeFileName = path + "s_as_" + module.getShortName() + "func.pc"; StringBuffer codeBuffer = new StringBuffer();//�ļ����� //ע��ͷ��Ϣ ModuleGeneratorHelper.writeCommentHeader(codeBuffer, ModuleGeneratorHelper.getCresProjectExtendProperty(module).getHeadFile(), codeFileName, module.getShortName(), new Date()); // GeneratorHelper.writeCommentHeader(codeBuffer, module.getHSProject().getProperty().getCommentHeader(), codeFile.getName(), module.getElementName(), new Date()); //�ļ�ͷ��Ϣ codeBuffer.append(getTopString("as_",module)); //�޸ļ�¼ codeBuffer.append(RevisionHistoryGenUtil.getAllRevisionHistoryInfo(AtomModuelGeneratorHelper.getAtomModuleHistorys(module), "//")); //��Դ���ɴ��� for (IARESResource iaresResource : modulesReslist) { if(monitor.isCanceled()) { return; } monitor.setTaskName("ԭ�Ӻ�����"+iaresResource.getFullyQualifiedName()); codeBuffer.append(genAtomFunctionCode(iaresResource,msgQueue)); monitor.worked(1); } //д���ļ� writeToFile(codeFileName, codeBuffer.toString(),charSet); // ��־�ļ� String errorLogFileName = "s_as_" + module.getElementName() + "func.errorlog"; createErrLog(msgQueue, errorLogFileName,path,charSet); } /** * MySQLʱ��û��proc��ֱ������CPP * @param monitor * @param module * @param path */ private void createFunctionCPPFile(IProgressMonitor monitor, IARESModule module, String path,String charSet) throws Exception{ IARESResource[] moduleRes = module.getARESResources(IAtomResType.ATOM_FUNCTION);//ԭ�Ӻ��� List<IARESResource> modulesReslist = Arrays.asList(moduleRes); //���� Collections.sort(modulesReslist,new Comparator<IARESResource>() { @Override public int compare(IARESResource o1, IARESResource o2) { try { //��ʱ��ԴΪԭ�ӷ��� AtomFunction af1 = o1.getInfo(AtomFunction.class); AtomFunction af2 = o2.getInfo(AtomFunction.class); if(af1.getObjectId() != null && af1.getObjectId() != "" && af2.getObjectId() != null && af2.getObjectId() != ""){ return Integer.valueOf(af1.getObjectId()) - Integer.valueOf(af2.getObjectId()); } return 0; } catch (ARESModelException e) { e.printStackTrace(); return 0; } } }); //���ɴ���ʱ��������Ϣ�������Ϣ���� Queue<IARESProblem> msgQueue = new ArrayDeque<IARESProblem>(); String codeFileName = path + "s_as_" + module.getShortName() + "func.cpp"; StringBuffer codeBuffer = new StringBuffer();//�ļ����� //ע��ͷ��Ϣ ModuleGeneratorHelper.writeCommentHeader(codeBuffer, ModuleGeneratorHelper.getCresProjectExtendProperty(module).getHeadFile(), codeFileName, module.getShortName(), new Date()); // GeneratorHelper.writeCommentHeader(codeBuffer, module.getHSProject().getProperty().getCommentHeader(), codeFile.getName(), module.getElementName(), new Date()); //�ļ�ͷ��Ϣ codeBuffer.append(getTopString("as_",module)); //�޸ļ�¼ codeBuffer.append(RevisionHistoryGenUtil.getAllRevisionHistoryInfo(AtomModuelGeneratorHelper.getAtomModuleHistorys(module), "//")); //��Դ���ɴ��� for (IARESResource iaresResource : modulesReslist) { if(monitor.isCanceled()) { return; } monitor.setTaskName("ԭ�Ӻ�����"+iaresResource.getFullyQualifiedName()); codeBuffer.append(genAtomFunctionCode(iaresResource,msgQueue)); monitor.worked(1); } //д���ļ� writeToFile(codeFileName, codeBuffer.toString(),charSet); // ��־�ļ� String errorLogFileName = "s_as_" + module.getElementName() + "func.errorlog"; createErrLog(msgQueue, errorLogFileName,path,charSet); } /** * @param monitor * @param module * @param path */ private void createFlowPCFile(IProgressMonitor monitor, IARESModule module, String path, boolean isWithPath,String charSet) throws Exception{ IARESResource[] moduleRes = module.getARESResources(IAtomResType.ATOM_SERVICE);//ԭ�ӷ��� List<IARESResource> modulesReslist = Arrays.asList(moduleRes); //���� Collections.sort(modulesReslist,new Comparator<IARESResource>() { @Override public int compare(IARESResource o1, IARESResource o2) { try { //��ʱ��ԴΪԭ�ӷ��� AtomService as1 = o1.getInfo(AtomService.class); AtomService as2 = o2.getInfo(AtomService.class); return Integer.valueOf(as1.getObjectId()) - Integer.valueOf(as2.getObjectId()); } catch (ARESModelException e) { e.printStackTrace(); return 0; } } }); //���ɴ���ʱ��������Ϣ�������Ϣ���� Queue<IARESProblem> msgQueue = new ArrayDeque<IARESProblem>(); //��Դ���ɴ��� String codeFileName = path + "s_as_" + module.getShortName() + "flow.pc"; StringBuffer codeBuffer = new StringBuffer(); // д��ע��ͷ ModuleGeneratorHelper.writeCommentHeader(codeBuffer, ModuleGeneratorHelper.getCresProjectExtendProperty(module).getHeadFile(), codeFileName, module.getShortName(), new Date()); codeBuffer.append("\n"); //�ļ�ͷ��Ϣ codeBuffer.append(getTopString("as_",module).toString()); // �����޸ļ�¼ codeBuffer.append(RevisionHistoryGenUtil.getAllRevisionHistoryInfo(AtomModuelGeneratorHelper.getAtomModuleHistorys(module), "//")); //�ļ����� for (IARESResource iaresResource : modulesReslist) { if(monitor.isCanceled()){ return; } monitor.setTaskName("ԭ�ӷ���"+iaresResource.getFullyQualifiedName()); codeBuffer.append(genAtomServiceCode(iaresResource,msgQueue)); monitor.worked(1); } //�ļ�β��Ϣ codeBuffer.append(getAtomicFlowEndString(modulesReslist,module).toString()); writeToFile(codeFileName, codeBuffer.toString(),charSet); // // mvc // String mvcFileName = path + "s_as_" + module.getElementName() + "flow.mvc"; // HashSet<String> mvcDepends = new HashSet<String>(); // // mvc ȡ�������� // List<MoudleDepend> mvcDps = ModuleGeneratorHelper.getAllDepends(module); // for (MoudleDepend md : mvcDps) { // mvcDepends.add("s_as_" + md.getName() + "func"); // } // mvcDepends.remove("s_as_" + module.getShortName() + "func"); // // StringBuffer mvc = new StringBuffer(); // MakeFileBuilder.writeASMvcMakeFile(module.getARESProject(), mvc, // cresMoudleExtendProperty.getDataBaseConn(), // "s_as_" + module.getShortName(), // "s_as_" + module.getShortName() + "flow", // "s_as_" + module.getShortName() + "func", // mvcDepends.toArray(new String[0])); // // writeToFile(mvcFileName, mvc.toString()); // err String errLogFileName = "s_as_" + module.getElementName() + "flow.errorlog"; createErrLog(msgQueue, errLogFileName,path,charSet); } /** * MySQLʱ��û��proc��ֱ������CPP * @param monitor * @param module * @param path */ private void createFlowCPPFile(IProgressMonitor monitor, IARESModule module, String path, boolean isWithPath,String charSet) throws Exception{ IARESResource[] moduleRes = module.getARESResources(IAtomResType.ATOM_SERVICE);//ԭ�ӷ��� List<IARESResource> modulesReslist = Arrays.asList(moduleRes); //���� Collections.sort(modulesReslist,new Comparator<IARESResource>() { @Override public int compare(IARESResource o1, IARESResource o2) { try { //��ʱ��ԴΪԭ�ӷ��� AtomService as1 = o1.getInfo(AtomService.class); AtomService as2 = o2.getInfo(AtomService.class); return Integer.valueOf(as1.getObjectId()) - Integer.valueOf(as2.getObjectId()); } catch (ARESModelException e) { e.printStackTrace(); return 0; } } }); //���ɴ���ʱ��������Ϣ�������Ϣ���� Queue<IARESProblem> msgQueue = new ArrayDeque<IARESProblem>(); //��Դ���ɴ��� String codeFileName = path + "s_as_" + module.getShortName() + "flow.cpp"; StringBuffer codeBuffer = new StringBuffer(); // д��ע��ͷ ModuleGeneratorHelper.writeCommentHeader(codeBuffer, ModuleGeneratorHelper.getCresProjectExtendProperty(module).getHeadFile(), codeFileName, module.getShortName(), new Date()); codeBuffer.append("\n"); //�ļ�ͷ��Ϣ codeBuffer.append(getTopString("as_",module).toString()); // �����޸ļ�¼ codeBuffer.append(RevisionHistoryGenUtil.getAllRevisionHistoryInfo(AtomModuelGeneratorHelper.getAtomModuleHistorys(module), "//")); //�ļ����� for (IARESResource iaresResource : modulesReslist) { if(monitor.isCanceled()){ return; } monitor.setTaskName("ԭ�ӷ���"+iaresResource.getFullyQualifiedName()); codeBuffer.append(genAtomServiceCode(iaresResource,msgQueue)); monitor.worked(1); } //�ļ�β��Ϣ codeBuffer.append(getAtomicFlowEndString(modulesReslist,module).toString()); writeToFile(codeFileName, codeBuffer.toString(),charSet); String errLogFileName = "s_as_" + module.getElementName() + "flow.errorlog"; createErrLog(msgQueue, errLogFileName,path,charSet); } private void createFlowGCCFile(IProgressMonitor monitor, IARESModule module, String path, boolean isWithPath,String charSet) throws Exception{ CresMoudleExtendProperty cresMoudleExtendProperty = ModuleGeneratorHelper.getCresMoudleExtendProperty(module); //==================== gcc String gccName = "s_as_" + module.getShortName() + "flow.gcc"; //���������ļ� createMakeOrderFile(gccName, path,isWithPath,charSet); String gccFileName = path + gccName; // GCC ֻȡ��һ������ HashSet<String> gccDepends = new HashSet<String>(); EList<MoudleDepend> depends = cresMoudleExtendProperty.getDepends(); for (MoudleDepend moudleDepend : depends) { gccDepends.add("s_as_" + moudleDepend.getName() + "flow"); } gccDepends.remove("s_as_" + module.getShortName() + "flow"); StringBuffer gcc = new StringBuffer(); MakeFileBuilder.writeASGccMakeFile(module.getARESProject(), gcc, cresMoudleExtendProperty.getDataBaseConn(), "s_as_" + module.getShortName(), "s_as_" + module.getShortName() + "flow", "s_as_" + module.getShortName() + "func", gccDepends.toArray(new String[0])); writeToFile(gccFileName,gcc.toString(),charSet); } private void createFlowGCCFile_MySQL(IProgressMonitor monitor, IARESModule module, String path, boolean isWithPath,String charSet) throws Exception{ CresMoudleExtendProperty cresMoudleExtendProperty = ModuleGeneratorHelper.getCresMoudleExtendProperty(module); //==================== gcc String gccName = "s_as_" + module.getShortName() + "flow.gcc"; //���������ļ� createMakeOrderFile(gccName, path,isWithPath,charSet); String gccFileName = path + gccName; // GCC ֻȡ��һ������ HashSet<String> gccDepends = new HashSet<String>(); EList<MoudleDepend> depends = cresMoudleExtendProperty.getDepends(); for (MoudleDepend moudleDepend : depends) { gccDepends.add("s_as_" + moudleDepend.getName() + "flow"); } gccDepends.remove("s_as_" + module.getShortName() + "flow"); StringBuffer gcc = new StringBuffer(); //MySQLʱ��ֻ��CPP�ļ������ݿ���Ϣ����Ҫ MakeFileBuilder.writeLSGccMakeFile_MySQL(module.getARESProject(), gcc, "s_as_" + module.getShortName(), "s_as_" + module.getShortName() + "flow", "s_as_" + module.getShortName() + "func", gccDepends.toArray(new String[0])); writeToFile(gccFileName,gcc.toString(),charSet); } /** * ԭ�ӷ���������ɺ���Ҫ��ӵĴ��� * @param ress * @return * @throws Exception */ private StringBuffer getAtomicFlowEndString(List<IARESResource> ress,IARESModule module) throws Exception{ StringBuffer endBuffer = new StringBuffer(); endBuffer.append("int FUNCTION_CALL_MODE GetBizFunctionsInfo(int Index, LPBIZ_FUNC_INFO ppv )\n"); endBuffer.append("{\n"); endBuffer.append("int iReturnCode = ASFC_EXISTS;\n"); endBuffer.append("switch (Index)\n"); endBuffer.append("{\n"); for (int index = 0; index < ress.size(); index++) { AtomService as = ress.get(index).getInfo(AtomService.class); endBuffer.append("case " + index + ":\n"); endBuffer.append("if (ppv!=NULL)\n"); endBuffer.append("{\n"); endBuffer.append("ppv->dwFunctionNo = " +as.getObjectId() + ";\n"); endBuffer.append("ppv->iVersion = " + new SimpleDateFormat("yyyyMMdd").format(new Date()) + ";\n"); endBuffer.append("ppv->ReqProc = F" + as.getObjectId() + ";\n"); endBuffer.append("ppv->AnsProc = NULL;\n"); endBuffer.append("ppv->Caption = \"" + as.getChineseName() + "\";\n"); endBuffer.append("}\n"); endBuffer.append("break;\n"); } endBuffer.append("default:iReturnCode = ASFC_NONE;\n"); endBuffer.append("}\n"); endBuffer.append("return iReturnCode;\n"); endBuffer.append("}\n"); endBuffer.append("char * ASFC_CALL_MODE GetLibVersion()\n"); endBuffer.append("{\n"); endBuffer.append("return \"" + AtomModuelGeneratorHelper.getAtomModuleLastVersion(module) + "\";\n"); endBuffer.append("}\n"); endBuffer.append("void FUNCTION_CALL_MODE OnLoad(char * arg)\n"); endBuffer.append("{\n"); endBuffer.append("}\n"); endBuffer.append("void FUNCTION_CALL_MODE OnUnload()\n"); endBuffer.append("{\n"); endBuffer.append("}\n"); endBuffer.append("void FUNCTION_CALL_MODE OnStart()\n"); endBuffer.append("{\n"); endBuffer.append("}\n"); endBuffer.append("void FUNCTION_CALL_MODE OnStop()\n"); endBuffer.append("{\n"); endBuffer.append("}\n"); return endBuffer; } /* �����ļ�ͷ��Ϣ */ private StringBuffer getTopString(String prefix_as,IARESModule module) { StringBuffer topStr = new StringBuffer(); topStr.append("#include \"s_" + prefix_as + module.getShortName() + "func.h\"\r\n"); //topStr.append("#define SQLCA_STORAGE_CLASS extern\r\n"); //topStr.append("#include <sqlca.h>\r\n"); //topStr.append("EXEC SQL CONTEXT USE DEFAULT;\r\n"); return topStr; } private StringBuffer genAtomFunctionCode(IARESResource as,Queue<IARESProblem> msgQueue) throws Exception{ StringBuffer ret = new StringBuffer(); Map<Object, Object> context = new HashMap<Object, Object>(); AtomFunction atomFunc = as.getInfo(AtomFunction.class); ///���ڶ������ŵ���� String objectId = atomFunc.getObjectId(); String databaseType = ProjectSettingUtil.getDatabaseType(as.getARESProject()); if(StringUtils.isNotBlank(objectId) && objectId.contains(",")){ String[] objIDs = objectId.split(","); for (String objID : objIDs) { atomFunc.setObjectId(objID.trim()); context.put(IAtomEngineContextConstant.ResourceModel, atomFunc); if(databaseType.equalsIgnoreCase(ProjectSettingUtil.MYSQL)){ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstantMySQL.SKELETONTYPE_ATOM_FUNCTION_MYSQL, as), context,msgQueue)); }else{ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstant.SKELETONTYPE_ATOM_FUNCTION, as), context,msgQueue)); } ret.append("\r\n"); } }else{ context.put(IAtomEngineContextConstant.ResourceModel, atomFunc); if(databaseType.equalsIgnoreCase(ProjectSettingUtil.MYSQL)){ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstantMySQL.SKELETONTYPE_ATOM_FUNCTION_MYSQL, as), context,msgQueue)); }else{ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstant.SKELETONTYPE_ATOM_FUNCTION, as), context,msgQueue)); } ret.append("\r\n"); } return CodeFormater.formatProc(ret); } private StringBuffer genAtomServiceCode(IARESResource as,Queue<IARESProblem> msgQueue) throws Exception{ StringBuffer ret = new StringBuffer(); Map<Object, Object> context = new HashMap<Object, Object>(); ///���Ϊ�������ţ��ԡ������ָ����Ҫ���ɶ�� AtomService atomService = as.getInfo(AtomService.class); String databaseType = ProjectSettingUtil.getDatabaseType(as.getARESProject()); String objectID = atomService.getObjectId(); if(StringUtils.isBlank(objectID)) { String message = String.format("ԭ�ӷ���[(%s)%s]�����Ϊ�ա�", atomService.getName(),atomService.getChineseName()); IARESProblem problem = ARESProblem.createError(); problem.setMessage(message); msgQueue.add(problem); }else { if(objectID.contains(",")){ String[] objIDs = objectID.split(","); for (String objID : objIDs) { atomService.setObjectId(objID.trim()); context.put(IAtomEngineContextConstant.ResourceModel, atomService); if(databaseType.equalsIgnoreCase(ProjectSettingUtil.MYSQL)){ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstantMySQL.SKELETONTYPE_ATOM_SERVICE_MYSQL, as), context,msgQueue)); }else{ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstant.SKELETONTYPE_ATOM_SERVICE, as), context,msgQueue)); } ret.append("\r\n"); } }else{ context.put(IAtomEngineContextConstant.ResourceModel, atomService); if(databaseType.equalsIgnoreCase(ProjectSettingUtil.MYSQL)){ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstantMySQL.SKELETONTYPE_ATOM_SERVICE_MYSQL, as), context,msgQueue)); }else{ ret.append(ResourceEngin.instance.generate( new DefaultSkeletonInput( IAtomSkeletonFactoryConstant.SKELETONTYPE_ATOM_SERVICE, as), context,msgQueue)); } ret.append("\r\n"); } } return CodeFormater.formatProc(ret); } @Override public boolean canGenCode(IARESModule module) { String rootName = module.getParent().getElementName(); if(StringUtils.equals(rootName, ICresUIConstant.ATOM_ROOT_NAME)){ return true; } return false; } }