// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.mdm.repository.ui.wizards.process; import java.util.ArrayList; import java.util.List; import org.talend.mdm.repository.model.mdmserverobject.MdmserverobjectFactory; import org.talend.mdm.repository.model.mdmserverobject.WSTransformerProcessStepE; import org.talend.mdm.repository.model.mdmserverobject.WSTransformerVariablesMappingE; import com.amalto.workbench.utils.Util; /** * DOC hbhong class global comment. Detailled comment */ public class ProcessStepFactory { private static final String VAR_LAW_TEXT = "law_text"; //$NON-NLS-1$ private static final String VAR_DECODE_XML = "decode_xml"; //$NON-NLS-1$ private static final String VAR_CODEC_TEXT = "codec_text"; //$NON-NLS-1$ public static final String VAR_OUTPUT_URL = "output_url"; //$NON-NLS-1$ public static final String VAR_OUTPUT = "output"; //$NON-NLS-1$ public static final String VAR_OUTPUT_REPORT = "output_report"; //$NON-NLS-1$ private static final String VAR_ITEM_XML = "item_xml"; //$NON-NLS-1$ private static final String VAR_XML = "xml"; //$NON-NLS-1$ public static final String VAR_DEFAULT = "_DEFAULT_"; //$NON-NLS-1$ private static final String VAR_TEXT = "text"; //$NON-NLS-1$ private static final String VAR_RESULT = "result"; //$NON-NLS-1$ private static final String CODEC_PLUGIN = "amalto/local/transformer/plugin/codec"; //$NON-NLS-1$ private static final String XSLT_PLUGIN = "amalto/local/transformer/plugin/xslt";//$NON-NLS-1$ private static final String CALLJOB_PLUGIN = "amalto/local/transformer/plugin/callJob";//$NON-NLS-1$ // step public static final int STEP_UPDATE_REPORT = 1; public static final int STEP_ESCAPE = 2; public static final int STEP_REDIRECT = 3; public static final int STEP_RETURN_MESSAGE = 4; public static WSTransformerProcessStepE createProcessStep(int type, Object param, String processName, boolean createJob) { boolean isEnterprise = Util.IsEnterPrise(); switch (type) { case STEP_UPDATE_REPORT: return createUpdateReportStep(param); case STEP_ESCAPE: return createEscapeStep(param); case STEP_REDIRECT: if (isEnterprise && createJob) { if (param == null || param.toString().length() == 0) { return createCallJobStep(processName, VAR_OUTPUT, VAR_DECODE_XML); // Runnable } else { return createCallJobStep(processName, VAR_OUTPUT_URL, VAR_DECODE_XML); // Runnable } } else { if (param == null || param.toString().length() == 0) { return createRedirectStep("", VAR_OUTPUT); //$NON-NLS-1$ } else { return createRedirectStep(param, VAR_OUTPUT_URL); } } case STEP_RETURN_MESSAGE: if (isEnterprise && createJob) { return createCallJobStep(processName, VAR_OUTPUT_REPORT, VAR_DEFAULT); // Before } else { return createReturnMessageStep(param); } } return null; } public static WSTransformerProcessStepE createSmartViewStep() { final String parameters = "<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>\n"//$NON-NLS-1$ + " <xsl:output method='html' indent='yes' omit-xml-declaration='yes'/>\n"//$NON-NLS-1$ + " <xsl:template match='/'>\n" + " <html>\n"//$NON-NLS-1$//$NON-NLS-2$ + " <head><title>Smart View</title></head>\n" + " <body>\n"//$NON-NLS-1$//$NON-NLS-2$ + " <h1>This is the default Smart View for: <xsl:value-of select='./text()'/></h1>\n"//$NON-NLS-1$ + " <xsl:copy-of select='.'/>\n" + " <!-- Customize the stylesheet -->\n"//$NON-NLS-1$//$NON-NLS-2$ + " </body>\n" + " </html>\n" + " </xsl:template>" + "</xsl:stylesheet>";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$ List<WSTransformerVariablesMappingE> inItems; List<WSTransformerVariablesMappingE> outItems; WSTransformerProcessStepE step = MdmserverobjectFactory.eINSTANCE.createWSTransformerProcessStepE(); inItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE inputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); inputLine.setPipelineVariable(VAR_DEFAULT); inputLine.setPluginVariable(VAR_XML); inItems.add(inputLine); outItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE outputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); outputLine.setPipelineVariable("html");//$NON-NLS-1$ outputLine.setPluginVariable(VAR_TEXT); outItems.add(outputLine); step.setPluginJNDI(XSLT_PLUGIN); step.setDescription("Stylesheet"); //$NON-NLS-1$ step.setParameters(parameters); step.getInputMappings().addAll(inItems); step.getOutputMappings().addAll(outItems); step.setDisabled(false); return step; } public static WSTransformerProcessStepE createRedirectStep(Object param, String outputPipleVariable) { if (param == null || !(param instanceof String)) { throw new IllegalArgumentException(); } String prefixParam = "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:mdm=\"java:com.amalto.core.plugin.base.xslt.MdmExtension\" version=\"1.0\">\n" //$NON-NLS-1$ + "<xsl:output method=\"xml\" indent=\"yes\" omit-xml-declaration=\"yes\"/>\n" //$NON-NLS-1$ + "<xsl:template match=\"/\" priority=\"1\">\n" + "<results>\n<item>\n<attr>"; //$NON-NLS-1$//$NON-NLS-2$ String suffixParam = "</attr>\n</item>\n</results>\n</xsl:template>\n</xsl:stylesheet>"; //$NON-NLS-1$ List<WSTransformerVariablesMappingE> inItems; List<WSTransformerVariablesMappingE> outItems; WSTransformerProcessStepE step = MdmserverobjectFactory.eINSTANCE.createWSTransformerProcessStepE(); inItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE inputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); inputLine.setPipelineVariable(VAR_DEFAULT); inputLine.setPluginVariable(VAR_XML); inItems.add(inputLine); outItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE outputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); outputLine.setPipelineVariable(outputPipleVariable); outputLine.setPluginVariable(VAR_TEXT); outItems.add(outputLine); step.setPluginJNDI(XSLT_PLUGIN); step.setDescription("Redirect"); //$NON-NLS-1$ step.setParameters(prefixParam + param + suffixParam); step.getInputMappings().addAll(inItems); step.getOutputMappings().addAll(outItems); step.setDisabled(false); return step; } private static WSTransformerProcessStepE createEscapeStep(Object param) { // Generate the XSLT step to retrieve the item from an update report // step WSTransformerProcessStepE step = MdmserverobjectFactory.eINSTANCE.createWSTransformerProcessStepE(); List<WSTransformerVariablesMappingE> inItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE inputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); inputLine.setPipelineVariable(VAR_ITEM_XML); inputLine.setPluginVariable(VAR_LAW_TEXT); inItems.add(inputLine); List<WSTransformerVariablesMappingE> outItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE outputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); outputLine.setPipelineVariable(VAR_DECODE_XML); outputLine.setPluginVariable(VAR_CODEC_TEXT); outItems.add(outputLine); step.setPluginJNDI(CODEC_PLUGIN); step.setDescription("Escape the item XML"); //$NON-NLS-1$ String parameter = "<parameters>\n" + "<method>DECODE</method>\n" + "<algorithm>XMLESCAPE</algorithm>\n"//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "</parameters>\n";//$NON-NLS-1$ step.setParameters(parameter); step.getInputMappings().addAll(inItems); step.getOutputMappings().addAll(outItems); step.setDisabled(false); return step; } private static WSTransformerProcessStepE createUpdateReportStep(Object param) { String itemstr = "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:mdm=\"java:com.amalto.core.plugin.base.xslt.MdmExtension\" version=\"1.0\"> <xsl:output method=\"xml\" indent=\"yes\" omit-xml-declaration=\"yes\" /> <xsl:template match=\"/\" priority=\"1\">\n" //$NON-NLS-1$ + "<exchange> <report>\n <xsl:copy-of select=\"Update\"/> </report> <item><xsl:copy-of select='mdm:getItemProjection(Update/RevisionID,Update/DataCluster,Update/Concept,Update/Key)'/></item></exchange> "//$NON-NLS-1$ + "</xsl:template> </xsl:stylesheet>\n";//$NON-NLS-1$ List<WSTransformerVariablesMappingE> inItems; List<WSTransformerVariablesMappingE> outItems; WSTransformerProcessStepE step = MdmserverobjectFactory.eINSTANCE.createWSTransformerProcessStepE(); inItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE inputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); inputLine.setPipelineVariable(VAR_DEFAULT); inputLine.setPluginVariable(VAR_XML); inItems.add(inputLine); outItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE outputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); outputLine.setPipelineVariable(VAR_ITEM_XML); outputLine.setPluginVariable(VAR_TEXT); outItems.add(outputLine); step.setPluginJNDI(XSLT_PLUGIN); step.setDescription("UpdateReport"); //$NON-NLS-1$ step.setParameters(itemstr); step.getInputMappings().addAll(inItems); step.getOutputMappings().addAll(outItems); step.setDisabled(false); return step; } private static WSTransformerProcessStepE createReturnMessageStep(Object param) { if (param == null || !(param instanceof String[]) || ((String[]) param).length != 2) { throw new IllegalArgumentException(); } String type = ((String[]) param)[0]; String mulMessage = ((String[]) param)[1]; String prefixParam = "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:mdm=\"java:com.amalto.core.plugin.base.xslt.MdmExtension\" version=\"1.0\">\n" //$NON-NLS-1$ + "<xsl:output method=\"xml\" indent=\"yes\" omit-xml-declaration=\"yes\"/>\n" //$NON-NLS-1$ + "<xsl:template match=\"/\" priority=\"1\">\n" + "<report>\n <message type=\"" + type + "\">"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ String suffixParam = "</message>\n</report>\n</xsl:template>\n</xsl:stylesheet>"; //$NON-NLS-1$ List<WSTransformerVariablesMappingE> inItems; List<WSTransformerVariablesMappingE> outItems; WSTransformerProcessStepE step = MdmserverobjectFactory.eINSTANCE.createWSTransformerProcessStepE(); inItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE inputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); inputLine.setPipelineVariable(VAR_DEFAULT); inputLine.setPluginVariable(VAR_XML); inItems.add(inputLine); outItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE outputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); outputLine.setPipelineVariable(VAR_OUTPUT_REPORT); outputLine.setPluginVariable(VAR_TEXT); outItems.add(outputLine); step.setPluginJNDI(XSLT_PLUGIN); step.setDescription("Retrieve Message"); //$NON-NLS-1$ step.setParameters(prefixParam + mulMessage + suffixParam); step.getInputMappings().addAll(inItems); step.getOutputMappings().addAll(outItems); step.setDisabled(false); return step; } public static WSTransformerProcessStepE createCallJobStep(String jobName, String outputPipelineVariable, String pipleName) { String parameters = "<configuration><url>ltj://" + jobName + "/0.1</url>" + //$NON-NLS-1$ //$NON-NLS-2$ "<contextParam><name>xmlInput</name><value>{" + pipleName + "}</value></contextParam></configuration>"; //$NON-NLS-1$ //$NON-NLS-2$ List<WSTransformerVariablesMappingE> inItems; List<WSTransformerVariablesMappingE> outItems; WSTransformerProcessStepE step = MdmserverobjectFactory.eINSTANCE.createWSTransformerProcessStepE(); inItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE inputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); inputLine.setPipelineVariable(pipleName); inputLine.setPluginVariable(VAR_TEXT); inItems.add(inputLine); outItems = new ArrayList<WSTransformerVariablesMappingE>(); WSTransformerVariablesMappingE outputLine = MdmserverobjectFactory.eINSTANCE.createWSTransformerVariablesMappingE(); outputLine.setPipelineVariable(outputPipelineVariable); outputLine.setPluginVariable(VAR_RESULT); outItems.add(outputLine); step.setPluginJNDI(CALLJOB_PLUGIN); step.setDescription("Call Job"); //$NON-NLS-1$ step.setParameters(parameters); step.getInputMappings().addAll(inItems); step.getOutputMappings().addAll(outItems); step.setDisabled(false); return step; } }