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.commons.validator;
018    
019    import java.io.Serializable;
020    
021    /**
022     * <p>
023     * A default argument or an argument for a
024     * specific validator definition (ex: required)
025     * can be stored to pass into a message as parameters.  This can be used in a
026     * pluggable validator for constructing locale
027     * sensitive messages by using <code>java.text.MessageFormat</code>
028     * or an equivalent class.  The resource field can be
029     * used to determine if the value stored in the argument
030     * is a value to be retrieved from a locale sensitive
031     * message retrieval system like <code>java.util.PropertyResourceBundle</code>.
032     * The resource field defaults to 'true'.
033     * </p>
034     * <p>Instances of this class are configured with an &lt;arg&gt; xml element.</p>
035     *
036     * @version $Revision: 493905 $ $Date: 2007-01-08 03:11:38 +0100 (Mo, 08. Jan 2007) $
037     */
038    public class Arg implements Cloneable, Serializable {
039    
040        /**
041         * The resource bundle name that this Arg's <code>key</code> should be
042         * resolved in (optional).
043         * @since Validator 1.1
044         */
045        protected String bundle = null;
046    
047        /**
048         * The key or value of the argument.
049         */
050        protected String key = null;
051    
052        /**
053         * The name dependency that this argument goes with (optional).
054         */
055        protected String name = null;
056    
057        /**
058         * This argument's position in the message. Set postion=0 to
059         * make a replacement in this string: "some msg {0}".
060         * @since Validator 1.1
061         */
062        protected int position = -1;
063    
064        /**
065         * Whether or not the key is a message resource (optional).  Defaults to
066         * true.  If it is 'true', the value will try to be resolved as a message
067         * resource.
068         */
069        protected boolean resource = true;
070    
071        /**
072         * Creates and returns a copy of this object.
073         * @return A copy of this object.
074         */
075        public Object clone() {
076            try {
077                return super.clone();
078    
079            } catch(CloneNotSupportedException e) {
080                throw new RuntimeException(e.toString());
081            }
082        }
083    
084        /**
085         * Returns the resource bundle name.
086         * @return the bundle name.
087         * @since Validator 1.1
088         */
089        public String getBundle() {
090            return this.bundle;
091        }
092    
093        /**
094         * Gets the key/value.
095         * @return the key value.
096         */
097        public String getKey() {
098            return this.key;
099        }
100    
101        /**
102         * Gets the name of the dependency.
103         * @return the name of the dependency.
104         */
105        public String getName() {
106            return this.name;
107        }
108    
109        /**
110         * Argument's replacement position.
111         * @return This argument's replacement position.
112         */
113        public int getPosition() {
114            return this.position;
115        }
116    
117        /**
118         * Tests whether or not the key is a resource key or literal value.
119         * @return <code>true</code> if key is a resource key.
120         */
121        public boolean isResource() {
122            return this.resource;
123        }
124    
125        /**
126         * Sets the resource bundle name.
127         * @param bundle The new bundle name.
128         * @since Validator 1.1
129         */
130        public void setBundle(String bundle) {
131            this.bundle = bundle;
132        }
133    
134        /**
135         * Sets the key/value.
136         * @param key They to access the argument.
137         */
138        public void setKey(String key) {
139            this.key = key;
140        }
141    
142        /**
143         * Sets the name of the dependency.
144         * @param name the name of the dependency.
145         */
146        public void setName(String name) {
147            this.name = name;
148        }
149    
150        /**
151         * Set this argument's replacement position.
152         * @param position set this argument's replacement position.
153         */
154        public void setPosition(int position) {
155            this.position = position;
156        }
157    
158        /**
159         * Sets whether or not the key is a resource.
160         * @param resource If true indicates the key is a resource.
161         */
162        public void setResource(boolean resource) {
163            this.resource = resource;
164        }
165    
166        /**
167         * Returns a string representation of the object.
168         * @return a string representation of the object.
169         */
170        public String toString() {
171            StringBuffer results = new StringBuffer();
172    
173            results.append("Arg: name=");
174            results.append(name);
175            results.append("  key=");
176            results.append(key);
177            results.append("  position=");
178            results.append(position);
179            results.append("  bundle=");
180            results.append(bundle);
181            results.append("  resource=");
182            results.append(resource);
183            results.append("\n");
184    
185            return results.toString();
186        }
187    
188    }