/* 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(); } }