/* * Copyright 2014-2016 CyberVision, 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 org.kaaproject.kaa.server.common.thrift.cli.client; import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; /** * CLI client OptionsProcessor. */ public class OptionsProcessor { /** * The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(OptionsProcessor.class); /** * The CLI options. */ private final Options options = new Options(); /** * The command line. */ private org.apache.commons.cli.CommandLine commandLine; /** * Instantiates a new CLI options processor. */ @SuppressWarnings("static-access") public OptionsProcessor() { // -e 'quoted-query-string' options.addOption(OptionBuilder.hasArg() .withArgName("quoted-command-string") .withDescription("Remote command line").create('e')); // -h hostname/ippaddress options.addOption(OptionBuilder.hasArg().withArgName("hostname") .withDescription("connecting to Thrift Server on remote host") .create('h')); // -p port options.addOption(OptionBuilder.hasArg().withArgName("port") .withDescription("connecting to Thrift Server on port number") .create('p')); // -c 'thrift-config' options.addOption(OptionBuilder.hasArg().withArgName("thrift-config") .withDescription("Thrift property file").create('c')); // [-H|--help] options.addOption(new Option("H", "help", false, "Print help information")); } /** * Parses the command line arguments. * * @param argv the command line arguments * @return true, if successful */ public boolean parse(String[] argv) { try { commandLine = new GnuParser().parse(options, argv); } catch (ParseException ex) { System.err.println(ex.getMessage()); //NOSONAR printUsage(); return false; } return true; } /** * Process CLI Client Session State. * * @param ss the CLI Client Session State * @return true, if successful */ public boolean process(CliSessionState ss) { if (commandLine.hasOption('H')) { printUsage(); return false; } ss.execString = commandLine.getOptionValue('e'); if (commandLine.hasOption('c')) { String propertyFile = commandLine.getOptionValue('c'); File file = new File(propertyFile); Properties props = new Properties(); FileInputStream fis; try { fis = new FileInputStream(file); } catch (FileNotFoundException ex) { LOG.error("Exception catched: ", ex); ss.out.println("Thrift property file '" + propertyFile + "' does not exists."); return false; } try { props.load(fis); ss.host = props.getProperty("thrift_host", "localhost"); ss.port = Integer.parseInt(props.getProperty("thrift_port", "9090")); } catch (IOException ex) { ss.out.println("Unable to read property file '" + propertyFile + "'. Error: " + ex); return false; } } else { ss.host = (String) commandLine.getOptionValue('h'); ss.port = Integer.parseInt((String) commandLine.getOptionValue('p', "9090")); } return true; } /** * Prints the usage. */ private void printUsage() { new HelpFormatter().printHelp("thriftCli", options); } }