Inital commit
This commit is contained in:
@@ -0,0 +1,300 @@
|
||||
/* Copyright (c) 2008 Google Inc.
|
||||
*
|
||||
* 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 sample.contacts;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* Keeps structured command line parameters for ContactsExample program.
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
public class ContactsExampleParameters {
|
||||
/**
|
||||
* Actions that can be executed with the sample application.
|
||||
* They are all lowercase because they are passed as parameters
|
||||
* and then converted using valueOf() method.
|
||||
*/
|
||||
public enum Actions {
|
||||
LIST,
|
||||
QUERY,
|
||||
ADD,
|
||||
DELETE,
|
||||
UPDATE;
|
||||
}
|
||||
|
||||
private static final String DEFAULT_FEED = "https://www.google.com/m8/feeds/";
|
||||
private static final String DEFAULT_PROJECTION = "thin";
|
||||
|
||||
/**
|
||||
* Keeps map of parameter -> value.
|
||||
* Note! Tree Map is used to keep sequence of fields.
|
||||
*/
|
||||
private SortedMap<String, String> parameterValueMap =
|
||||
new TreeMap<String,String>();
|
||||
|
||||
/**
|
||||
* List of command line parameters likely to be the description of an
|
||||
* element.
|
||||
* Those parameters are added to the list, what are not recognized as a valid
|
||||
* command line argument (nor an action or option).
|
||||
* These parameters are later parsed by {@link ElementParser} and processed by
|
||||
* {@link ElementHelper}.
|
||||
*/
|
||||
private List<String> elementDesc = new LinkedList<String>();
|
||||
|
||||
/**
|
||||
* Stores names of parameters.
|
||||
*/
|
||||
public enum ParameterNames {
|
||||
SCRIPT("script"),
|
||||
ACTION("action"),
|
||||
BASE_URL("base-url"),
|
||||
USERNAME("username"),
|
||||
PASSWORD("password"),
|
||||
CONTACTFEED("contactfeed"),
|
||||
GROUPFEED("groupfeed"),
|
||||
SHOWDELETED("showdeleted"),
|
||||
REQUIRE_ALL_DELETED("require-all-deleted"),
|
||||
UPDATED_MIN("updated-min"),
|
||||
OREDERBY("orderby"),
|
||||
SORTORDER("sortorder"),
|
||||
MAX_RESULTS("max-results"),
|
||||
START_INDEX("start-index"),
|
||||
HELP("help"),
|
||||
PROJECTION("projection"),
|
||||
VERBOSE("verbose"),
|
||||
ID("id"),
|
||||
GROUP("querygroupid"),
|
||||
;
|
||||
|
||||
private final String parameterName;
|
||||
|
||||
ParameterNames(String parameterName) {
|
||||
this.parameterName = parameterName;
|
||||
}
|
||||
|
||||
public String getParameterName() {
|
||||
return parameterName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor used in case script parameter is used.
|
||||
*
|
||||
* @param commandLineParams command line parameters
|
||||
* @param scriptLine line read from a file
|
||||
*/
|
||||
public ContactsExampleParameters(ContactsExampleParameters commandLineParams,
|
||||
String scriptLine) {
|
||||
parameterValueMap.putAll(commandLineParams.parameterValueMap);
|
||||
elementDesc.addAll(commandLineParams.elementDesc);
|
||||
fillFromArguments(scriptLine.split(" "));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor used when no script is passed at command line
|
||||
* only the command line parameters are used.
|
||||
*
|
||||
* @param arguments arguments in form of array
|
||||
*/
|
||||
public ContactsExampleParameters(String arguments[]) {
|
||||
fillFromArguments(arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse arguments.
|
||||
*
|
||||
* @param arguments arguments in form of array
|
||||
*/
|
||||
private void fillFromArguments(String[] arguments) {
|
||||
for (String string : arguments) {
|
||||
if (!string.startsWith("--")) {
|
||||
throw new IllegalArgumentException("illegal parameter: " + string);
|
||||
}
|
||||
String param = string.substring(2);
|
||||
String params[] = param.split("=", 2);
|
||||
boolean found = false;
|
||||
for (ParameterNames parameterName : ParameterNames.values()) {
|
||||
String name = parameterName.getParameterName().toLowerCase();
|
||||
if (name.equals(params[0])) {
|
||||
if (params.length == 1) {
|
||||
parameterValueMap.put(params[0], "");
|
||||
} else {
|
||||
parameterValueMap.put(params[0], params[1]);
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
elementDesc.add(string);
|
||||
}
|
||||
}
|
||||
verifyAllParameters();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if we understand all parameters.
|
||||
*
|
||||
* @throws IllegalArgumentException in case there
|
||||
* is a parameter which is not expected.
|
||||
*/
|
||||
private void verifyAllParameters() {
|
||||
for (String parameter : parameterValueMap.keySet()) {
|
||||
verifyParameter(parameter);
|
||||
}
|
||||
}
|
||||
|
||||
private void verifyParameter(String name) {
|
||||
for (ParameterNames parameter : ParameterNames.values()) {
|
||||
if (name.equals(parameter.getParameterName())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(
|
||||
"Parameter " + name + " is not correct.");
|
||||
}
|
||||
|
||||
String getParameter(ParameterNames parameters) {
|
||||
return parameterValueMap.get(parameters.getParameterName());
|
||||
}
|
||||
|
||||
String getScript() {
|
||||
return getParameter(ParameterNames.SCRIPT);
|
||||
}
|
||||
|
||||
Actions getAction() {
|
||||
String actionString = getParameter(ParameterNames.ACTION);
|
||||
if (actionString == null) {
|
||||
return null;
|
||||
}
|
||||
return Actions.valueOf(actionString.toUpperCase());
|
||||
}
|
||||
|
||||
String getBaseUrl() {
|
||||
String url = getParameter(ParameterNames.BASE_URL);
|
||||
if (url == null) {
|
||||
url = DEFAULT_FEED;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
String getUserName() {
|
||||
return getParameter(ParameterNames.USERNAME);
|
||||
}
|
||||
|
||||
String getPassword() {
|
||||
return getParameter(ParameterNames.PASSWORD);
|
||||
}
|
||||
|
||||
boolean isContactFeed() {
|
||||
return getParameter(ParameterNames.CONTACTFEED) != null;
|
||||
}
|
||||
|
||||
boolean isGroupFeed() {
|
||||
return getParameter(ParameterNames.GROUPFEED) != null;
|
||||
}
|
||||
|
||||
boolean isShowDeleted() {
|
||||
return getParameter(ParameterNames.SHOWDELETED) != null;
|
||||
}
|
||||
|
||||
String getRequireAllDeleted() {
|
||||
return getParameter(ParameterNames.REQUIRE_ALL_DELETED);
|
||||
}
|
||||
|
||||
String getUpdatedMin() {
|
||||
return getParameter(ParameterNames.UPDATED_MIN);
|
||||
}
|
||||
|
||||
String getOrderBy() {
|
||||
return getParameter(ParameterNames.OREDERBY);
|
||||
}
|
||||
|
||||
String getSortorder() {
|
||||
return getParameter(ParameterNames.SORTORDER);
|
||||
}
|
||||
|
||||
Integer getMaxResults() {
|
||||
String maxResString = getParameter(ParameterNames.MAX_RESULTS);
|
||||
if (maxResString != null) {
|
||||
Integer val = Integer.parseInt(maxResString);
|
||||
if (val.intValue() < 1) {
|
||||
throw new RuntimeException(
|
||||
ParameterNames.MAX_RESULTS + " should be > 0" );
|
||||
}
|
||||
return val;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Integer getStartIndex() {
|
||||
String startIndexString = getParameter(ParameterNames.START_INDEX);
|
||||
if (startIndexString != null) {
|
||||
Integer val = Integer.parseInt(startIndexString);
|
||||
if (val.intValue() < 1) {
|
||||
throw new RuntimeException(
|
||||
ParameterNames.START_INDEX + " should be > 0" );
|
||||
}
|
||||
return val;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean isHelp() {
|
||||
return (getParameter(ParameterNames.HELP) != null);
|
||||
}
|
||||
|
||||
boolean isVerbose() {
|
||||
return (getParameter(ParameterNames.VERBOSE) != null);
|
||||
}
|
||||
|
||||
String getId() {
|
||||
return getParameter(ParameterNames.ID);
|
||||
}
|
||||
|
||||
void setId(String id) {
|
||||
parameterValueMap.put(ParameterNames.ID.getParameterName(), id);
|
||||
}
|
||||
|
||||
String getProjection() {
|
||||
String projection = getParameter(ParameterNames.PROJECTION);
|
||||
if (projection == null) {
|
||||
projection = DEFAULT_PROJECTION;
|
||||
}
|
||||
return projection;
|
||||
}
|
||||
|
||||
String getGroup() {
|
||||
return getParameter(ParameterNames.GROUP);
|
||||
}
|
||||
|
||||
List<String> getElementDesc() {
|
||||
return elementDesc;
|
||||
}
|
||||
|
||||
int numberOfParameters() {
|
||||
return parameterValueMap.size();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user