001: package org.apache.turbine.util.parser;
002:
003: /*
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: import org.apache.commons.configuration.Configuration;
023:
024: import org.apache.commons.logging.Log;
025: import org.apache.commons.logging.LogFactory;
026:
027: import org.apache.commons.lang.StringUtils;
028:
029: import org.apache.turbine.services.TurbineServices;
030:
031: /**
032: * Static helpers for folding fields to upper or lower case
033: *
034: * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
035: * @version $Id: ParserUtils.java 534527 2007-05-02 16:10:59Z tv $
036: */
037:
038: public abstract class ParserUtils {
039: /** Property for setting the URL folding value */
040: public static final String URL_CASE_FOLDING_KEY = "url.case.folding";
041:
042: /** No folding */
043: public static final String URL_CASE_FOLDING_NONE_VALUE = "none";
044:
045: /** Fold to lower case */
046: public static final String URL_CASE_FOLDING_LOWER_VALUE = "lower";
047:
048: /** Fold to upper case */
049: public static final String URL_CASE_FOLDING_UPPER_VALUE = "upper";
050:
051: /** No folding set */
052: private static final int URL_CASE_FOLDING_UNSET = 0;
053:
054: /** Folding set to "no folding" */
055: public static final int URL_CASE_FOLDING_NONE = 1;
056:
057: /** Folding set to "lowercase" */
058: public static final int URL_CASE_FOLDING_LOWER = 2;
059:
060: /** Folding set to "uppercase" */
061: public static final int URL_CASE_FOLDING_UPPER = 3;
062:
063: /** Logging */
064: private static Log log = LogFactory.getLog(ParserUtils.class);
065:
066: /** The folding from the properties */
067: private static int folding = URL_CASE_FOLDING_UNSET;
068:
069: /**
070: * Convert a String value according to the url.case.folding property.
071: *
072: * @param value the String to convert
073: *
074: * @return a new String.
075: *
076: */
077: public static String convertAndTrim(String value) {
078: return convertAndTrim(value, getUrlFolding());
079: }
080:
081: /**
082: * A static version of the convert method, which
083: * trims the string data and applies the conversion specified in
084: * the property given by URL_CASE_FOLDING. It returns a new
085: * string so that it does not destroy the value data.
086: *
087: * @param value A String to be processed.
088: * @return A new String converted to lowercase and trimmed.
089: */
090: public static String convertAndTrim(String value, int fold) {
091: String tmp = null;
092:
093: if (value != null) {
094: tmp = value.trim();
095:
096: switch (fold) {
097: case URL_CASE_FOLDING_NONE: {
098: break;
099: }
100: case URL_CASE_FOLDING_LOWER: {
101: tmp = tmp.toLowerCase();
102: break;
103: }
104: case URL_CASE_FOLDING_UPPER: {
105: tmp = tmp.toUpperCase();
106: break;
107: }
108: default: {
109: log.error("Passed " + fold
110: + " as fold rule, which is illegal!");
111: break;
112: }
113: }
114: }
115: return tmp;
116: }
117:
118: /**
119: * Gets the folding value from the properties
120: *
121: * @return The current Folding Value
122: */
123: public static int getUrlFolding() {
124: if (folding == URL_CASE_FOLDING_UNSET) {
125: Configuration conf = TurbineServices.getInstance()
126: .getConfiguration();
127: String foldString = conf.getString(URL_CASE_FOLDING_KEY,
128: URL_CASE_FOLDING_NONE_VALUE).toLowerCase();
129:
130: folding = URL_CASE_FOLDING_NONE;
131:
132: log.debug("Setting folding from " + foldString);
133: if (StringUtils.isNotEmpty(foldString)) {
134: if (foldString.equals(URL_CASE_FOLDING_NONE_VALUE)) {
135: folding = URL_CASE_FOLDING_NONE;
136: } else if (foldString
137: .equals(URL_CASE_FOLDING_LOWER_VALUE)) {
138: folding = URL_CASE_FOLDING_LOWER;
139: } else if (foldString
140: .equals(URL_CASE_FOLDING_UPPER_VALUE)) {
141: folding = URL_CASE_FOLDING_UPPER;
142: } else {
143: log.error("Got " + foldString + " from "
144: + URL_CASE_FOLDING_KEY
145: + " property, which is illegal!");
146: }
147: }
148: }
149: return folding;
150: }
151: }
|