/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.repository.local.internal.stores; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipsetrader.core.IScript; import org.eclipsetrader.core.ats.IScriptStrategy; import org.eclipsetrader.core.feed.TimeSpan; import org.eclipsetrader.core.instruments.ISecurity; import org.eclipsetrader.core.repositories.IPropertyConstants; import org.eclipsetrader.core.repositories.IRepository; import org.eclipsetrader.core.repositories.IRepositoryElementFactory; import org.eclipsetrader.core.repositories.IStore; import org.eclipsetrader.core.repositories.IStoreProperties; import org.eclipsetrader.core.repositories.StoreProperties; import org.eclipsetrader.repository.local.LocalRepository; import org.eclipsetrader.repository.local.internal.Activator; import org.eclipsetrader.repository.local.internal.StrategiesCollection; import org.eclipsetrader.repository.local.internal.types.RepositoryFactoryAdapter; import org.eclipsetrader.repository.local.internal.types.ScriptAdapter; import org.eclipsetrader.repository.local.internal.types.SecurityAdapter; import org.eclipsetrader.repository.local.internal.types.TimeSpanAdapter; @XmlRootElement(name = "strategy") public class StrategyScriptStore implements IStore { @XmlAttribute(name = "id") private Integer id; @XmlAttribute(name = "factory") @XmlJavaTypeAdapter(RepositoryFactoryAdapter.class) private IRepositoryElementFactory factory; @XmlAttribute(name = "type") private String type; @XmlAttribute(name = "language") private String language; @XmlElement(name = "name") private String name; @XmlElement(name = "text") private String text; @XmlElementWrapper(name = "bars") @XmlElement(name = "timeSpan") @XmlJavaTypeAdapter(TimeSpanAdapter.class) private List<TimeSpan> barsTimeSpan = new ArrayList<TimeSpan>(); @XmlElementWrapper(name = "instruments") @XmlElement(name = "security") @XmlJavaTypeAdapter(SecurityAdapter.class) private List<ISecurity> instruments = new ArrayList<ISecurity>(); @XmlElementWrapper(name = "includes") @XmlElement(name = "script") @XmlJavaTypeAdapter(ScriptAdapter.class) private List<IScript> includes = new ArrayList<IScript>(); public StrategyScriptStore() { } public StrategyScriptStore(Integer id) { this.id = id; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#fetchProperties(org.eclipse.core.runtime.IProgressMonitor) */ @Override public IStoreProperties fetchProperties(IProgressMonitor monitor) { StoreProperties properties = new StoreProperties(); if (factory != null) { properties.setProperty(IPropertyConstants.ELEMENT_FACTORY, factory); } properties.setProperty(IPropertyConstants.OBJECT_TYPE, type); properties.setProperty(IScriptStrategy.PROP_NAME, name); properties.setProperty(IScriptStrategy.PROP_LANGUAGE, language); properties.setProperty(IScriptStrategy.PROP_TEXT, text); properties.setProperty(IScriptStrategy.PROP_INCLUDES, includes.toArray(new IScript[includes.size()])); properties.setProperty(IScriptStrategy.PROP_INSTRUMENTS, instruments.toArray(new ISecurity[instruments.size()])); properties.setProperty(IScriptStrategy.PROP_BARS_TIMESPAN, barsTimeSpan.toArray(new TimeSpan[barsTimeSpan.size()])); return properties; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#putProperties(org.eclipsetrader.core.repositories.IStoreProperties, org.eclipse.core.runtime.IProgressMonitor) */ @Override public void putProperties(IStoreProperties properties, IProgressMonitor monitor) { this.factory = (IRepositoryElementFactory) properties.getProperty(IPropertyConstants.ELEMENT_FACTORY); this.type = (String) properties.getProperty(IPropertyConstants.OBJECT_TYPE); this.name = (String) properties.getProperty(IScriptStrategy.PROP_NAME); this.language = (String) properties.getProperty(IScriptStrategy.PROP_LANGUAGE); this.text = (String) properties.getProperty(IScriptStrategy.PROP_TEXT); this.includes = new ArrayList<IScript>(); IScript[] s = (IScript[]) properties.getProperty(IScriptStrategy.PROP_INCLUDES); if (s != null) { this.includes.addAll(Arrays.asList(s)); } this.instruments = new ArrayList<ISecurity>(); ISecurity[] e = (ISecurity[]) properties.getProperty(IScriptStrategy.PROP_INSTRUMENTS); if (e != null) { this.instruments.addAll(Arrays.asList(e)); } this.barsTimeSpan = new ArrayList<TimeSpan>(); TimeSpan[] barsTimeSpan = (TimeSpan[]) properties.getProperty(IScriptStrategy.PROP_BARS_TIMESPAN); if (barsTimeSpan != null) { this.barsTimeSpan.addAll(Arrays.asList(barsTimeSpan)); } } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#delete(org.eclipse.core.runtime.IProgressMonitor) */ @Override public void delete(IProgressMonitor monitor) throws CoreException { StrategiesCollection.getInstance().delete(this); } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#fetchChilds(org.eclipse.core.runtime.IProgressMonitor) */ @Override public IStore[] fetchChilds(IProgressMonitor monitor) { return null; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#createChild() */ @Override public IStore createChild() { return null; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#getRepository() */ @Override @XmlTransient public IRepository getRepository() { return Activator.getDefault().getRepository(); } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStore#toURI() */ @Override public URI toURI() { try { return new URI(LocalRepository.URI_SCHEMA, LocalRepository.URI_STRATEGY_PART, String.valueOf(id)); } catch (URISyntaxException e) { } return null; } }