// ============================================================================ // // 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.trigger; import java.net.URL; import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.ui.IWorkbenchPartSite; import org.talend.core.GlobalServiceRegister; import org.talend.mdm.repository.core.AbstractRepositoryAction; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef; import org.talend.mdm.workbench.serverexplorer.ui.dialogs.SelectServerDefDialog; import com.amalto.workbench.editors.DataClusterDialog; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; import com.amalto.workbench.models.TreeObject; import com.amalto.workbench.service.ILegendServerDefService; import com.amalto.workbench.utils.Util; import com.amalto.workbench.webservices.TMDMService; import com.amalto.workbench.webservices.WSDataClusterPK; import com.amalto.workbench.webservices.WSItemPK; import com.amalto.workbench.webservices.WSRouteItemV2; import com.amalto.workbench.webservices.WSRoutingRulePK; import com.amalto.workbench.webservices.WSRoutingRulePKArray; /** * created by liusongbo on Oct 15, 2014 */ public class TestTriggerAction extends AbstractRepositoryAction implements SelectionListener { private static Logger log = Logger.getLogger(TestTriggerAction.class); private DataClusterDialog dialog; private TMDMService service; public TestTriggerAction() { super(Messages.TestTriggerAction_Test); setImageDescriptor(ImageCache.getImage(EImage.RUN_EXC.getPath())); setToolTipText(Messages.RoutingRuleMainPage2_run); setId("starttrigger"); //$NON-NLS-1$ } @Override public String getGroupName() { return GROUP_EDIT; } @Override protected void doRun() { com.amalto.workbench.utils.MDMServerDef serverDef = getServerDef(); if (serverDef == null) { return; } boolean canConnect = checkConnection(serverDef.getUrl(), serverDef.getUser(), serverDef.getPasswd()); if (!canConnect) { MessageDialog.openError(getShell(), Messages.RoutingRuleMainPage2_CheckConnection, Messages.RoutingRuleMainPage2_UnableToConnect); return; } try { service = Util.getMDMService(new URL(serverDef.getUrl()), serverDef.getUser(), serverDef.getPasswd()); IWorkbenchPartSite site = commonViewer.getCommonNavigator().getSite(); dialog = new DataClusterDialog(getShell(), new TreeObject(), site); dialog.setDefaultServerDef(serverDef); dialog.setOkLabel(Messages.TestTriggerAction_Test); dialog.setCancelLabel(Messages.TestTriggerAction_Close); dialog.setSelectionListener(this); dialog.open(); } catch (Exception e) { log.error(e.getMessage(), e); } } protected void test() { try { String dataCluster = dialog.getDataContainer(); String concept = dialog.getConcept(); String[] recordIds = dialog.getRecordIds(); if (recordIds == null || recordIds.length == 0) { MessageDialog.openError(getShell(), Messages._Error, Messages.RoutingRuleMainPage2_NoRecordSelected); return; } WSRoutingRulePKArray routeItemV2 = service.routeItemV2(new WSRouteItemV2(new WSItemPK(concept, Arrays .asList(recordIds), new WSDataClusterPK(dataCluster)))); if (routeItemV2 == null || routeItemV2.getWsRoutingRulePKs() == null || routeItemV2.getWsRoutingRulePKs().size() == 0) { MessageDialog.openInformation(getShell(), Messages.RoutingRuleMainPage2_Success, Messages.RoutingRuleMainPage2_noTriggerExecuted); return; } List<WSRoutingRulePK> wsRoutingRulePKs = routeItemV2.getWsRoutingRulePKs(); StringBuilder builder = new StringBuilder(wsRoutingRulePKs.get(0).getPk()); for (int i = 1; i < wsRoutingRulePKs.size(); i++) { builder.append("," + wsRoutingRulePKs.get(i).getPk()); //$NON-NLS-1$ } MessageDialog.openInformation(getShell(), Messages.RoutingRuleMainPage2_Success, Messages.bind(Messages.RoutingRuleMainPage2_ExecuteTriggerSuccess, builder.toString())); } catch (Exception e) { log.error(e.getMessage(), e); MessageDialog.openError(getShell(), Messages._Error, Messages.RoutingRuleMainPage2_ErrorTestTrigger); } } private com.amalto.workbench.utils.MDMServerDef getServerDef() { MDMServerDef lastServerDef = openServerDialog(null); if (lastServerDef == null) { return null; } return transform(lastServerDef); } public MDMServerDef openServerDialog(MDMServerDef serverObject) { SelectServerDefDialog dlg = new SelectServerDefDialog(getShell()); dlg.create(); dlg.setSelectServer(serverObject); if (dlg.open() == IDialogConstants.OK_ID) { MDMServerDef serverDef = dlg.getSelectedServerDef(); return serverDef; } return null; } private com.amalto.workbench.utils.MDMServerDef transform(MDMServerDef serverDef) { com.amalto.workbench.utils.MDMServerDef mdmServerDef = new com.amalto.workbench.utils.MDMServerDef(); mdmServerDef.setProtocol(serverDef.getProtocol()); mdmServerDef.setHost(serverDef.getHost()); mdmServerDef.setPort(serverDef.getPort()); mdmServerDef.setName(serverDef.getName()); mdmServerDef.setPasswd(serverDef.getPasswd()); mdmServerDef.setPath(serverDef.getPath()); mdmServerDef.setUser(serverDef.getUser()); return mdmServerDef; } private boolean checkConnection(String endpointaddress, String username, String password) { ILegendServerDefService serverDefService = (ILegendServerDefService) GlobalServiceRegister.getDefault().getService( ILegendServerDefService.class); return serverDefService.checkServerDefConnection(endpointaddress, username, password); } public void widgetSelected(SelectionEvent e) { Button btn = (Button) e.widget; if (((Integer) btn.getData()).intValue() == IDialogConstants.OK_ID) { test(); } } public void widgetDefaultSelected(SelectionEvent e) { } }