/******************************************************************************* * Copyright (c) 2012 Arapiki Solutions Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * "Peter Smith <psmith@arapiki.com>" - initial API and * implementation and/or initial documentation *******************************************************************************/ package com.buildml.main.commands; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import com.buildml.main.CliUtils; import com.buildml.main.ICliCommand; import com.buildml.model.IBuildStore; import com.buildml.model.IPackageMgr; import com.buildml.utils.errors.ErrorCode; /** * BuildML CLI Command class that implements the "add-pkg" command. * * @author "Peter Smith <psmith@arapiki.com>" */ public class CliCommandAddPkg implements ICliCommand { /*=====================================================================================* * FIELDS/TYPES *=====================================================================================*/ /** Set if we should show create a folder (not just a package) */ protected static boolean optionAddFolder = false; /*=====================================================================================* * PUBLIC METHODS *=====================================================================================*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getLongDescription() */ @Override public String getLongDescription() { return CliUtils.genLocalizedMessage("#include commands/add-pkg.txt"); } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getName() */ @Override public String getName() { return "add-pkg"; } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getOptions() */ @Override public Options getOptions() { Options opts = new Options(); /* add the --folder option */ Option addFolderOpt = new Option("f", "folder", false, "Create a folder."); opts.addOption(addFolderOpt); return opts; } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getParameterDescription() */ @Override public String getParameterDescription() { return "[ <pkg-name> | <folder-name> ]"; } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getShortDescription() */ @Override public String getShortDescription() { return "Add a new (empty) package, or a new folder."; } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#processOptions(org.apache.commons.cli.CommandLine) */ @Override public void processOptions(IBuildStore buildStore, CommandLine cmdLine) { optionAddFolder = cmdLine.hasOption("folder"); } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#invoke(com.buildml.model.BuildStore, java.lang.String[]) */ @Override public void invoke(IBuildStore buildStore, String buildStorePath, String[] args) { String objName = optionAddFolder ? "folder" : "package"; CliUtils.validateArgs(getName(), args, 1, 1, "You must provide a " + objName + " name."); IPackageMgr pkgMgr = buildStore.getPackageMgr(); String pkgName = args[0]; int pkgId; if (optionAddFolder) { pkgId = pkgMgr.addFolder(pkgName); } else { pkgId = pkgMgr.addPackage(pkgName); } /* was the syntax of the name valid? */ if (pkgId == ErrorCode.INVALID_NAME){ CliUtils.reportErrorAndExit("Invalid " + objName + " name " + pkgName + "."); } /* was the name already defined in the buildstore? */ if (pkgId == ErrorCode.ALREADY_USED){ CliUtils.reportErrorAndExit("The " + objName + " " + pkgName + " is already defined."); } /* all is good */ System.out.println("New " + objName + " " + pkgName + " added."); } /*-------------------------------------------------------------------------------------*/ }