/*******************************************************************************
* 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.main.CliUtils.DisplayWidth;
import com.buildml.model.IActionMgr;
import com.buildml.model.IBuildStore;
import com.buildml.model.types.ActionSet;
/**
* BuildML CLI Command class that implements the "show-actions" command.
*
* @author "Peter Smith <psmith@arapiki.com>"
*/
public class CliCommandShowActions implements ICliCommand {
/*=====================================================================================*
* FIELDS/TYPES
*=====================================================================================*/
/** Set if we should show package membership when displaying reports. */
protected static boolean optionShowPkgs = false;
/** Set if we want short output. */
protected static boolean optionShort = false;
/** Set if we want long output. */
protected static boolean optionLong = false;
/** The output format of the report (ONE_LINE, WRAPPED, NOT_WRAPPED). */
protected DisplayWidth outputFormat = DisplayWidth.WRAPPED;
/** The ActionSet used to filter our results (if -f/--filter is used). */
protected ActionSet filterActionSet = null;
/*=====================================================================================*
* PUBLIC METHODS
*=====================================================================================*/
/* (non-Javadoc)
* @see com.buildml.main.ICliCommand#getLongDescription()
*/
@Override
public String getLongDescription() {
return CliUtils.genLocalizedMessage("#include commands/show-actions.txt");
}
/*-------------------------------------------------------------------------------------*/
/* (non-Javadoc)
* @see com.buildml.main.ICliCommand#getName()
*/
@Override
public String getName() {
return "show-actions";
}
/*-------------------------------------------------------------------------------------*/
/* (non-Javadoc)
* @see com.buildml.main.ICliCommand#getOptions()
*/
@Override
public Options getOptions() {
Options opts = new Options();
/* add the --show-pkgs option */
Option showPkgsOpt = new Option("p", "show-pkgs", false, "Show the package of each action.");
opts.addOption(showPkgsOpt);
/* add the -s/--short option */
Option shortOpt = new Option("s", "short", false, "Provide abbreviated output.");
opts.addOption(shortOpt);
/* add the -l/--long option */
Option longOpt = new Option("l", "long", false, "Provide detailed/long output.");
opts.addOption(longOpt);
/* add the -f/--filter option */
Option filterOpt = new Option("f", "filter", true, "Action-specs used to filter the output.");
filterOpt.setArgName("action-spec:...");
opts.addOption(filterOpt);
return opts;
}
/*-------------------------------------------------------------------------------------*/
/* (non-Javadoc)
* @see com.buildml.main.ICliCommand#getParameterDescription()
*/
@Override
public String getParameterDescription() {
return "";
}
/*-------------------------------------------------------------------------------------*/
/* (non-Javadoc)
* @see com.buildml.main.ICliCommand#getShortDescription()
*/
@Override
public String getShortDescription() {
return "List all actions in the build system.";
}
/*-------------------------------------------------------------------------------------*/
/* (non-Javadoc)
* @see com.buildml.main.ICliCommand#processOptions(org.apache.commons.cli.CommandLine)
*/
@Override
public void processOptions(IBuildStore buildStore, CommandLine cmdLine) {
optionShort = cmdLine.hasOption("short");
optionLong = cmdLine.hasOption("long");
optionShowPkgs = cmdLine.hasOption("show-pkgs");
/* do we want short or long command output? We can't have both */
if (optionShort && optionLong) {
CliUtils.reportErrorAndExit("Can't select --short and --long in the same command.");
}
outputFormat = optionShort ? DisplayWidth.ONE_LINE :
optionLong ? DisplayWidth.NOT_WRAPPED : DisplayWidth.WRAPPED;
/* fetch the subset of actions we should filter-in */
IActionMgr actionMgr = buildStore.getActionMgr();
String filterInString = cmdLine.getOptionValue("f");
if (filterInString != null) {
filterActionSet = CliUtils.getCmdLineActionSet(actionMgr, filterInString);
if (filterActionSet != null) {
filterActionSet.populateWithParents();
}
}
}
/*-------------------------------------------------------------------------------------*/
/* (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) {
CliUtils.validateArgs(getName(), args, 0, 0, "No arguments expected.");
/*
* Display the selected action set.
*/
CliUtils.printActionSet(System.out, buildStore, null,
filterActionSet, outputFormat, optionShowPkgs);
}
/*-------------------------------------------------------------------------------------*/
}