/******************************************************************************* * 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 java.io.PrintStream; import org.apache.commons.cli.CommandLine; 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.print.PrintUtils; /** * BuildML CLI Command class that implements the "show-pkg" command. * * @author "Peter Smith <psmith@arapiki.com>" */ public class CliCommandShowPkg implements ICliCommand { /*=====================================================================================* * PUBLIC METHODS *=====================================================================================*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getLongDescription() */ @Override public String getLongDescription() { return CliUtils.genLocalizedMessage("#include commands/show-pkg.txt"); } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getName() */ @Override public String getName() { return "show-pkg"; } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.main.ICliCommand#getOptions() */ @Override public Options getOptions() { return new Options(); } /*-------------------------------------------------------------------------------------*/ /* (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 "Show the packages defined 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) { /* no options */ } /*-------------------------------------------------------------------------------------*/ /* (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."); IPackageMgr pkgMgr = buildStore.getPackageMgr(); int rootId = pkgMgr.getRootFolder(); invokeHelper(System.out, pkgMgr, rootId, 0); } /*=====================================================================================* * PRIVATE METHODS *=====================================================================================*/ /** * A helper function for displaying a package folder hierarchy. This method is called * recursively to display the package tree. * * @param out The PrintStream on which the tree should be displayed. * @param pkgMgr The PackageMgr that owns the packages. * @param thisId The current package/folder ID (at this level of the tree). * @param indent The indent level. */ private void invokeHelper(PrintStream out, IPackageMgr pkgMgr, int thisId, int indent) { String name = pkgMgr.getName(thisId); boolean isFolder = pkgMgr.isFolder(thisId); PrintUtils.indent(out, indent); if (isFolder) { out.println(name + "/"); Integer children[] = pkgMgr.getFolderChildren(thisId); for (int i = 0; i < children.length; i++) { invokeHelper(out, pkgMgr, children[i], indent + 2); } } else { out.println(name); } } /*-------------------------------------------------------------------------------------*/ }