Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.sqoop.shell.utils; import java.util.LinkedList; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.GnuParser; 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.apache.sqoop.common.SqoopException; import org.apache.sqoop.model.MConfig; import org.apache.sqoop.model.MInput; import org.apache.sqoop.model.MInputType; import org.apache.sqoop.shell.core.ShellError; /** * Utilities for automatically creating org.apache.commons.cli.Option objects. */ public class ConfigOptions { /** * This method is used to automatically generate keys * for a particular input. * * @param prefix Prefix to prepend to CLI option keys * @param input * @return */ @SuppressWarnings("rawtypes") public static String getOptionKey(String prefix, MInput input) { return prefix + "-" + input.getName().replace('.', '-'); } /** * This method is used to automatically generate CLI options * for a list of configs. * * @param prefix Prefix to prepend to CLI option keys * @param configs Forms to get options for * @return */ public static List<Option> getConfigsOptions(String prefix, List<MConfig> configs) { List<Option> options = new LinkedList<Option>(); for (MConfig config : configs) { List<Option> configOptions = getConfigOptions(prefix, config); options.addAll(configOptions); } return options; } /** * This method is used to automatically generate CLI options * for a particular config. * * @param prefix Prefix to prepend to CLI option keys * @param config Config to get options for * @return List<Option> */ @SuppressWarnings({ "rawtypes", "static-access" }) public static List<Option> getConfigOptions(String prefix, MConfig config) { List<Option> options = new LinkedList<Option>(); for (MInput input : config.getInputs()) { if (input.getType().equals(MInputType.BOOLEAN)) { options.add(OptionBuilder.withLongOpt(getOptionKey(prefix, input)).create()); } else { options.add(OptionBuilder.withLongOpt(getOptionKey(prefix, input)).hasArg().create()); } } return options; } /** * Parses command line options. * * @param options parse arglist against these. * @param start beginning index in arglist. * @param arglist arguments to parse. * @param stopAtNonOption stop parsing when nonoption found in arglist. * @return CommandLine object */ public static CommandLine parseOptions(Options options, int start, List<String> arglist, boolean stopAtNonOption) { String[] args = arglist.subList(start, arglist.size()).toArray(new String[arglist.size() - start]); CommandLineParser parser = new GnuParser(); CommandLine line; try { line = parser.parse(options, args, stopAtNonOption); } catch (ParseException e) { throw new SqoopException(ShellError.SHELL_0003, e.getMessage(), e); } return line; } }