package org.marketcetera.photon.internal.strategy.ui;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
import org.marketcetera.client.Client;
import org.marketcetera.client.ClientManager;
import org.marketcetera.photon.internal.strategy.TradeSuggestion;
import org.marketcetera.photon.internal.strategy.TradeSuggestionManager;
import org.marketcetera.photon.strategy.StrategyUI;
import org.marketcetera.trade.OrderSingle;
import org.marketcetera.util.except.I18NException;
import org.marketcetera.util.misc.ClassVersion;
/**
* Send selected orders to the server.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: SendOrdersHandler.java 16154 2012-07-14 16:34:05Z colin $
* @since 1.0.0
*/
@ClassVersion("$Id: SendOrdersHandler.java 16154 2012-07-14 16:34:05Z colin $")
public class SendOrdersHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IStructuredSelection selection = (IStructuredSelection) HandlerUtil
.getCurrentSelectionChecked(event);
Shell shell = HandlerUtil.getActiveShellChecked(event);
try {
Client client = ClientManager.getInstance();
MultiStatus status = new MultiStatus(
StrategyUI.PLUGIN_ID,
IStatus.ERROR,
Messages.SEND_ORDERS_HANDLER_SEND_ORDERS_FAILURE_SEE_DETAILS
.getText(), null);
for (Object obj : selection.toArray()) {
TradeSuggestion suggestion = (TradeSuggestion) obj;
OrderSingle order = suggestion.getOrder();
try {
client.sendOrder(order);
TradeSuggestionManager.getCurrent().removeSuggestion(
suggestion);
} catch (Exception e) {
Messages.SEND_ORDERS_HANDLER_SEND_ORDER_FAILURE.error(this, order.toString());
status.add(new Status(IStatus.ERROR, StrategyUI.PLUGIN_ID,
order.toString(), e));
}
}
if (status.getChildren().length > 0) {
ErrorDialog.openError(shell, null,
Messages.SEND_ORDERS_HANDLER_SEND_ORDERS_FAILURE
.getText(), status);
}
} catch (I18NException e) {
Messages.SEND_ORDERS_HANDLER_SERVER_FAILURE.error(this, e);
ErrorDialog.openError(shell, null,
Messages.SEND_ORDERS_HANDLER_SERVER_FAILURE.getText(),
new Status(IStatus.ERROR, StrategyUI.PLUGIN_ID, e
.getLocalizedMessage()));
}
return null;
}
}