package org.marketcetera.photon.internal.marketdata.ui; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.management.MBeanAttributeInfo; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IStartup; import org.marketcetera.module.ModuleURN; import org.marketcetera.photon.module.ui.ModuleAttributePreferencePage; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * This class uses some heuristics to build a preference page for market data * providers with writable attributes. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: FeedPreferencePageInitializer.java 16854 2014-03-12 01:54:42Z colin $ * @since 1.1.0 */ @ClassVersion("$Id: FeedPreferencePageInitializer.java 16854 2014-03-12 01:54:42Z colin $") public class FeedPreferencePageInitializer implements IStartup { // private static final String ROOT_NODE = "org.marketcetera.photon.marketdata.ui.MarketDataPreferencePage"; //$NON-NLS-1$ @Override public void earlyStartup() { // List<IMarketDataFeed> providers = new ArrayList<IMarketDataFeed>( // Activator.getMarketDataManager().getProviders()); // Collections.sort(providers, new Comparator<IMarketDataFeed>() { // @Override // public int compare(IMarketDataFeed o1, IMarketDataFeed o2) { // return o1.getName().compareTo(o2.getName()); // } // }); // PreferenceManager preferenceManager = PlatformUI.getWorkbench() // .getPreferenceManager(); // IPreferenceNode rootNode = preferenceManager.find(ROOT_NODE); // for (IMarketDataFeed provider : providers) { // final ModuleURN urn = provider.getURN(); // try { // MBeanAttributeInfo[] attributes = ModuleSupport // .getMBeanServerConnection().getMBeanInfo( // urn.toObjectName()).getAttributes(); // final List<MBeanAttributeInfo> writableAttributes = new ArrayList<MBeanAttributeInfo>(); // for (MBeanAttributeInfo attribute : attributes) { // if (attribute.isWritable()) { // writableAttributes.add(attribute); // } // } // if (writableAttributes.size() > 0) { // final String label = provider.getName(); // rootNode.add(new PreferenceNode( // "org.marketcetera.photon.marketdata.ui." //$NON-NLS-1$ // + provider.getId(), label, null, null) { // @Override // public void createPage() { // setPage(new GenericAttributePreferencePage( // urn, // writableAttributes // .toArray(new MBeanAttributeInfo[writableAttributes // .size()]), label)); // } // }); // } // } catch (Exception e) { // Messages.FEED_PREFERENCE_PAGE_INITIALIZER_MODULE_ERROR.error( // this, e); // } // // } } /** * Internal class for a generic module attribute preference page. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: FeedPreferencePageInitializer.java 16854 2014-03-12 01:54:42Z colin $ * @since 1.1.0 */ @ClassVersion("$Id: FeedPreferencePageInitializer.java 16854 2014-03-12 01:54:42Z colin $") private class GenericAttributePreferencePage extends ModuleAttributePreferencePage { private static final String URL = "URL"; //$NON-NLS-1$ private static final String USERNAME = "Username"; //$NON-NLS-1$ private static final String PASSWORD = "Password"; //$NON-NLS-1$ private final MBeanAttributeInfo[] mAttributes; public GenericAttributePreferencePage(ModuleURN urn, MBeanAttributeInfo[] attributes, String title) { super(urn); setTitle(title); mAttributes = process(attributes); } private MBeanAttributeInfo[] process(MBeanAttributeInfo[] attributes) { MBeanAttributeInfo url = null; MBeanAttributeInfo username = null; MBeanAttributeInfo password = null; List<MBeanAttributeInfo> others = new ArrayList<MBeanAttributeInfo>(); for (MBeanAttributeInfo attribute : attributes) { if (attribute.getName().equals(URL)) { url = attribute; } else if (attribute.getName().equals(USERNAME)) { username = attribute; } else if (attribute.getName().equals(PASSWORD)) { password = attribute; } else { others.add(attribute); } } Collections.sort(others, new Comparator<MBeanAttributeInfo>() { @Override public int compare(MBeanAttributeInfo o1, MBeanAttributeInfo o2) { return o1.getName().compareTo(o2.getName()); } }); List<MBeanAttributeInfo> processed = new ArrayList<MBeanAttributeInfo>(); if (url != null) { processed.add(url); } processed.addAll(others); if (username != null) { processed.add(username); } if (password != null) { processed.add(password); } return processed.toArray(new MBeanAttributeInfo[processed.size()]); } @Override protected void createFields(Composite parent) { for (MBeanAttributeInfo attribute : mAttributes) { createTextField(parent, attribute.getName(), attribute .getName(), !attribute.isReadable()); } } } }