/* This file is part of Cyclos (www.cyclos.org). A project of the Social Trade Organisation (www.socialtrade.org). Cyclos is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Cyclos is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Cyclos; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package nl.strohalm.cyclos.setup; import java.io.File; import java.io.PrintWriter; import java.util.Locale; import java.util.ResourceBundle; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import org.apache.commons.lang.StringUtils; /** * Handle setup arguments. This is not done in Setup class to avoid it's runtime dependency with Apache Commons CLI * @author luis */ public class Arguments { static Options buildOptions(final Locale locale) { final ResourceBundle bundle = Setup.getResourceBundle(locale); final Options options = new Options(); // help OptionBuilder.withLongOpt("help"); OptionBuilder.hasArg(false); OptionBuilder.withDescription(bundle.getString("arg.help")); options.addOption(OptionBuilder.create('?')); // force OptionBuilder.withLongOpt("force"); OptionBuilder.hasArg(false); OptionBuilder.withDescription(bundle.getString("arg.force")); options.addOption(OptionBuilder.create('f')); // create database OptionBuilder.withLongOpt("database"); OptionBuilder.hasArg(false); OptionBuilder.withDescription(bundle.getString("arg.create-data-base")); options.addOption(OptionBuilder.create('d')); // export script OptionBuilder.withLongOpt("script"); OptionBuilder.hasOptionalArg(); OptionBuilder.withArgName("file"); OptionBuilder.withDescription(bundle.getString("arg.export-script")); options.addOption(OptionBuilder.create('s')); // create basic data OptionBuilder.withLongOpt("basic-data"); OptionBuilder.hasArg(false); OptionBuilder.withDescription(bundle.getString("arg.create-basic-data")); options.addOption(OptionBuilder.create('b')); // create initial data OptionBuilder.withLongOpt("initial-data"); OptionBuilder.hasArg(false); OptionBuilder.withDescription(bundle.getString("arg.create-initial-data")); options.addOption(OptionBuilder.create('i')); // create sms data OptionBuilder.withLongOpt("sms-data"); OptionBuilder.hasArg(false); OptionBuilder.withDescription(bundle.getString("arg.create-sms-data")); options.addOption(OptionBuilder.create('m')); return options; } static Setup buildSetupFromArguments(final Locale locale, final String... args) { CommandLine commandLine = null; final Options options = buildOptions(locale); try { commandLine = new PosixParser().parse(options, args); } catch (final ParseException e) { printHelp(options); } final Setup setup = new Setup(); setup.setCreateDataBase(commandLine.hasOption('d')); final boolean createScript = commandLine.hasOption('s'); String exportTo = StringUtils.trimToNull(commandLine.getOptionValue('s')); if (createScript && exportTo == null) { exportTo = "cyclos.ddl"; } setup.setExportScriptTo(exportTo == null ? null : new File(exportTo)); setup.setCreateInitialData(commandLine.hasOption('i')); setup.setCreateBasicData(commandLine.hasOption('b')); setup.setCreateSmsData(commandLine.hasOption('m')); // Check if help should be printed if (!setup.isValid() || commandLine.hasOption('?')) { printHelp(options); } setup.setForce(commandLine.hasOption('f')); return setup; } static void printHelp(final Options options) { final HelpFormatter formatter = new HelpFormatter(); formatter.defaultSyntaxPrefix = ""; formatter.defaultLongOptPrefix = " --"; final PrintWriter printWriter = new PrintWriter(Setup.getOut()); formatter.printHelp(printWriter, HelpFormatter.DEFAULT_WIDTH, Setup.getResourceBundle().getString("help.header") + ":\n", "", options, HelpFormatter.DEFAULT_LEFT_PAD, HelpFormatter.DEFAULT_DESC_PAD, "", false); printWriter.flush(); System.exit(1); } }