package org.marketcetera.photon.internal.strategy.engine.sa.ui.workbench; import java.util.List; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; import org.marketcetera.photon.commons.ui.workbench.SafeHandler; import org.marketcetera.photon.strategy.engine.IStrategyEngines; import org.marketcetera.photon.strategy.engine.model.core.ConnectionState; import org.marketcetera.photon.strategy.engine.model.sa.StrategyAgentEngine; import org.marketcetera.util.misc.ClassVersion; import com.google.common.collect.Lists; /** * Handler for the {@code org.eclipse.ui.edit.delete} command that removes the * currently selected strategy agent, disconnecting if necessary. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: DeleteHandler.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: DeleteHandler.java 16154 2012-07-14 16:34:05Z colin $") public final class DeleteHandler extends SafeHandler { @Override protected void executeSafely(ExecutionEvent event) throws ExecutionException { IStructuredSelection selection = (IStructuredSelection) HandlerUtil .getCurrentSelectionChecked(event); List<StrategyAgentEngine> engines = Lists.newArrayList(); boolean someConnected = false; for (Object item : selection.toList()) { StrategyAgentEngine engine = (StrategyAgentEngine) item; engines.add(engine); if (engine.getConnectionState() == ConnectionState.CONNECTED) { someConnected = true; } } String confirmationMessage; if (engines.size() == 1) { confirmationMessage = Messages.DELETE_HANDLER_CONFIRMATION_SINGLE .getText(engines.get(0).getName()); } else { confirmationMessage = Messages.DELETE_HANDLER_CONFIRMATION_MULTIPLE .getText(); } if (!MessageDialog.openConfirm( HandlerUtil.getActiveShellChecked(event), Messages.DELETE_HANDLER_CONFIRMATION__TITLE.getText(), confirmationMessage)) { return; } if (someConnected) { new DisconnectHandler().execute(event); } IStrategyEngines part = (IStrategyEngines) HandlerUtil .getActivePartChecked(event); for (StrategyAgentEngine engine : engines) { if (engine.getConnectionState() == ConnectionState.CONNECTED) { // skip, disconnect must have failed } else { part.removeEngine(engine); } } } }