package org.marketcetera.photon.views; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import java.util.Set; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.CompoundContributionItem; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.services.IServiceLocator; import org.marketcetera.marketdata.Capability; import org.marketcetera.photon.Messages; import org.marketcetera.photon.PhotonPlugin; import org.marketcetera.photon.marketdata.IMarketDataManager; import org.marketcetera.photon.marketdata.ui.MarketDataUI; import org.marketcetera.photon.ui.ISymbolProvider; import org.marketcetera.trade.Instrument; import org.marketcetera.util.misc.ClassVersion; import com.google.common.collect.ImmutableMap; /* $License$ */ /** * Menu for choosing market depth sources. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: MarketDepthMenu.java 16865 2014-03-20 21:30:23Z colin $ * @since 1.5.0 */ @ClassVersion("$Id: MarketDepthMenu.java 16865 2014-03-20 21:30:23Z colin $") public class MarketDepthMenu extends CompoundContributionItem { /* (non-Javadoc) * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems() */ @Override protected IContributionItem[] getContributionItems() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); ISelection selection = window.getSelectionService().getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection structured = (IStructuredSelection) selection; Object selected = structured.getFirstElement(); if(selected instanceof ISymbolProvider) { Instrument instrument = ((ISymbolProvider)selected).getInstrument(); List<IContributionItem> items = new ArrayList<IContributionItem>(3); IMarketDataManager marketDataManager = PhotonPlugin.getDefault().getMarketDataManager(); Set<Capability> availableCapabilities; if(marketDataManager == null) { availableCapabilities = EnumSet.allOf(Capability.class); } else { availableCapabilities = marketDataManager.getAvailabilityCapability(); } if(availableCapabilities.contains(Capability.LEVEL_2)) { items.add(createCommand(window, instrument.getFullSymbol(), Capability.LEVEL_2, Messages.MARKET_DEPTH_LEVEL_2_LABEL.getText(), Messages.MARKET_DEPTH_LEVEL_2_MNEMONIC.getText())); } if(availableCapabilities.contains(Capability.TOTAL_VIEW)) { items.add(createCommand(window, instrument.getFullSymbol(), Capability.TOTAL_VIEW, Messages.MARKET_DEPTH_TOTAL_VIEW_LABEL.getText(), Messages.MARKET_DEPTH_TOTAL_VIEW_MNEMONIC.getText())); } if(availableCapabilities.contains(Capability.OPEN_BOOK)) { items.add(createCommand(window, instrument.getFullSymbol(), Capability.OPEN_BOOK, Messages.MARKET_DEPTH_OPEN_BOOK_LABEL.getText(), Messages.MARKET_DEPTH_OPEN_BOOK_MNEMONIC.getText())); } if(availableCapabilities.contains(Capability.BBO10)) { items.add(createCommand(window, instrument.getFullSymbol(), Capability.BBO10, Messages.MARKET_DEPTH_BBO10_LABEL.getText(), Messages.MARKET_DEPTH_BBO10_MNEMONIC.getText())); } if(availableCapabilities.contains(Capability.AGGREGATED_DEPTH)) { items.add(createCommand(window, instrument.getFullSymbol(), Capability.AGGREGATED_DEPTH, Messages.MARKET_DEPTH_AGGREGATED_DEPTH_LABEL.getText(), Messages.MARKET_DEPTH_AGGREGATED_DEPTH_MNEMONIC.getText())); } if(availableCapabilities.contains(Capability.UNAGGREGATED_DEPTH)) { items.add(createCommand(window, instrument.getFullSymbol(), Capability.UNAGGREGATED_DEPTH, Messages.MARKET_DEPTH_UNAGGREGATED_DEPTH_LABEL.getText(), Messages.MARKET_DEPTH_UNAGGREGATED_DEPTH_MNEMONIC.getText())); } return items.toArray(new IContributionItem[items.size()]); } } return new IContributionItem[] {}; } /** * Creates a command item. * * @param inWindow an <code>IServiceLocator</code> value * @param inSymbol a <code>String</code> value * @param inCapability a <code>Capability</code> value * @param inLabel a <code>String</code> value * @param inMnemonic a <code>String</code> value * @return a <code>CommandContributionItem</code> value */ private CommandContributionItem createCommand(IServiceLocator inWindow, String inSymbol, Capability inCapability, String inLabel, String inMnemonic) { CommandContributionItemParameter parameter = new CommandContributionItemParameter(inWindow, null, MarketDataUI.SHOW_MARKET_DEPTH_COMMAND_ID, CommandContributionItem.STYLE_PUSH); parameter.parameters = ImmutableMap.of(MarketDataUI.SHOW_MARKET_DEPTH_COMMAND_SYMBOL_PARAMETER, inSymbol, MarketDataUI.SHOW_MARKET_DEPTH_COMMAND_SOURCE_PARAMETER, inCapability.name()); parameter.label = inLabel; parameter.mnemonic = inMnemonic; return new CommandContributionItem(parameter); } }