1 // Copyright 2012 Google Inc. All Rights Reserved.
3 package com
.google
.appengine
.tools
.util
;
5 import java
.util
.HashMap
;
10 * A container for the collection of {@link Action Actions} and {@link Option Options} that may be
11 * passed to the {@code AppCfg} command-line tool.
13 * This class is not thread-safe. An instance should only be accessed by one thread at-a-time.
16 public class ActionsAndOptions
{
19 * All {@link Action Actions} in processing order
21 public List
<Action
> actions
;
25 public List
<Option
> options
;
28 * Action names in help-string order
30 public List
<String
> actionNames
;
33 * Option names in help-string order
35 public List
<String
> optionNames
;
38 * General option names in help-string order
40 public List
<String
> generalOptionNames
;
43 * Name to object caches
45 private Map
<String
, Option
> nameToOptionMap
;
46 private Map
<String
, Action
> nameToActionMap
;
49 * After {@link #options} has been set, this method may be invoked to lookup an option by its
52 public Option
getOption(String name
) {
53 if (options
== null) {
54 throw new IllegalStateException("options must be set first");
56 if (nameToOptionMap
== null) {
57 nameToOptionMap
= new HashMap
<String
, Option
>(options
.size() * 2);
58 for (Option option
: options
) {
59 nameToOptionMap
.put(option
.getLongName(), option
);
62 return nameToOptionMap
.get(name
);
67 * After {@link #actions} has been set, this method may be invoked to lookup an option by its
70 public Action
getAction(String name
) {
71 if (actions
== null) {
72 throw new IllegalStateException("actions must be set first");
74 if (nameToActionMap
== null) {
75 nameToActionMap
= new HashMap
<String
, Action
>(actions
.size() * 2);
76 for (Action action
: actions
) {
77 nameToActionMap
.put(action
.getNameString(), action
);
80 return nameToActionMap
.get(name
);