Java tutorial
/* * Copyright 2015 Collective, Inc. * * 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. */ package com.collective.celos.ci.config; import com.collective.celos.*; import org.apache.commons.cli.*; import org.apache.hadoop.fs.Path; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URISyntaxException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CiCommandLineParser { private static final String CLI_TARGET = "target"; private static final String CLI_MODE = "mode"; private static final String CLI_DEPLOY_DIR = "deployDir"; private static final String CLI_WORKFLOW_NAME = "workflowName"; private static final String CLI_TEST_CASES_DIR = "testDir"; private static final String CLI_CELOS_SERVER = "celos"; private static final String CLI_HDFS_ROOT = "hdfsRoot"; private static final String DEFAULT_TEST_CASES_DIR = "src/test/celos-ci"; protected static final String USERNAME_ENV_VAR = "CELOS_CI_USERNAME"; private static final String KEEP_TEMP_DATA = "KEEP_TEMP_DATA"; public CiCommandLine parse(final String[] commandLineArguments) throws Exception { final CommandLineParser cmdLineGnuParser = new GnuParser(); final Options gnuOptions = constructOptionsForParsing(); CommandLine commandLine = cmdLineGnuParser.parse(gnuOptions, commandLineArguments); if (!commandLine.hasOption(CLI_TARGET) || !commandLine.hasOption(CLI_MODE) || !commandLine.hasOption(CLI_WORKFLOW_NAME)) { printHelp(80, 5, 3, true, System.out); throw new RuntimeException("Wrong CelosCi configuration provided"); } String deployDir = commandLine.getOptionValue(CLI_DEPLOY_DIR); String mode = commandLine.getOptionValue(CLI_MODE); String workflowName = commandLine.getOptionValue(CLI_WORKFLOW_NAME); String targetUri = commandLine.getOptionValue(CLI_TARGET); String testCasesDir = commandLine.getOptionValue(CLI_TEST_CASES_DIR, DEFAULT_TEST_CASES_DIR); String hdfsRoot = commandLine.getOptionValue(CLI_HDFS_ROOT, Constants.DEFAULT_HDFS_ROOT); String celosServerUri = commandLine.getOptionValue(CLI_CELOS_SERVER); boolean keepTempData = Boolean.parseBoolean(System.getenv(KEEP_TEMP_DATA)); String userName = System.getenv(USERNAME_ENV_VAR); if (userName == null) { userName = System.getProperty("user.name"); } return new CiCommandLine(targetUri, mode, deployDir, workflowName, testCasesDir, userName, keepTempData, celosServerUri, hdfsRoot); } public Options constructOptionsForHelp() { final Options options = new Options(); options.addOption(CLI_TARGET, CLI_TARGET, true, "Path to target JSON") .addOption(CLI_MODE, CLI_MODE, true, "Mode. Defaults to DEPLOY") .addOption(CLI_DEPLOY_DIR, CLI_DEPLOY_DIR, true, "Deploy directory. Path to workflow you want to deploy") .addOption(CLI_WORKFLOW_NAME, CLI_WORKFLOW_NAME, true, "Workflow JS file name") .addOption(CLI_HDFS_ROOT, CLI_HDFS_ROOT, true, "HDFS root. Defaults to " + Constants.DEFAULT_HDFS_ROOT); return options; } public Options constructOptionsForParsing() { Options options = constructOptionsForHelp(); options.addOption(CLI_CELOS_SERVER, CLI_CELOS_SERVER, true, "Celos Server (for TEST mode. Runs against remote Celos server)") .addOption(CLI_TEST_CASES_DIR, CLI_TEST_CASES_DIR, true, "Test cases dir (for TEST mode)"); return options; } public void printHelp(final int printedRowWidth, final int spacesBeforeOption, final int spacesBeforeOptionDescription, final boolean displayUsage, final OutputStream out) { final String commandLineSyntax = "hadoop jar <celos cd jarname>.jar"; final PrintWriter writer = new PrintWriter(out); final HelpFormatter helpFormatter = new HelpFormatter(); helpFormatter.printHelp(writer, printedRowWidth, commandLineSyntax, null, constructOptionsForHelp(), spacesBeforeOption, spacesBeforeOptionDescription, null, displayUsage); writer.flush(); } }