Package com.quantcomponents.series.jdbc.derby

Source Code of com.quantcomponents.series.jdbc.derby.DerbyStockDatabaseContainerFactory

/*******************************************************************************
* 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.series.jdbc.derby;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;

import javax.sql.DataSource;

import org.osgi.service.jdbc.DataSourceFactory;

import com.quantcomponents.marketdata.IStockDatabaseContainer;
import com.quantcomponents.marketdata.IStockDatabaseContainerFactory;
import com.quantcomponents.series.jdbc.JdbcStockDatabaseContainer;

public class DerbyStockDatabaseContainerFactory implements IStockDatabaseContainerFactory {
  public static final String DATABASE_NAME_PREFIX_KEY = "com.quantcomponents.series.db.prefix";
  public static final String DATABASE_NAME_PREFIX_DEFAULT = "stockDatabase";
  public static final String DATABASE_CREATE_KEY = "com.quantcomponents.series.db.create";
  public static final String DATABASE_CREATE_DEFAULT = "true";
 
  private final Collection<JdbcStockDatabaseContainer> activeContainers = Collections.synchronizedCollection(new LinkedList<JdbcStockDatabaseContainer>());

  private volatile String dbNamePrefix;
  private volatile String dbCreate;
  private volatile DataSourceFactory dataSourceFactory;
  private volatile Connection connection;
 
  public void setDataSourceFactory(DataSourceFactory dataSourceFactory) {
    this.dataSourceFactory = dataSourceFactory;
  }

  public void activate(Map<?,?> properties) throws SQLException {
    dbNamePrefix = (String) properties.get(DATABASE_NAME_PREFIX_KEY);
    if (dbNamePrefix == null) {
      dbNamePrefix = DATABASE_NAME_PREFIX_DEFAULT;
    }
    dbCreate = (String) properties.get(DATABASE_CREATE_KEY);
    if (dbCreate == null) {
      dbCreate = DATABASE_CREATE_DEFAULT;
    }
  }

  public void deactivate() throws SQLException {
    for (JdbcStockDatabaseContainer stockDbContainer : activeContainers) {
      stockDbContainer.stop();
    }
    activeContainers.clear();
  }
 
  @Override
  public IStockDatabaseContainer getInstance(String id) throws SQLException {
    String dbName = dbNamePrefix + "-" + id;
    String dbString = dbName + (dbCreate.equals("true") ? ";create=true" : "");
    Properties props = new Properties();
    props.put(DataSourceFactory.JDBC_DATABASE_NAME, dbString);
   
    DataSource dataSource = dataSourceFactory.createDataSource(props);
    connection = dataSource.getConnection();
   
    StockDatabaseHeaderDao stockDbHeaderDao = new StockDatabaseHeaderDao(connection);
    OHLCPointDao ohlcPointDao = new OHLCPointDao(connection);
    TickPointDao tickPointDao = new TickPointDao(connection);
    JdbcStockDatabaseContainer stockDbContainer = new JdbcStockDatabaseContainer(stockDbHeaderDao, ohlcPointDao, tickPointDao);
    stockDbContainer.start();
    activeContainers.add(stockDbContainer);
    return stockDbContainer;
  }
}
TOP

Related Classes of com.quantcomponents.series.jdbc.derby.DerbyStockDatabaseContainerFactory

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.