com.linkedin.databus.bootstrap.utils.BootstrapDbControlMain.java Source code

Java tutorial

Introduction

Here is the source code for com.linkedin.databus.bootstrap.utils.BootstrapDbControlMain.java

Source

package com.linkedin.databus.bootstrap.utils;
/*
 *
 * Copyright 2013 LinkedIn Corp. All rights reserved
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
*/

import java.io.IOException;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Properties;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.log4j.Logger;

import com.linkedin.databus.bootstrap.common.BootstrapConfig;
import com.linkedin.databus.bootstrap.common.BootstrapConn;
import com.linkedin.databus.bootstrap.common.BootstrapDBMetaDataDAO;
import com.linkedin.databus.bootstrap.common.BootstrapReadOnlyConfig;
import com.linkedin.databus.core.util.ConfigLoader;
import com.linkedin.databus2.core.DatabusException;
import com.linkedin.databus2.core.container.netty.ServerContainer;

public class BootstrapDbControlMain {
    public static final Logger LOG = Logger.getLogger(BootstrapDbControlMain.class.getName());

    public static final String ACTION_OPTION_NAME = "action";
    public static final char ACTION_OPTION_CHAR = 'a';
    public static final String SRCID_OPTION_NAME = "srcid";
    public static final char SRCID_OPTION_CHAR = 'S';

    public static enum Action {
        CREATE_LOG_TABLE, CREATE_TAB_TABLE;

        public static String generateActionList() {
            return Arrays.toString(new Action[] { CREATE_LOG_TABLE, CREATE_TAB_TABLE });
        }
    }

    public static class Cli extends ServerContainer.Cli {
        private Action _action = null;
        private Integer _srcId = null;

        public Cli() {
            super();
        }

        public Cli(String usage) {
            super(usage);
        }

        @Override
        public void processCommandLineArgs(String[] cliArgs) throws IOException, DatabusException {
            super.processCommandLineArgs(cliArgs);
            CommandLine cmdLine = getCmdLine();

            if (!cmdLine.hasOption(ACTION_OPTION_CHAR)) {
                throw new DatabusException("action expected; see --help for usage");
            }
            String actionString = cmdLine.getOptionValue(ACTION_OPTION_CHAR).toUpperCase();

            try {
                _action = Action.valueOf(actionString);
            } catch (IllegalArgumentException e) {
                throw new DatabusException("invalid action: " + actionString);
            }

            if (_action.equals(Action.CREATE_LOG_TABLE) || _action.equals(Action.CREATE_TAB_TABLE)) {
                if (!cmdLine.hasOption(SRCID_OPTION_CHAR)) {
                    throw new DatabusException("srcid expected; see --help for usage");
                }
                String srcidString = cmdLine.getOptionValue(SRCID_OPTION_CHAR);

                try {
                    _srcId = Integer.parseInt(srcidString);
                } catch (NumberFormatException e) {
                    throw new DatabusException("invalid srcid: " + srcidString);
                }
            }
        }

        @SuppressWarnings("static-access")
        @Override
        protected void constructCommandLineOptions() {
            super.constructCommandLineOptions();

            Option actionOption = OptionBuilder.withArgName("action").hasArg().withLongOpt(ACTION_OPTION_NAME)
                    .withDescription("action:" + Action.generateActionList()).create(ACTION_OPTION_CHAR);
            Option srcidOption = OptionBuilder.withArgName("srcid").hasArg().withLongOpt(SRCID_OPTION_NAME)
                    .withDescription("action:").create(SRCID_OPTION_CHAR);

            _cliOptions.addOption(actionOption);
            _cliOptions.addOption(srcidOption);
        }

        public Action getAction() {
            return _action;
        }

        public Integer getSrcId() {
            return _srcId;
        }

    }

    public static void main(String[] args) throws IOException, DatabusException, InstantiationException,
            IllegalAccessException, ClassNotFoundException, SQLException {
        Cli cli = new Cli("java " + BootstrapDbControlMain.class.getSimpleName() + " [options]");
        cli.processCommandLineArgs(args);

        Properties cfgProps = cli.getConfigProps();
        BootstrapConfig cfgBuilder = new BootstrapConfig();
        ConfigLoader<BootstrapReadOnlyConfig> configLoad = new ConfigLoader<BootstrapReadOnlyConfig>(
                "databus.bootstrap.", cfgBuilder);
        configLoad.loadConfig(cfgProps);

        BootstrapReadOnlyConfig cfg = cfgBuilder.build();
        BootstrapConn conn = new BootstrapConn();
        try {
            conn.initBootstrapConn(true, cfg.getBootstrapDBUsername(), cfg.getBootstrapDBPassword(),
                    cfg.getBootstrapDBHostname(), cfg.getBootstrapDBName());
            BootstrapDBMetaDataDAO dao = new BootstrapDBMetaDataDAO(conn, cfg.getBootstrapDBHostname(),
                    cfg.getBootstrapDBUsername(), cfg.getBootstrapDBPassword(), cfg.getBootstrapDBName(), false);
            switch (cli.getAction()) {
            case CREATE_LOG_TABLE:
                dao.createNewLogTable(cli.getSrcId());
                break;
            case CREATE_TAB_TABLE:
                dao.createNewSrcTable(cli.getSrcId());
                break;
            default:
                throw new RuntimeException("unknown action: " + cli.getAction());
            }
        } finally {
            conn.close();
        }
    }

}