public static List<String> getRequiredPigudfName(IProcess process) { Set<String> neededRoutines = process.getNeededPigudf(); if (neededRoutines != null) { return new ArrayList<String>(neededRoutines); } else { return Collections.EMPTY_LIST; } }
public String generate(Object argument) { final StringBuffer stringBuffer = new StringBuffer(); CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument; Vector v = (Vector) codeGenArgument.getArgument(); IProcess process = (IProcess) v.get(0); String version = (String) v.get(1); String exportAsOSGI = (String) v.get(2); List<? extends INode> processNodes = (List<? extends INode>) process.getGeneratingNodes(); boolean stats = codeGenArgument.isStatistics(); boolean trace = codeGenArgument.isTrace(); boolean isRunInMultiThread = codeGenArgument.getIsRunInMultiThread(); List<IContextParameter> params = new ArrayList<IContextParameter>(); params = process.getContextManager().getDefaultContext().getContextParameterList(); IBrandingService service = (IBrandingService) GlobalServiceRegister.getDefault().getService(IBrandingService.class); if (service instanceof AbstractBrandingService) { stringBuffer.append(TEXT_1); stringBuffer.append(((AbstractBrandingService) service).getJobLicenseHeader(version)); } String jobFolderName = JavaResourcesHelper.getJobFolderName(process.getName(), process.getVersion()); String packageName = codeGenArgument.getCurrentProjectName().toLowerCase() + "." + jobFolderName; stringBuffer.append(TEXT_2); stringBuffer.append(packageName); stringBuffer.append(TEXT_3); for (String routine : CodeGeneratorRoutine.getRequiredRoutineName(process)) { if (!routine.equals(ITalendSynchronizer.TEMPLATE)) { stringBuffer.append(TEXT_4); stringBuffer.append(routine); stringBuffer.append(TEXT_5); } } stringBuffer.append(TEXT_6); stringBuffer.append(TEXT_7); stringBuffer.append(ElementParameterParser.getValue(process, "__HEADER_IMPORT__")); stringBuffer.append(TEXT_8); stringBuffer.append(ElementParameterParser.getValue(process, "__FOOTER_IMPORT__")); stringBuffer.append(TEXT_9); List<INode> nodesWithImport = process.getNodesWithImport(); if (nodesWithImport != null) { for (INode node : nodesWithImport) { stringBuffer.append(TEXT_10); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_11); stringBuffer.append(ElementParameterParser.getValue(node, "__IMPORT__")); stringBuffer.append(TEXT_12); } } stringBuffer.append(TEXT_13); stringBuffer.append(process.getName()); stringBuffer.append(TEXT_14); stringBuffer.append(ElementParameterParser.getValue(process, "__PURPOSE__")); stringBuffer.append(TEXT_15); stringBuffer.append(ElementParameterParser.getValue(process, "__DESCRIPTION__")); stringBuffer.append(TEXT_16); stringBuffer.append(ElementParameterParser.getValue(process, "__AUTHOR__")); stringBuffer.append(TEXT_17); stringBuffer.append(version); stringBuffer.append(TEXT_18); stringBuffer.append(ElementParameterParser.getValue(process, "__STATUS__")); stringBuffer.append(TEXT_19); String talendJobInterfaces = "TalendJob"; boolean talendMdmJob = !process.getNodesOfType("tMDMTriggerInput").isEmpty() || !process.getNodesOfType("tMDMTriggerOutput").isEmpty(); boolean talendEsbJob = !process.getNodesOfType("tESBProviderRequest").isEmpty() || !process.getNodesOfType("tESBConsumer").isEmpty(); boolean talendEsbJobFactory = !process.getNodesOfType("tESBProviderRequest").isEmpty(); if (talendMdmJob) { talendJobInterfaces += ", TalendMDMJob"; // Talend MDM job } if (talendEsbJob) { talendJobInterfaces += ", TalendESBJob"; // Talend ESB job } if (talendEsbJobFactory) { talendJobInterfaces += ", TalendESBJobFactory"; // Talend ESB provider job } stringBuffer.append(TEXT_20); stringBuffer.append(process.getName()); stringBuffer.append(TEXT_21); stringBuffer.append(talendJobInterfaces); stringBuffer.append(TEXT_22); if (talendEsbJobFactory) { stringBuffer.append(TEXT_23); stringBuffer.append(process.getName()); stringBuffer.append(TEXT_24); stringBuffer.append(process.getName()); stringBuffer.append(TEXT_25); } stringBuffer.append(TEXT_26); if (isRunInMultiThread) { stringBuffer.append(TEXT_27); } stringBuffer.append(TEXT_28); // it will be use in job setting. stringBuffer.append(TEXT_29); // uft-8 is for temp file, for example: tSortRow, tMap. Because they need keep reversibility. stringBuffer.append(TEXT_30); for (IContextParameter ctxParam : params) { String cParaName = ctxParam.getName(); stringBuffer.append(TEXT_31); stringBuffer.append(cParaName); stringBuffer.append(TEXT_32); if (ctxParam.getType().equals("id_Date")) { stringBuffer.append(TEXT_33); stringBuffer.append(cParaName); stringBuffer.append(TEXT_34); stringBuffer.append(cParaName); stringBuffer.append(TEXT_35); stringBuffer.append(ctxParam.getValue()); stringBuffer.append(TEXT_36); stringBuffer.append(cParaName); stringBuffer.append(TEXT_37); stringBuffer.append(cParaName); stringBuffer.append(TEXT_38); stringBuffer.append(cParaName); stringBuffer.append(TEXT_39); stringBuffer.append(cParaName); stringBuffer.append(TEXT_40); stringBuffer.append(cParaName); stringBuffer.append(TEXT_41); stringBuffer.append(cParaName); stringBuffer.append(TEXT_42); stringBuffer.append(cParaName); stringBuffer.append(TEXT_43); stringBuffer.append(cParaName); stringBuffer.append(TEXT_44); stringBuffer.append(cParaName); stringBuffer.append(TEXT_45); stringBuffer.append(cParaName); stringBuffer.append(TEXT_46); stringBuffer.append(cParaName); stringBuffer.append(TEXT_47); stringBuffer.append(cParaName); stringBuffer.append(TEXT_48); } else { stringBuffer.append(TEXT_49); stringBuffer.append(cParaName); stringBuffer.append(TEXT_50); stringBuffer.append(cParaName); stringBuffer.append(TEXT_51); } stringBuffer.append(TEXT_52); } stringBuffer.append(TEXT_53); for (IContextParameter ctxParam : params) { if (ctxParam.getType().equals("id_List Of Value") || ctxParam.getType().equals("id_File") || ctxParam.getType().equals("id_Directory")) { stringBuffer.append(TEXT_54); stringBuffer.append(ctxParam.getName()); stringBuffer.append(TEXT_55); stringBuffer.append( Character.toUpperCase(ctxParam.getName().charAt(0)) + ctxParam.getName().substring(1)); stringBuffer.append(TEXT_56); stringBuffer.append(ctxParam.getName()); stringBuffer.append(TEXT_57); } else { stringBuffer.append(TEXT_58); stringBuffer.append(JavaTypesManager.getTypeToGenerate(ctxParam.getType(), true)); stringBuffer.append(TEXT_59); stringBuffer.append(ctxParam.getName()); stringBuffer.append(TEXT_60); stringBuffer.append(JavaTypesManager.getTypeToGenerate(ctxParam.getType(), true)); stringBuffer.append(TEXT_61); stringBuffer.append( Character.toUpperCase(ctxParam.getName().charAt(0)) + ctxParam.getName().substring(1)); stringBuffer.append(TEXT_62); stringBuffer.append(ctxParam.getName()); stringBuffer.append(TEXT_63); } } stringBuffer.append(TEXT_64); stringBuffer.append(process.getVersion()); stringBuffer.append(TEXT_65); stringBuffer.append(codeGenArgument.getJobName()); stringBuffer.append(TEXT_66); stringBuffer.append(codeGenArgument.getCurrentProjectName()); stringBuffer.append(TEXT_67); if (!isRunInMultiThread) { stringBuffer.append(TEXT_68); } else { stringBuffer.append(TEXT_69); } stringBuffer.append(TEXT_70); if (stats) { stringBuffer.append(TEXT_71); } if (trace) { stringBuffer.append(TEXT_72); } stringBuffer.append(TEXT_73); stringBuffer.append(exportAsOSGI); stringBuffer.append(TEXT_74); for (INode logCatcher : process.getNodesOfType("tLogCatcher")) { stringBuffer.append(TEXT_75); stringBuffer.append(logCatcher.getUniqueName()); stringBuffer.append(TEXT_76); } for (INode statCatcher : process.getNodesOfType("tStatCatcher")) { stringBuffer.append(TEXT_77); stringBuffer.append(statCatcher.getUniqueName()); stringBuffer.append(TEXT_78); stringBuffer.append(process.getId()); stringBuffer.append(TEXT_79); stringBuffer.append(process.getVersion()); stringBuffer.append(TEXT_80); } for (INode metterCatcher : process.getNodesOfType("tFlowMeterCatcher")) { stringBuffer.append(TEXT_81); stringBuffer.append(metterCatcher.getUniqueName()); stringBuffer.append(TEXT_82); stringBuffer.append(process.getId()); stringBuffer.append(TEXT_83); stringBuffer.append(process.getVersion()); stringBuffer.append(TEXT_84); } for (INode assertCatcher : process.getNodesOfType("tAssertCatcher")) { stringBuffer.append(TEXT_85); stringBuffer.append(assertCatcher.getUniqueName()); stringBuffer.append(TEXT_86); } stringBuffer.append(TEXT_87); stringBuffer.append(process.getName()); stringBuffer.append(TEXT_88); stringBuffer.append(process.getName()); stringBuffer.append(TEXT_89); if (process.getNodesOfType("tLogCatcher").size() > 0) { List<INode> logCatchers = (List<INode>) process.getNodesOfType("tLogCatcher"); for (INode logCatcher : logCatchers) { if (ElementParameterParser.getValue(logCatcher, "__CATCH_JAVA_EXCEPTION__") .equals("true")) { // 1) add the message to the stack stringBuffer.append(TEXT_90); stringBuffer.append(logCatcher.getUniqueName()); stringBuffer.append(TEXT_91); } } INode virtualNCatchNode = null; boolean hasRealCatchNode = false; for (INode logCatcher : logCatchers) { if (ElementParameterParser.getValue(logCatcher, "__CATCH_JAVA_EXCEPTION__") .equals("true")) { if (logCatcher.isVirtualGenerateNode()) { virtualNCatchNode = logCatcher; } else { hasRealCatchNode = true; } } } if (hasRealCatchNode && virtualNCatchNode != null) { stringBuffer.append(TEXT_92); } for (INode logCatcher : logCatchers) { if (ElementParameterParser.getValue(logCatcher, "__CATCH_JAVA_EXCEPTION__") .equals("true")) { if (logCatcher != virtualNCatchNode) { // 2) launch logCatcher subProcess stringBuffer.append(TEXT_93); stringBuffer.append(logCatcher.getDesignSubjobStartNode().getUniqueName()); stringBuffer.append(TEXT_94); } } } if (hasRealCatchNode && virtualNCatchNode != null) { stringBuffer.append(TEXT_95); } if (virtualNCatchNode != null) { stringBuffer.append(TEXT_96); stringBuffer.append(virtualNCatchNode.getDesignSubjobStartNode().getUniqueName()); stringBuffer.append(TEXT_97); } if (hasRealCatchNode && virtualNCatchNode != null) { stringBuffer.append(TEXT_98); } } stringBuffer.append(TEXT_99); boolean needCatchTalendException = false; if (process.getNodesOfType("tLogCatcher").size() > 0) { for (INode node : process.getNodesOfType("tLogCatcher")) { if (ElementParameterParser.getValue(node, "__CATCH_JAVA_EXCEPTION__").equals("true")) { needCatchTalendException = true; break; } } } if ((!needCatchTalendException) && (process.getNodesOfType("tAssertCatcher").size() > 0)) { for (INode node : process.getNodesOfType("tAssertCatcher")) { if (ElementParameterParser.getValue(node, "__CATCH_JAVA_EXCEPTION__").equals("true")) { needCatchTalendException = true; break; } } } if (needCatchTalendException) { if (process.getNodesOfType("tLogCatcher").size() > 0) { stringBuffer.append(TEXT_100); } } stringBuffer.append(TEXT_101); if (isRunInMultiThread) { stringBuffer.append(TEXT_102); } else { stringBuffer.append(TEXT_103); } stringBuffer.append(TEXT_104); // Methods for RUN IF Error links for (INode node : processNodes) { if (node.isActivate()) { stringBuffer.append(TEXT_105); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_106); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_107); boolean ifBeforRunError = NodeUtil.checkComponentErrorConnectionAfterNode(node); if (!ifBeforRunError) { if (process.getNodesOfType("tAssertCatcher").size() > 0) { List<INode> assertCatchers = (List<INode>) process.getNodesOfType("tAssertCatcher"); for (INode assertCatcher : assertCatchers) { if (ElementParameterParser.getValue(assertCatcher, "__CATCH_JAVA_EXCEPTION__") .equals("true")) { // 1) add the message to the stack stringBuffer.append(TEXT_108); stringBuffer.append(assertCatcher.getUniqueName()); stringBuffer.append(TEXT_109); stringBuffer.append(assertCatcher.getDesignSubjobStartNode().getUniqueName()); stringBuffer.append(TEXT_110); } } } } if (!node.getComponent().getName().equals("tDie")) { String statCatcher = ElementParameterParser.getValue(node, "__TSTATCATCHER_STATS__"); if (statCatcher.compareTo("true") == 0) { for (INode statCatcherNode : node.getProcess().getNodesOfType("tStatCatcher")) { stringBuffer.append(TEXT_111); stringBuffer.append(statCatcherNode.getUniqueName()); stringBuffer.append(TEXT_112); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_113); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_114); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_115); stringBuffer.append(statCatcherNode.getDesignSubjobStartNode().getUniqueName()); stringBuffer.append(TEXT_116); } } } boolean isExistOnCompErrorLink = false; List<? extends IConnection> conns = node.getOutgoingConnections(); for (IConnection conn : conns) { if (conn.getLineStyle().equals(EConnectionType.ON_COMPONENT_ERROR)) { isExistOnCompErrorLink = true; stringBuffer.append(TEXT_117); if (stats) { stringBuffer.append(TEXT_118); stringBuffer.append(conn.getUniqueName()); stringBuffer.append(TEXT_119); } stringBuffer.append(TEXT_120); if (isRunInMultiThread) { stringBuffer.append(TEXT_121); stringBuffer.append(conn.getTarget().getUniqueName()); stringBuffer.append(TEXT_122); } else { stringBuffer.append(TEXT_123); stringBuffer.append(conn.getTarget().getUniqueName()); stringBuffer.append(TEXT_124); } stringBuffer.append(TEXT_125); } } boolean isSubjobHasOnSubJobError = false; if (!isExistOnCompErrorLink) { INode subJobStartNode = node.getDesignSubjobStartNode(); if (subJobStartNode != null) { List<? extends IConnection> tempConns = subJobStartNode.getOutgoingConnections(); for (IConnection conn : tempConns) { if (conn.getLineStyle().equals(EConnectionType.ON_SUBJOB_ERROR)) { isSubjobHasOnSubJobError = true; break; } } } } if (!isSubjobHasOnSubJobError && !isExistOnCompErrorLink) { // when there is no subjoberror and no onComponentError if (isRunInMultiThread) { stringBuffer.append(TEXT_126); } else { stringBuffer.append(TEXT_127); } } // when use parallelize will add virtual components(tAsyncIn and tAsyncOut) but in graphical // these is visable=false if ("true".equals(ElementParameterParser.getValue(node, "__PARALLELIZE__"))) { for (INode gNode : node.getProcess().getGeneratingNodes()) { if (gNode.getUniqueName().equals(node.getUniqueName())) { if (gNode.getIncomingConnections(EConnectionType.FLOW_MAIN).size() != 0) { INode gSourceNode = gNode.getIncomingConnections(EConnectionType.FLOW_MAIN).get(0).getSource(); node = gSourceNode; } } } } // end stringBuffer.append(TEXT_128); stringBuffer.append(node.getDesignSubjobStartNode().getUniqueName()); stringBuffer.append(TEXT_129); } } for (INode node : processNodes) { if (node.isDesignSubjobStartNode()) { stringBuffer.append(TEXT_130); stringBuffer.append(node.getUniqueName()); stringBuffer.append(TEXT_131); List<? extends IConnection> conns = node.getOutgoingConnections(); int count = 0; for (IConnection conn : conns) { if (conn.getLineStyle().equals(EConnectionType.ON_SUBJOB_ERROR)) { count++; } } String label = "ERROR"; if (count == 0) { // FATAL label = "FATAL"; } else { // ERROR------>RunSubJobError label = "ERROR"; } stringBuffer.append(TEXT_132); stringBuffer.append(label); stringBuffer.append(TEXT_133); for (IConnection conn : conns) { if (conn.getLineStyle().equals(EConnectionType.ON_SUBJOB_ERROR)) { stringBuffer.append(TEXT_134); if (stats) { stringBuffer.append(TEXT_135); stringBuffer.append(conn.getUniqueName()); stringBuffer.append(TEXT_136); } if (isRunInMultiThread) { stringBuffer.append(TEXT_137); stringBuffer.append(conn.getTarget().getUniqueName()); stringBuffer.append(TEXT_138); } else { stringBuffer.append(TEXT_139); stringBuffer.append(conn.getTarget().getUniqueName()); stringBuffer.append(TEXT_140); } stringBuffer.append(TEXT_141); } } stringBuffer.append(TEXT_142); } } stringBuffer.append(TEXT_143); return stringBuffer.toString(); }
@SuppressWarnings("unchecked") public static List<String> getRequiredRoutineName(IProcess process) { Set<String> neededRoutines = process.getNeededRoutines(); ECodeLanguage currentLanguage = LanguageManager.getCurrentLanguage(); String perlConn = "::"; // $NON-NLS-1$ String builtInPath = ILibrariesService.SOURCE_PERL_ROUTINES_FOLDER + perlConn + "system" + perlConn; //$NON-NLS-1$ if (neededRoutines == null || neededRoutines.isEmpty()) { try { IProxyRepositoryFactory factory = CorePlugin.getDefault().getProxyRepositoryFactory(); List<IRepositoryViewObject> routines = factory.getAll( ProjectManager.getInstance().getCurrentProject(), ERepositoryObjectType.ROUTINES); for (Project project : ProjectManager.getInstance().getAllReferencedProjects()) { List<IRepositoryViewObject> routinesFromRef = factory.getAll(project, ERepositoryObjectType.ROUTINES); for (IRepositoryViewObject routine : routinesFromRef) { if (!((RoutineItem) routine.getProperty().getItem()).isBuiltIn()) { routines.add(routine); } } } neededRoutines = new HashSet<String>(); for (IRepositoryViewObject object : routines) { neededRoutines.add(object.getLabel()); } } catch (PersistenceException e) { ExceptionHandler.process(e); } } if (currentLanguage == ECodeLanguage.PERL) { List<IRepositoryViewObject> routines; try { IProxyRepositoryFactory factory = CorePlugin.getDefault().getProxyRepositoryFactory(); routines = factory.getAll(ERepositoryObjectType.ROUTINES); for (Project project : ProjectManager.getInstance().getAllReferencedProjects()) { List<IRepositoryViewObject> routinesFromRef = factory.getAll(project, ERepositoryObjectType.ROUTINES); for (IRepositoryViewObject routine : routinesFromRef) { if (!((RoutineItem) routine.getProperty().getItem()).isBuiltIn()) { routines.add(routine); } } } Set<String> newNeededRoutines = new HashSet<String>(); for (IRepositoryViewObject object : routines) { if (neededRoutines.contains(object.getLabel())) { neededRoutines.remove(object.getLabel()); if (((RoutineItem) object.getProperty().getItem()).isBuiltIn()) { newNeededRoutines.add(builtInPath + object.getLabel()); } else { String userPath = ILibrariesService.SOURCE_PERL_ROUTINES_FOLDER + perlConn + ProjectManager.getInstance() .getProject(object.getProperty().getItem()) .getTechnicalLabel() + perlConn; newNeededRoutines.add(userPath + object.getLabel()); } } } neededRoutines = newNeededRoutines; } catch (PersistenceException e) { ExceptionHandler.process(e); } } return new ArrayList<String>(neededRoutines); }