Package com.quantcomponents.marketdata.osgi.host

Source Code of com.quantcomponents.marketdata.osgi.host.StockDatabaseHost$StockDatabaseInfo

/*******************************************************************************
* Copyright (c) 2013 Luigi Sgro. 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:
*     Luigi Sgro - initial API and implementation
******************************************************************************/
package com.quantcomponents.marketdata.osgi.host;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.TimeZone;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;

import com.quantcomponents.core.model.BarSize;
import com.quantcomponents.core.model.DataType;
import com.quantcomponents.core.model.IContract;
import com.quantcomponents.core.remote.IUIDGenerator;
import com.quantcomponents.core.remote.ServiceHandle;
import com.quantcomponents.marketdata.IStockDatabase;
import com.quantcomponents.marketdata.osgi.IMutableOHLCTimeSeriesHost;
import com.quantcomponents.marketdata.osgi.IMutableOHLCTimeSeriesHostLocal;
import com.quantcomponents.marketdata.osgi.IMutableTickTimeSeriesHost;
import com.quantcomponents.marketdata.osgi.IOHLCTimeSeriesHost;
import com.quantcomponents.marketdata.osgi.IOHLCTimeSeriesHostLocal;
import com.quantcomponents.marketdata.osgi.IStockDatabaseHost;
import com.quantcomponents.marketdata.osgi.IStockDatabaseHostLocal;
import com.quantcomponents.marketdata.osgi.ITickTimeSeriesHostLocal;

public class StockDatabaseHost implements IStockDatabaseHost, IStockDatabaseHostLocal {
  private static class StockDatabaseInfo {
    IStockDatabase stockDatabase;
    ServiceHandle<IStockDatabaseHost> handle;
    ServiceHandle<IMutableOHLCTimeSeriesHost> ohlcTimeSeriesHandle;
    ServiceHandle<IMutableTickTimeSeriesHost> tickTimeSeriesHandle;
    ServiceHandle<IOHLCTimeSeriesHost> virtualTimeSeriesHandle;
  }

  @SuppressWarnings("unused")
  private static final Logger logger = Logger.getLogger(StockDatabaseHost.class.getName());
  private final Map<ServiceHandle<IStockDatabaseHost>, StockDatabaseInfo> allStockDbs = new ConcurrentHashMap<ServiceHandle<IStockDatabaseHost>, StockDatabaseInfo>();
  private volatile IMutableOHLCTimeSeriesHostLocal ohlcTimeSeriesHost;
  private volatile ITickTimeSeriesHostLocal tickTimeSeriesHost;
  private volatile IOHLCTimeSeriesHostLocal virtualTimeSeriesHost;
  private volatile IUIDGenerator uidGenerator;

  public StockDatabaseHost() {}
 
  public StockDatabaseHost(IMutableOHLCTimeSeriesHostLocal ohlcTimeSeriesHost, ITickTimeSeriesHostLocal tickTimeSeriesHost,
      IOHLCTimeSeriesHostLocal virtualTimeSeriesHost, IUIDGenerator uidGenerator) {
    this.ohlcTimeSeriesHost = ohlcTimeSeriesHost;
    this.tickTimeSeriesHost = tickTimeSeriesHost;
    this.virtualTimeSeriesHost = virtualTimeSeriesHost;
    this.uidGenerator = uidGenerator;
  }

  public void deactivate() {
    allStockDbs.clear();
  }
 
  public void setOhlcTimeSeriesHost(IMutableOHLCTimeSeriesHostLocal ohlcTimeSeriesHost) {
    this.ohlcTimeSeriesHost = ohlcTimeSeriesHost;
  }

  public void setTickTimeSeriesHost(ITickTimeSeriesHostLocal tickTimeSeriesHost) {
    this.tickTimeSeriesHost = tickTimeSeriesHost;
  }

  public void setVirtualTimeSeriesHost(IOHLCTimeSeriesHostLocal virtualTimeSeriesHost) {
    this.virtualTimeSeriesHost = virtualTimeSeriesHost;
  }

  public void setUidGenerator(IUIDGenerator uidGenerator) {
    this.uidGenerator = uidGenerator;
  }

  public void finalize() throws Throwable {
    close();
    super.finalize();
  }

