// ============================================================================
//
// 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 com.amalto.workbench.editors.actions;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import com.amalto.workbench.editors.RoutingEngineV2BrowserMainPage;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.ImageCache;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSExecuteRoutingOrderV2Asynchronously;
import com.amalto.workbench.webservices.WSExecuteRoutingOrderV2Synchronously;
import com.amalto.workbench.webservices.WSRoutingOrderV2;
import com.amalto.workbench.webservices.WSRoutingOrderV2PK;
import com.amalto.workbench.webservices.WSString;
public class ExecuteRoutingOrdersAction extends Action {
private static Log log = LogFactory.getLog(ExecuteRoutingOrdersAction.class);
protected Shell shell = null;
protected Viewer viewer;
protected boolean synchronously = true;
private RoutingEngineV2BrowserMainPage routingEngineV2BrowserMainPage;
public ExecuteRoutingOrdersAction(Shell shell, RoutingEngineV2BrowserMainPage routingEngineV2BrowserMainPage, Viewer viewer,
boolean synchronously) {
this.shell = shell;
this.routingEngineV2BrowserMainPage = routingEngineV2BrowserMainPage;
this.viewer = viewer;
this.synchronously = synchronously;
setImageDescriptor(ImageCache.getImage("icons/execute.gif"));//$NON-NLS-1$
IStructuredSelection selection = ((IStructuredSelection) viewer.getSelection());
if (selection.size() == 1) {
setText(Messages.RoutingEngineV2BrowserMainPage_Text
+ (synchronously ? Messages.RoutingEngineV2BrowserMainPage_Text2
: Messages.RoutingEngineV2BrowserMainPage_Text3) + Messages.RoutingEngineV2BrowserMainPage_TextA);
} else {
setText(Messages.RoutingEngineV2BrowserMainPage_Text1
+ (synchronously ? Messages.RoutingEngineV2BrowserMainPage_Text2
: Messages.RoutingEngineV2BrowserMainPage_Text3) + Messages.RoutingEngineV2BrowserMainPage_Text1A
+ selection.size() + Messages.RoutingEngineV2BrowserMainPage_Text1B);
}
setToolTipText(Messages.RoutingEngineV2BrowserMainPage_ActionTip
+ (synchronously ? Messages.RoutingEngineV2BrowserMainPage_Text2 : Messages.RoutingEngineV2BrowserMainPage_Text3)
+ Messages.RoutingEngineV2BrowserMainPage_ActionTipA + (selection.size() > 1 ? "s" : TEXT));//$NON-NLS-1$
}
@Override
public void run() {
try {
super.run();
// retrieve the list of items
IStructuredSelection selection = ((IStructuredSelection) viewer.getSelection());
List<WSRoutingOrderV2> lineItems = selection.toList();
if (lineItems.size() == 0) {
return;
}
if (!MessageDialog.openConfirm(this.shell, Messages.RoutingEngineV2BrowserMainPage_ConfirmTitle,
Messages.RoutingEngineV2BrowserMainPage_ConfirmContent
+ (synchronously ? Messages.RoutingEngineV2BrowserMainPage_Text2
: Messages.RoutingEngineV2BrowserMainPage_Text3)
+ Messages.RoutingEngineV2BrowserMainPage_ConfirmContentA + lineItems.size()
+ Messages.RoutingEngineV2BrowserMainPage_B)) {
return;
}
// Instantiate the Monitor with actual deletes
ExecuteRoutingOrdersWithProgress diwp = new ExecuteRoutingOrdersWithProgress(
(TMDMService) routingEngineV2BrowserMainPage.getAdapter(TMDMService.class), lineItems, this.shell);
// run
new ProgressMonitorDialog(this.shell).run(false, // fork
true, // cancelable
diwp);
// refresh the search
routingEngineV2BrowserMainPage.doSearch();
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(shell, Messages._Error,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorMsg4, e.getLocalizedMessage()));
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
class ExecuteRoutingOrdersWithProgress implements IRunnableWithProgress {
Collection<WSRoutingOrderV2> lineItems;
Shell parentShell;
private TMDMService service;
public ExecuteRoutingOrdersWithProgress(TMDMService tmdmService, Collection<WSRoutingOrderV2> lineItems, Shell shell) {
super();
this.service = tmdmService;
this.lineItems = lineItems;
this.parentShell = shell;
}
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask(Messages.RoutingEngineV2BrowserMainPage_ExecutingRoutingOrders, lineItems.size());
String results = TEXT;
if (service != null) {
for (WSRoutingOrderV2 lineItem : lineItems) {
monitor.subTask(Messages.RoutingEngineV2BrowserMainPage_ExecutingRoutingOrder + lineItem.getName());
if (monitor.isCanceled()) {
MessageDialog.openWarning(this.parentShell, Messages.RoutingEngineV2BrowserMainPage_WarningTitle,
Messages.RoutingEngineV2BrowserMainPage_WraningMsg + lineItem.getName()
+ Messages.RoutingEngineV2BrowserMainPage_WraningMsgA
+ Messages.RoutingEngineV2BrowserMainPage_WraningMsgB);
return;
}
try {
if (synchronously) {
WSString wsResult = service
.executeRoutingOrderV2Synchronously(new WSExecuteRoutingOrderV2Synchronously(
new WSRoutingOrderV2PK(lineItem.getName(), lineItem.getStatus())));
if (wsResult.getValue() != null) {
results += lineItem.getName() + ": " + wsResult.getValue(); //$NON-NLS-1$
}
} else {
service.executeRoutingOrderV2Asynchronously(new WSExecuteRoutingOrderV2Asynchronously(
new WSRoutingOrderV2PK(lineItem.getName(), lineItem.getStatus())));
}
monitor.worked(1);
} catch (Exception e) {
log.error(e.getMessage(), e);
if (!Util.handleConnectionException(shell, e, Messages.RoutingEngineV2BrowserMainPage_ErrorExecuting)) {
MessageDialog.openError(shell, Messages.RoutingEngineV2BrowserMainPage_ErrorExecuting,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorMsg6, e.getLocalizedMessage()));
}
}// try
}// for
}
monitor.done();
MessageDialog.openInformation(shell, Messages.RoutingEngineV2BrowserMainPage_InfoTitle, lineItems.size()
+ Messages.RoutingEngineV2BrowserMainPage_InfoContent + (TEXT.equals(results) ? TEXT : "\n" + results));//$NON-NLS-1$
}// run
}// class DeleteItemsWithProgress
}