// ============================================================================ // // 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.actions.job; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.ui.IEditorPart; import org.talend.commons.ui.runtime.image.ECoreImage; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.core.GlobalServiceRegister; import org.talend.core.model.properties.ItemState; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.mdm.repository.core.AbstractRepositoryAction; import org.talend.mdm.repository.core.IServerObjectRepositoryType; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmproperties.MdmpropertiesFactory; import org.talend.mdm.repository.model.mdmproperties.WSRoutingRuleItem; import org.talend.mdm.repository.model.mdmserverobject.MdmserverobjectFactory; import org.talend.mdm.repository.model.mdmserverobject.WSRoutingRuleE; import org.talend.mdm.repository.model.mdmserverobject.WSRoutingRuleExpressionE; import org.talend.mdm.repository.model.mdmserverobject.WSRoutingRuleOperatorE; import org.talend.mdm.repository.ui.dialogs.job.JobOptionsDialog; import org.talend.mdm.repository.ui.dialogs.job.JobOptionsDialog.Execution; import org.talend.mdm.repository.ui.dialogs.job.JobOptionsDialog.Parameter; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.mdm.repository.utils.UIUtil; import com.amalto.workbench.service.IValidateService; /** * DOC jsxie class global comment. Detailled comment */ public class GenerateJobTriggerAction extends AbstractRepositoryAction { private static final String PREFIX = "CallJob_"; //$NON-NLS-1$ protected Object selectObj; static Logger log = Logger.getLogger(GenerateJobTriggerAction.class); public GenerateJobTriggerAction() { super(Messages.GenerateJobXX_GenTJobTrigger); setImageDescriptor(ImageProvider.getImageDesc(ECoreImage.PROCESS_ICON)); } /* * (non-Javadoc) * * @see org.talend.mdm.repository.core.AbstractRepositoryAction#getGroupName() */ @Override public String getGroupName() { return GROUP_EDIT; } @Override protected void doRun() { selectObj = getSelectedObject().get(0); JobOptionsDialog dialog = new JobOptionsDialog(getShell(), Messages.JobProcesssDialogTiggerTitle_title, Execution.EMBEDDED); dialog.setBlockOnOpen(true); int ret = dialog.open(); if (ret == Dialog.CANCEL) { return; } String jobName = ""; //$NON-NLS-1$ String jobVersion = ""; //$NON-NLS-1$ if (selectObj instanceof IRepositoryViewObject) { jobName = ((IRepositoryViewObject) selectObj).getProperty().getLabel(); jobVersion = ((IRepositoryViewObject) selectObj).getProperty().getVersion(); } // check exist IValidateService validateService = (IValidateService) GlobalServiceRegister.getDefault().getService( IValidateService.class); if (validateService != null) { boolean result = validateService.validateAndAlertObjectExistence(IServerObjectRepositoryType.TYPE_ROUTINGRULE, getNewTriggerName(jobName), null); if (!result) { return; } } // WSRoutingRuleE routingRule = createTrigger(jobName, jobVersion, dialog); // if the new objectect is opened ,than close it before regenerating IRepositoryViewObject toDelete = RepositoryResourceUtil.findViewObjectByName( IServerObjectRepositoryType.TYPE_ROUTINGRULE, PREFIX + jobName); if (toDelete != null) { IEditorPart openedEditor = UIUtil.findOpenedEditor(toDelete); if (openedEditor != null) { UIUtil.closeEditor(openedEditor, false); } // delete directly RepositoryResourceUtil.removeViewObjectPhysically(toDelete, jobVersion); } AttachToTriggerView(jobName, routingRule); } /** * DOC jsxie Comment method "createTrigger". * * @param dialog * @param jobVersion2 */ private WSRoutingRuleE createTrigger(String jobName, String jobVersion, JobOptionsDialog dialog) { WSRoutingRuleE routingRule = MdmserverobjectFactory.eINSTANCE.createWSRoutingRuleE(); try { String server = "http://localhost:8180"; //$NON-NLS-1$ Execution execution = dialog.getExecution(); String url = ""; //$NON-NLS-1$ switch (execution) { case EMBEDDED: url = "ltj://" + jobName + "/" + jobVersion; //$NON-NLS-1$ //$NON-NLS-2$ break; case WEB_SERVICE: url = Messages.bind(Messages.GenerateJobXX_UrlString, server, jobName, jobVersion, jobName); break; } Parameter executionParameter = dialog.getParameter(); String parameter = ""; //$NON-NLS-1$ switch (executionParameter) { case CONTEXT_VARIABLE: parameter = "<configuration>\n" + "<url>" + url + "</url><contextParam>\n"//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "<name>xmlInput</name>\n" + "<value>{exchange_data}</value>\n" + "</contextParam>\n"//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "</configuration>\n";//$NON-NLS-1$ break; case INTEGRATED: parameter = "<configuration>\n" + "<url>" + url + "</url>" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "</configuration>\n";//$NON-NLS-1$ break; } // Generate the job call // create default CREATE operation express WSRoutingRuleExpressionE expression1 = MdmserverobjectFactory.eINSTANCE.createWSRoutingRuleExpressionE(); expression1.setName("C1"); //$NON-NLS-1$ expression1.setXpath("Update/OperationType"); //$NON-NLS-1$ expression1.setWsOperator(newContainRoutingRuleOperator()); expression1.setValue("CREATE"); //$NON-NLS-1$ WSRoutingRuleExpressionE expression2 = MdmserverobjectFactory.eINSTANCE.createWSRoutingRuleExpressionE(); expression2.setName("C2"); //$NON-NLS-1$ expression2.setXpath("Update/OperationType"); //$NON-NLS-1$ expression2.setWsOperator(newContainRoutingRuleOperator()); expression2.setValue("UPDATE"); //$NON-NLS-1$ WSRoutingRuleExpressionE expression3 = MdmserverobjectFactory.eINSTANCE.createWSRoutingRuleExpressionE(); expression3.setName("C3"); //$NON-NLS-1$ expression3.setXpath("Update/OperationType"); //$NON-NLS-1$ expression3.setWsOperator(newContainRoutingRuleOperator()); expression3.setValue("DELETE"); //$NON-NLS-1$ routingRule.setName(getNewTriggerName(jobName)); routingRule.setDescription("Trigger that calls the Talend Job: " + jobName); //$NON-NLS-1$ routingRule.setSynchronous(false); routingRule.setConcept("Update"); //$NON-NLS-1$ routingRule.setServiceJNDI("amalto/local/service/callJob"); //$NON-NLS-1$ routingRule.setParameters(parameter); routingRule.setCondition(null); routingRule.setDeactive(false); routingRule.getWsRoutingRuleExpressions().add(expression1); routingRule.getWsRoutingRuleExpressions().add(expression2); routingRule.getWsRoutingRuleExpressions().add(expression3); routingRule.setCondition("C1 Or C2 Or C3"); //$NON-NLS-1$ routingRule.setDeactive(false); } catch (Exception e) { log.error(e.getMessage(), e); } return routingRule; } private String getNewTriggerName(String name) { return "CallJob_" + name; //$NON-NLS-1$ } private WSRoutingRuleOperatorE newContainRoutingRuleOperator() { WSRoutingRuleOperatorE operator = MdmserverobjectFactory.eINSTANCE.createWSRoutingRuleOperatorE(); operator.setValue("CONTAINS");//$NON-NLS-1$ return operator; } /** * DOC jsxie Comment method "AttachToTriggerView". * * @param filename * @param trigger */ private void AttachToTriggerView(String filename, WSRoutingRuleE trigger) { WSRoutingRuleItem item = MdmpropertiesFactory.eINSTANCE.createWSRoutingRuleItem(); ItemState itemState = PropertiesFactory.eINSTANCE.createItemState(); item.setState(itemState); item.setWsRoutingRule(trigger); item.getState().setPath(""); //$NON-NLS-1$ RepositoryResourceUtil.createItem(item, PREFIX + filename); getCommonViewer().refresh(); } @Override public boolean isVisible(IRepositoryViewObject viewObj) { if (getSelectedObject().size() > 1) { return false; } return super.isVisible(viewObj); } }