/*
* 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.hibernate.internal.stores;
import java.net.URI;
import java.util.Date;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipsetrader.core.Script;
import org.eclipsetrader.core.ats.IScriptStrategy;
import org.eclipsetrader.core.feed.IHistory;
import org.eclipsetrader.core.instruments.ICurrencyExchange;
import org.eclipsetrader.core.instruments.ISecurity;
import org.eclipsetrader.core.instruments.IStock;
import org.eclipsetrader.core.repositories.IPropertyConstants;
import org.eclipsetrader.core.repositories.IRepository;
import org.eclipsetrader.core.repositories.IStore;
import org.eclipsetrader.core.repositories.IStoreObject;
import org.eclipsetrader.core.repositories.IStoreProperties;
import org.eclipsetrader.core.views.IWatchList;
import org.eclipsetrader.repository.hibernate.HibernateRepository;
public class RepositoryStore implements IStore {
private IStore store;
private HibernateRepository repository;
public RepositoryStore(HibernateRepository repository) {
this.repository = repository;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IStore#delete(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void delete(IProgressMonitor monitor) throws CoreException {
if (store != null) {
store.delete(monitor);
}
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IStore#fetchProperties(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public IStoreProperties fetchProperties(IProgressMonitor monitor) {
return store != null ? store.fetchProperties(monitor) : null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IStore#fetchChilds(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public IStore[] fetchChilds(IProgressMonitor monitor) {
return store != null ? store.fetchChilds(monitor) : new IStore[0];
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IStore#createChild()
*/
@Override
public IStore createChild() {
return store != null ? store.createChild() : null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IStore#getRepository()
*/
@Override
public IRepository getRepository() {
return store != null ? store.getRepository() : repository;
}
/* (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) {
if (store == null) {
String type = (String) properties.getProperty(IPropertyConstants.OBJECT_TYPE);
if (ISecurity.class.getName().equals(type) || IStock.class.getName().equals(type) || ICurrencyExchange.class.getName().equals(type)) {
store = new SecurityStore(repository);
}
else if (IWatchList.class.getName().equals(type)) {
store = new WatchListStore(repository);
}
else if (IHistory.class.getName().equals(type)) {
ISecurity security = (ISecurity) properties.getProperty(IPropertyConstants.SECURITY);
IStoreObject storeObject = (IStoreObject) security.getAdapter(IStoreObject.class);
IStore securityStore = storeObject.getStore();
if (securityStore instanceof RepositoryStore) {
securityStore = ((RepositoryStore) securityStore).getStore();
}
if (securityStore instanceof SecurityStore) {
Date date = (Date) properties.getProperty(IPropertyConstants.BARS_DATE);
if (date != null) {
store = new IntradayHistoryStore(security, date, repository);
}
else {
store = new HistoryStore(security, repository);
}
}
}
else if (Script.class.getName().equals(type)) {
store = new ScriptStore(repository);
}
else if (IScriptStrategy.class.getName().equals(type)) {
store = new StrategyScriptStore(repository);
}
}
if (store != null) {
store.putProperties(properties, monitor);
}
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.repositories.IStore#toURI()
*/
@Override
public URI toURI() {
return store != null ? store.toURI() : null;
}
public IStore getStore() {
return store;
}
}