com.opengamma.integration.server.copier.ServerDatabaseCreator.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.integration.server.copier.ServerDatabaseCreator.java

Source

/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.integration.server.copier;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Objects;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;

import com.opengamma.scripts.Scriptable;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.ResourceUtils;
import com.opengamma.util.db.tool.DbTool;

/**
 * Tool class that creates a database based on the given toolcontext property file and 
 * initialize the database with data from a given server URL.
 */
@Scriptable
public class ServerDatabaseCreator {

    /** Logger. */
    private static final Logger s_logger = LoggerFactory.getLogger(ServerDatabaseCreator.class);

    /** Shared database URL. */
    private static final String KEY_SHARED_URL = "db.standard.url";
    /** Shared database user name. */
    private static final String KEY_SHARED_USER_NAME = "db.standard.username";
    /** Shared database password. */
    private static final String KEY_SHARED_PASSWORD = "db.standard.password";
    /** Temporary user database URL. */
    private static final String KEY_USERFINANCIAL_URL = "db.userfinancial.url";
    /** Temporary user database user name. */
    private static final String KEY_USERFINANCIAL_USER_NAME = "db.userfinancial.username";
    /** Temporary user database password. */
    private static final String KEY_USERFINANCIAL_PASSWORD = "db.userfinancial.password";
    /** Catalog. */
    private static final String CATALOG = "og-financial";

    private final String _configFile;

    private final String _serverUrl;

    public ServerDatabaseCreator(String configFile, String serverUrl) {
        configFile = StringUtils.trimToNull(configFile);
        serverUrl = StringUtils.trimToNull(serverUrl);
        ArgumentChecker.notNull(configFile, "configFile");
        ArgumentChecker.notNull(serverUrl, "serverUrl");

        _configFile = configFile;
        _serverUrl = serverUrl;
    }

    //-------------------------------------------------------------------------
    /**
     * Main method to run the tool. No arguments are needed.
     * <p>
     * If the command line is empty, the "development" configuration file is started.
     * This file is intended for use with an IDE and a checked out source code tree.
     * It relies on the OG-Web directory being relative to Examples-Simulated in the file
     * system as per a standard checkout of OG-Platform.
     *
     * @param args the arguments, unused
     */
    public static void main(String[] args) { // CSIGNORE
        try {
            CommandLineOption option = new CommandLineOption(args, ServerDatabaseCreator.class);
            String configFile = option.getConfigFile();
            String serverUrl = option.getServerUrl();
            if (configFile != null && serverUrl != null) {
                ServerDatabaseCreator databaseCreator = new ServerDatabaseCreator(configFile, serverUrl);
                databaseCreator.run();
            }
            System.exit(0);
        } catch (final Exception ex) {
            s_logger.error("Caught exception", ex);
            ex.printStackTrace();
            System.exit(1);
        }
    }

    //-------------------------------------------------------------------------
    public void run() throws Exception {
        Resource res = ResourceUtils.createResource(_configFile);
        Properties props = new Properties();
        try (InputStream in = res.getInputStream()) {
            if (in == null) {
                throw new FileNotFoundException(_configFile);
            }
            props.load(in);
        }

        // create main database
        s_logger.info("Creating main database...");
        DbTool dbTool = new DbTool();
        dbTool.setJdbcUrl(Objects.requireNonNull(props.getProperty(KEY_SHARED_URL)));
        dbTool.setUser(props.getProperty(KEY_SHARED_USER_NAME, ""));
        dbTool.setPassword(props.getProperty(KEY_SHARED_PASSWORD, ""));
        dbTool.setCatalog(CATALOG); // ignored, as it is parsed from the url
        dbTool.setCreate(true);
        dbTool.setDrop(true);
        dbTool.setCreateTables(true);
        dbTool.execute();

        // create user database
        s_logger.info("Creating user database...");
        DbTool dbToolUser = new DbTool();
        dbToolUser.setJdbcUrl(Objects.requireNonNull(props.getProperty(KEY_USERFINANCIAL_URL)));
        dbToolUser.setUser(props.getProperty(KEY_USERFINANCIAL_USER_NAME, ""));
        dbToolUser.setPassword(props.getProperty(KEY_USERFINANCIAL_PASSWORD, ""));
        dbToolUser.setCatalog(CATALOG); // ignored, as it is parsed from the url
        dbToolUser.setCreate(true);
        dbToolUser.setDrop(true);
        dbToolUser.setCreateTables(true);
        dbToolUser.execute();

        // populate the database
        s_logger.info("Populating main database...");
        ServerDatabasePopulator populator = new ServerDatabasePopulator(_configFile,
                new DatabasePopulatorTool(_serverUrl));
        populator.run();
        s_logger.info("Successfully created server databases");
    }

}