package org.marketcetera.photon.product.handlers;
import java.util.EnumMap;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.marketcetera.core.position.Grouping;
import org.marketcetera.core.position.PositionRow;
import org.marketcetera.photon.internal.product.Messages;
import org.marketcetera.photon.views.FillsView;
import org.marketcetera.trade.Instrument;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* Shows a Fills view filtered by the currently selected position.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: ShowPositionFills.java 16154 2012-07-14 16:34:05Z colin $
* @since 1.5.0
*/
@ClassVersion("$Id: ShowPositionFills.java 16154 2012-07-14 16:34:05Z colin $")
public class ShowPositionFills extends AbstractHandler implements IHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IStructuredSelection selection = (IStructuredSelection) HandlerUtil
.getCurrentSelectionChecked(event);
PositionRow row = (PositionRow) selection.getFirstElement();
final EnumMap<Grouping, String> filters = new EnumMap<Grouping, String>(Grouping.class);
Grouping[] keys = row.getGrouping();
final Instrument instrument;
if (keys == null) {
// if no grouping, then this is a unique position
keys = Grouping.values();
instrument = row.getInstrument();
} else {
instrument = null;
}
for (Grouping key : keys) {
filters.put(key, key.get(row));
}
final IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindowChecked(event).getActivePage();
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
try {
FillsView view = (FillsView) page.showView(FillsView.ID, filters.toString(), IWorkbenchPage.VIEW_ACTIVATE);
view.setFillsFilter(filters, instrument);
} catch (PartInitException e) {
Messages.SHOW_POSITION_FILLS_UNABLE_TO_OPEN_VIEW.error(ShowPositionFills.this, e);
}
}
});
return null;
}
}