/* * Copyright 2012 NGDATA nv * * 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.lilyproject.repository.bulk; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.lilyproject.cli.BaseZkCliTool; import org.lilyproject.util.Version; import org.lilyproject.util.hbase.LilyHBaseSchema; import org.lilyproject.util.hbase.RepoAndTableUtil; /** * Extension point that provides argument parsing for bulk importing. */ public abstract class AbstractBulkImportCliTool extends BaseZkCliTool { private Option pythonMapperPathArg; private Option pythonSymbolArg; private Option repositoryArg; private Option outputTableArg; private Option disableBulkOption; /** * Path to the Python mapping script. */ protected String pythonMapperPath; /** * Python symbol to be used for mapping. */ protected String pythonSymbol; /** * Input path for the bulk import process. */ protected String inputPath; /** * Repository name where output is to be written. */ protected String outputRepository; /** * Repository table where output is to be written. */ protected String outputTable; protected boolean bulkMode; @SuppressWarnings("static-access") public AbstractBulkImportCliTool() { pythonMapperPathArg = OptionBuilder .withDescription("Path to Python mapper file") .withLongOpt("pyfile") .hasArg() .create('p'); pythonSymbolArg = OptionBuilder .withDescription("Python mapper symbol") .withLongOpt("symbol") .hasArg() .create('s'); repositoryArg = OptionBuilder .withDescription("Repository name (defaults to default repository)") .withLongOpt("repository") .hasArg() .create('r'); outputTableArg = OptionBuilder .withDescription("Repository table name (defaults to record)") .withLongOpt("table") .hasArg() .create('t'); disableBulkOption = OptionBuilder .withDescription("disable bulk mode") .withLongOpt("no_bulk") .create('n'); } @Override protected String getVersion() { return Version.readVersion("org.lilyproject", getCmdName()); } @Override public List<Option> getOptions() { List<Option> options = super.getOptions(); options.add(pythonMapperPathArg); options.add(pythonSymbolArg); options.add(repositoryArg); options.add(outputTableArg); options.add(disableBulkOption); return options; } @Override protected int processOptions(CommandLine cmd) throws Exception { int status = super.processOptions(cmd); if (status != 0) { return status; } if (cmd.getArgs().length == 0) { System.err.println("No input file given"); return 1; } inputPath = cmd.getArgs()[0]; if (!cmd.hasOption(pythonMapperPathArg.getOpt())) { System.err.println("No python mapper file supplied"); return 1; } else { pythonMapperPath = cmd.getOptionValue(pythonMapperPathArg.getOpt()); } if (!cmd.hasOption(pythonSymbolArg.getOpt())) { System.err.println("No mapper symbol supplied"); return 1; } else { pythonSymbol = cmd.getOptionValue(pythonSymbolArg.getOpt()); } if (cmd.hasOption(outputTableArg.getOpt())) { outputTable = cmd.getOptionValue(outputTableArg.getOpt()); } outputTable = outputTable == null ? LilyHBaseSchema.Table.RECORD.name : outputTable; if (cmd.hasOption(repositoryArg.getOpt())) { outputRepository = cmd.getOptionValue(repositoryArg.getOpt()); } outputRepository = outputRepository == null ? RepoAndTableUtil.DEFAULT_REPOSITORY : outputRepository; bulkMode = !cmd.hasOption(disableBulkOption.getOpt()); return 0; } }