package org.marketcetera.photon.internal.strategy; import java.io.IOException; import java.util.Collection; import java.util.List; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.ecore.EObject; import org.marketcetera.photon.commons.emf.EMFFilePersistence; import org.marketcetera.photon.commons.emf.IEMFPersistence; import org.marketcetera.photon.strategy.StrategyUI; import org.marketcetera.photon.strategy.engine.IStrategyEngines; import org.marketcetera.photon.strategy.engine.model.core.StrategyEngine; import org.marketcetera.photon.strategy.engine.model.sa.StrategyAgentEngine; import org.marketcetera.photon.strategy.engine.sa.ui.StrategyAgentEnginesSupport; import org.marketcetera.util.misc.ClassVersion; import org.osgi.framework.BundleContext; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; /* $License$ */ /** * Manages the {@link IStrategyEngines} service provided by this bundle. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: StrategyEnginesSupport.java 16854 2014-03-12 01:54:42Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: StrategyEnginesSupport.java 16854 2014-03-12 01:54:42Z colin $") class StrategyEnginesSupport extends StrategyAgentEnginesSupport { private static final String PERSISTENCE_FILE_NAME = "engines.xml"; //$NON-NLS-1$ /** * Persistence service that only saves {@link StrategyAgentEngine}. */ @ClassVersion("$Id: StrategyEnginesSupport.java 16854 2014-03-12 01:54:42Z colin $") private final static class Persistence implements IEMFPersistence { private final IEMFPersistence mDelegate = new EMFFilePersistence( Platform.getStateLocation( Platform.getBundle(StrategyUI.PLUGIN_ID)).append( PERSISTENCE_FILE_NAME).toFile()); @Override public void save(Collection<? extends EObject> objects) throws IOException { mDelegate.save(Collections2.filter(objects, Predicates .instanceOf(StrategyAgentEngine.class))); } @Override public List<? extends EObject> restore() throws IOException { return mDelegate.restore(); } }; /** * Constructor. * * @param context * the context with which to register the service * @throws IllegalArgumentException * if context is null * @throws IllegalStateException * if called from a non UI thread */ public StrategyEnginesSupport(BundleContext context) { super(context, new Persistence()); } @Override protected void initList(List<StrategyEngine> engines) { super.initList(engines); } }