Package com.quantcomponents.marketdata

Source Code of com.quantcomponents.marketdata.MemoryStockDatabaseContainer

/*******************************************************************************
* 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;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.logging.Logger;

import com.quantcomponents.core.model.IContract;
import com.quantcomponents.core.model.beans.ImmutableContractBean;

/**
* Simple non-persistent implementation class for a {@link IStockDatabaseContainer}
* It can be used as default service when no better containerr are available
*/
public class MemoryStockDatabaseContainer implements IStockDatabaseContainer {
  @SuppressWarnings("unused")
  private static final Logger logger = Logger.getLogger(MemoryStockDatabaseContainer.class.getName());
  private static Set<IStockDatabase> EMPTY_SET = Collections.emptySet();
  private final Map<IContract, Set<IStockDatabase>> stockDbMultiMap = new HashMap<IContract, Set<IStockDatabase>>();
  private final Map<String, IStockDatabase> stockDbByID = new HashMap<String, IStockDatabase>();

  public void deactivate() {
    stockDbMultiMap.clear();
  }
 
  @Override
  public synchronized void addStockDatabase(IStockDatabase stockDatabase) {
    IContract contract = stockDatabase.getContract();
    Set<IStockDatabase> set = stockDbMultiMap.get(contract);
    if (set == null) {
      set = new CopyOnWriteArraySet<IStockDatabase>();
      IContract key = new ImmutableContractBean(contract); // since IContract instances can be mutable, make a snapshot of it
      stockDbMultiMap.put(key, set);
    }
    set.add(stockDatabase);
    stockDbByID.put(stockDatabase.getPersistentID(), stockDatabase);
  }

  @Override
  public synchronized Collection<IStockDatabase> allStockDatabases() {
    Collection<IStockDatabase> allDbs = new LinkedList<IStockDatabase>();
    for (Set<IStockDatabase> set : stockDbMultiMap.values()) {
      allDbs.addAll(set);
    }
    return allDbs;
  }

  @Override
  public synchronized Collection<IStockDatabase> findStockDatabases(IContract contract) {
    Set<IStockDatabase> set = stockDbMultiMap.get(contract);
    if (set != null) {
      return set;
    } else {
      return EMPTY_SET;
    }
  }

  @Override
  public synchronized boolean removeStockDatabase(IStockDatabase stockDatabase) {
    Set<IStockDatabase> set = stockDbMultiMap.get(stockDatabase.getContract());
    if (set != null) {
      stockDbByID.remove(stockDatabase.getPersistentID());
      return set.remove(stockDatabase);
    } else {
      return false;
    }
  }

  @Override
  public int size() {
    int size = 0;
    for (Set<IStockDatabase> set : stockDbMultiMap.values()) {
      size += set.size();
    }
    return size;
  }

  @Override
  public IStockDatabase getStockDatabase(String ID) {
    return stockDbByID.get(ID);
  }
}
TOP

Related Classes of com.quantcomponents.marketdata.MemoryStockDatabaseContainer

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.