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: package org.apache.cocoon.components.elementprocessor.types;
018:
019: import org.apache.commons.lang.BooleanUtils;
020:
021: /**
022: * Encapsulation of a single XML element attribute in a way that
023: * shields the consumer from the data's XML origins.
024: *
025: * @author Marc Johnson (marc_johnson27591@hotmail.com)
026: * @version CVS $Id: Attribute.java 433543 2006-08-22 06:22:54Z crossley $
027: */
028: public class Attribute {
029: private String _name;
030: private String _value;
031:
032: /**
033: * Constructor
034: *
035: * @param name the name of the Attribute, the left hand side of
036: * the '=' of an XML element's attribute.
037: * @param value the value of the Attribute, the right hand side of
038: * the '=' of an XML element's attribute.
039: *
040: * @exception IllegalArgumentException is thrown if name is null
041: * or empty, or if value is null.
042: */
043:
044: public Attribute(final String name, final String value) {
045: if ((name == null) || (name.length() == 0)) {
046: throw new IllegalArgumentException(
047: "Attribute name is null or empty");
048: }
049: if (value == null) {
050: throw new IllegalArgumentException(
051: "Attribute value is null");
052: }
053: _name = name;
054: _value = value;
055: }
056:
057: /**
058: * Get the name of the Attribute.
059: *
060: * @return the name of the Attribute
061: */
062:
063: public String getName() {
064: return _name;
065: }
066:
067: /**
068: * Get the value of the Attribute as a String.
069: *
070: * @return the value of the Attribute as a String
071: */
072:
073: public String getValue() {
074: return _value;
075: }
076:
077: /**
078: * A convenience method to get the value of the Attribute as an
079: * int.
080: *
081: * @return the value of the Attribute as an int
082: *
083: * @exception NumberFormatException if the value is not an int
084: */
085:
086: public int getValueAsInt() {
087: return Integer.parseInt(_value);
088: }
089:
090: /**
091: * A convenience method to get the value of the Attribute as a
092: * short.
093: *
094: * @return the value of the Attribute as a short
095: *
096: * @exception NumberFormatException if the value is not a short
097: */
098:
099: public short getValueAsShort() {
100: return Short.parseShort(_value);
101: }
102:
103: /**
104: * A convenience method to get the value of the Attribute as a long.
105: *
106: * @return the value of the Attribute as a long
107: *
108: * @exception NumberFormatException if the value is not a long
109: */
110:
111: public long getValueAsLong() {
112: return Long.parseLong(_value);
113: }
114:
115: /**
116: * A convenience method to get the value of the attribute as a
117: * boolean. Understands these value strings in a case-insensitive
118: * fashion:
119: * <ul>
120: * <li>t/f
121: * <li>true/false
122: * <li>y/n
123: * <li>yes/no
124: * <li>on/off
125: * </ul>
126: *
127: * @return the value of the Attribute as a boolean
128: *
129: * @exception IllegalArgumentException if the value does not
130: * represent a boolean
131: */
132:
133: public boolean getValueAsBoolean() {
134: // Match case for: true, false, yes, no, on, off.
135: Boolean rvalue = BooleanUtils.toBooleanObject(_value);
136: if (rvalue != null) {
137: return rvalue.booleanValue();
138: }
139: // Lets try with "t", "f"
140: try {
141: rvalue = BooleanUtils.toBooleanObject(_value, "t", "f",
142: null);
143: } catch (IllegalArgumentException iae) {
144: rvalue = null;
145: }
146: if (rvalue != null) {
147: return rvalue.booleanValue();
148: }
149: // Try now "y", "n"
150: try {
151: rvalue = BooleanUtils.toBooleanObject(_value, "y", "n",
152: null);
153: } catch (IllegalArgumentException iae) {
154: rvalue = null;
155: }
156: if (rvalue != null) {
157: return rvalue.booleanValue();
158: } else {
159: throw new IllegalArgumentException("Value [" + _value
160: + "] does not represent a boolean value");
161: }
162: }
163: } // end public class Attribute
|