001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: /* $Id:$ */
020:
021: package org.apache.lenya.cms.cocoon.components.modules.input;
022:
023: import org.apache.avalon.framework.configuration.ConfigurationException;
024: import org.apache.avalon.framework.parameters.ParameterException;
025: import org.apache.avalon.framework.parameters.Parameters;
026:
027: /**
028: * Input module parameter class.
029: * Parses input module parameters and offers accessors for the parameters.
030: * The parameters are expected to be separated by ":".
031: */
032: public class InputModuleParameters {
033:
034: protected final static char PARAM_SEPARATOR = ':';
035:
036: protected Parameters params;
037: protected final String[] paramList;
038:
039: /**
040: * Parse input module parameters.
041: * @param parameters Parameter to be parsed.
042: * @param paramList List of expected parameters.
043: * @param minParams Minimum number of parameters expected.
044: * @throws ConfigurationException if there is an error parsing the parameters.
045: */
046: public InputModuleParameters(String parameters,
047: final String[] paramList, int minParams)
048: throws ConfigurationException {
049: params = new Parameters();
050: this .paramList = (String[]) paramList.clone();
051: parseParameters(parameters, minParams);
052: }
053:
054: /**
055: * Parse parameters according to the parameter list passed.
056: * @param parameters
057: * @param minParams Minimum number of parameters.
058: * @return Parameters object initialized with parsed parameters.
059: * @throws ConfigurationException
060: */
061: protected Parameters parseParameters(String parameters,
062: int minParams) throws ConfigurationException {
063: // Parse parameters
064: int start = 0;
065: int end = parameters.indexOf(PARAM_SEPARATOR);
066: for (int i = 0; i < paramList.length; i++) {
067: if (end != -1) {
068: String paramToken = parameters.substring(start, end);
069: params.setParameter(paramList[i], paramToken);
070: start = end + 1;
071: end = parameters.indexOf(PARAM_SEPARATOR, start + 1);
072: } else {
073: if ((i + 1) < minParams) {
074: // A mandatory parameter is missing.
075: throw new ConfigurationException(
076: "Error parsing parameters: mandatory parameter '"
077: + paramList[i] + "' not found ["
078: + parameters + "]");
079: } else if (i == 0) {
080: // Zero or one parameter passed.
081: if (parameters.length() != 0) {
082: params.setParameter(paramList[i], parameters);
083: }
084: break;
085: } else {
086: // All parameters parsed except the last one.
087: String paramToken = parameters.substring(start);
088: if (paramToken.length() != 0) {
089: params.setParameter(paramList[i], paramToken);
090: }
091: break;
092: }
093: }
094: }
095: return params;
096: }
097:
098: /**
099: * Get a parameter.
100: * @param param Name of requested parameter.
101: * @return Requested parameter.
102: * @throws ParameterException if the specified parameter cannot be found
103: */
104: public String getParameter(String param) throws ParameterException {
105: return params.getParameter(param);
106: }
107:
108: /**
109: * Does a parameter with given name exists?
110: * @param param Parameter name.
111: * @return True if parameters exists, otherwise false.
112: */
113: public boolean isParameter(String param) {
114: return params.isParameter(param);
115: }
116: }
|