blob: 0bcf13668ebb1b5d4a8faa2c415f87e6b15ada87 [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* 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 com.android.manifmerger;
import com.android.common.utils.ILogger;
import com.android.util.CommandLineParser;
import java.util.List;
/**
* Specific command-line flags for the {@link com.android.manifmerger.ManifestMerger}.
*/
class ArgvParser extends CommandLineParser {
/*
* Steps needed to add a new action:
* - Each action is defined as a "verb object" followed by parameters.
* - Either reuse a VERB_ constant or define a new one.
* - Either reuse an OBJECT_ constant or define a new one.
* - Add a new entry to mAction with a one-line help summary.
* - In the constructor, add a define() call for each parameter (either mandatory
* or optional) for the given action.
*/
public final static String VERB_MERGE = "merge"; //$NON-NLS-1$
public static final String KEY_OUT = "out"; //$NON-NLS-1$
public static final String KEY_MAIN = "main"; //$NON-NLS-1$
public static final String KEY_LIBS = "libs"; //$NON-NLS-1$
/**
* Action definitions for ManifestMerger command line.
* <p/>
* This list serves two purposes: first it is used to know which verb/object
* actions are acceptable on the command-line; second it provides a summary
* for each action that is printed in the help.
* <p/>
* Each entry is a string array with:
* <ul>
* <li> the verb.
* <li> an object (use #NO_VERB_OBJECT if there's no object).
* <li> a description.
* <li> an alternate form for the object (e.g. plural).
* </ul>
*/
private final static String[][] ACTIONS = {
{ VERB_MERGE, NO_VERB_OBJECT,
"Merge two or more manifests." },
};
public ArgvParser(ILogger logger) {
super(logger, ACTIONS);
// The following defines the parameters of the actions defined in mAction.
// --- merge manifest ---
define(Mode.STRING, true,
VERB_MERGE, NO_VERB_OBJECT, "o", KEY_OUT, //$NON-NLS-1$
"Output path (where to write the merged manifest). Use - for stdout.", null);
define(Mode.STRING, true,
VERB_MERGE, NO_VERB_OBJECT, "1", KEY_MAIN, //$NON-NLS-1$
"Path of the main manifest (what to merge *into*)", null);
define(Mode.STRING_ARRAY, true,
VERB_MERGE, NO_VERB_OBJECT, "2", KEY_LIBS, //$NON-NLS-1$
"Paths of library manifests to be merged into the main one.",
null);
}
@Override
public boolean acceptLackOfVerb() {
return true;
}
// -- some helpers for generic action flags
/** Helper to retrieve the --out value. */
public String getParamOut() {
return (String) getValue(null, null, KEY_OUT);
}
/** Helper to retrieve the --main value. */
public String getParamMain() {
return (String) getValue(null, null, KEY_MAIN);
}
/**
* Helper to retrieve the --libs values.
*/
public String[] getParamLibs() {
Object v = getValue(null, null, KEY_LIBS);
if (v instanceof List<?>) {
List<?> a = (List<?>) v;
return a.toArray(new String[a.size()]);
}
return null;
}
}