  @Override
  public ServiceHandle<IMutableOHLCTimeSeriesHost> getOHLCTimeSeries(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).ohlcTimeSeriesHandle;
  }

  @Override
  public ServiceHandle<IMutableTickTimeSeriesHost> getTickTimeSeries(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).tickTimeSeriesHandle;
  }

  @Override
  public ServiceHandle<IOHLCTimeSeriesHost> getVirtualTimeSeries(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).virtualTimeSeriesHandle;
  }

  @Override
  public long getTimestamp(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.getTimestamp();
  }

  @Override
  public IContract getContract(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.getContract();
  }

  @Override
  public BarSize getBarSize(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.getBarSize();
  }

  @Override
  public DataType getDataType(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.getDataType();
  }

  @Override
  public boolean isIncludeAfterHours(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.isIncludeAfterHours();
  }

  @Override
  public TimeZone getTimeZone(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.getTimeZone();
  }

  @SuppressWarnings("unchecked")
  @Override
  public ServiceHandle<IStockDatabaseHost> addStockDatabase(IStockDatabase stockDatabase) {
    StockDatabaseInfo info = new StockDatabaseInfo();
    info.stockDatabase = stockDatabase;
    info.ohlcTimeSeriesHandle = (ServiceHandle<IMutableOHLCTimeSeriesHost>) ohlcTimeSeriesHost.addSeries(stockDatabase.getOHLCTimeSeries());
    info.tickTimeSeriesHandle = (ServiceHandle<IMutableTickTimeSeriesHost>) tickTimeSeriesHost.addSeries(stockDatabase.getTickTimeSeries());
    info.virtualTimeSeriesHandle = (ServiceHandle<IOHLCTimeSeriesHost>) virtualTimeSeriesHost.addSeries(stockDatabase.getVirtualTimeSeries());
    info.handle = new ServiceHandle<IStockDatabaseHost>(uidGenerator.nextUID());
    allStockDbs.put(info.handle, info);
    return info.handle;
  }

  @Override
  public void removeStockDatabase(ServiceHandle<IStockDatabaseHost> stockDatabaseHostHandle) {
    StockDatabaseInfo info = retrieveStockDatabaseInfo(stockDatabaseHostHandle);
    ohlcTimeSeriesHost.removeSeries(info.ohlcTimeSeriesHandle);
    tickTimeSeriesHost.removeSeries(info.tickTimeSeriesHandle);
    virtualTimeSeriesHost.removeSeries(info.virtualTimeSeriesHandle);
    allStockDbs.remove(info.handle);
  }

  @Override
  public IStockDatabase getStockDatabase(ServiceHandle<IStockDatabaseHost> handle) {
    StockDatabaseInfo info = retrieveStockDatabaseInfo(handle);
    IStockDatabase stockDb = null;
    if (info != null) {
      stockDb = info.stockDatabase;
    }
    return stockDb;
  }

  @Override
  public ServiceHandle<IStockDatabaseHost> getStockDatabaseHandle(IStockDatabase service) {
    for (Map.Entry<ServiceHandle<IStockDatabaseHost>, StockDatabaseInfo> entry : allStockDbs.entrySet()) {
      if (entry.getValue().stockDatabase.getPersistentID().equals(service.getPersistentID())) {
        return entry.getKey();
      }
    }
    return null;
  }

  @Override
  public String getPersistentID(ServiceHandle<IStockDatabaseHost> stockDbHandle) {
    return retrieveStockDatabaseInfo(stockDbHandle).stockDatabase.getPersistentID();
  }
 
  private StockDatabaseInfo retrieveStockDatabaseInfo(ServiceHandle<IStockDatabaseHost> stockDatabaseHostHandle) {
    StockDatabaseInfo info = allStockDbs.get(stockDatabaseHostHandle);
    if (info == null) {
      throw new IllegalArgumentException("Stock DB for handle: " + stockDatabaseHostHandle + " not found");
    }
    return info;
  }

  private void close() {
    Collection<ServiceHandle<IStockDatabaseHost>> handles = new ArrayList<ServiceHandle<IStockDatabaseHost>>();
    for (StockDatabaseInfo info : allStockDbs.values()) {
      handles.add(info.handle);
    }
    for (ServiceHandle<IStockDatabaseHost> handle : handles) {
      removeStockDatabase(handle);
    }
  }
 
}
TOP

Related Classes of com.quantcomponents.marketdata.osgi.host.StockDatabaseHost$StockDatabaseInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.