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 *      https://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 */
017package org.apache.commons.validator;
018
019import java.io.Serializable;
020
021/**
022 * An alternative message can be associated with a {@code Field}
023 * and a pluggable validator instead of using the default message
024 * stored in the {@code ValidatorAction} (aka pluggable validator).
025 * Instances of this class are configured with a <msg> xml element.
026 */
027//TODO mutable non-private fields
028public class Msg implements Cloneable, Serializable {
029
030    private static final long serialVersionUID = 5690015734364127124L;
031
032    /**
033     * The resource bundle name that this Msg's {@code key} should be
034     * resolved in (optional).
035     *
036     * @since 1.1
037     */
038    protected String bundle;
039
040    /**
041     * The key or value of the argument.
042     */
043    protected String key;
044
045    /**
046     * The name dependency that this argument goes with (optional).
047     */
048    protected String name;
049
050    /**
051     * Whether or not the key is a message resource (optional).  Defaults to
052     * true.  If it is 'true', the value will try to be resolved as a message
053     * resource.
054     *
055     * @since 1.1.4
056     */
057    protected boolean resource = true;
058
059    /**
060     * Constructs a new instance.
061     */
062    public Msg() {
063        // empty
064    }
065
066    /**
067     * Creates and returns a copy of this object.
068     *
069     * @return A copy of the Msg.
070     */
071    @Override
072    public Object clone() {
073        try {
074            return super.clone();
075
076        } catch (final CloneNotSupportedException e) {
077            throw new UnsupportedOperationException(e.toString(), e);
078        }
079    }
080
081    /**
082     * Returns the resource bundle name.
083     *
084     * @return The bundle name.
085     * @since 1.1
086     */
087    public String getBundle() {
088        return bundle;
089    }
090
091    /**
092     * Gets the key/value.
093     *
094     * @return The message key/value.
095     */
096    public String getKey() {
097        return key;
098    }
099
100    /**
101     * Gets the name of the dependency.
102     *
103     * @return The dependency name.
104     */
105    public String getName() {
106        return name;
107    }
108
109    /**
110     * Tests whether or not the key is a resource key or literal value.
111     *
112     * @return {@code true} if key is a resource key.
113     * @since 1.1.4
114     */
115    public boolean isResource() {
116        return resource;
117    }
118
119    /**
120     * Sets the resource bundle name.
121     *
122     * @param bundle The new bundle name.
123     * @since 1.1
124     */
125    public void setBundle(final String bundle) {
126        this.bundle = bundle;
127    }
128
129    /**
130     * Sets the key/value.
131     *
132     * @param key The message key/value.
133     */
134    public void setKey(final String key) {
135        this.key = key;
136    }
137
138    /**
139     * Sets the name of the dependency.
140     *
141     * @param name The dependency name.
142     */
143    public void setName(final String name) {
144        this.name = name;
145    }
146
147    /**
148     * Sets whether or not the key is a resource.
149     *
150     * @param resource If true indicates the key is a resource.
151     * @since 1.1.4
152     */
153    public void setResource(final boolean resource) {
154        this.resource = resource;
155    }
156
157    /**
158     * Returns a string representation of the object.
159     *
160     * @return Msg String representation.
161     */
162    @Override
163    public String toString() {
164        final StringBuilder results = new StringBuilder();
165
166        results.append("Msg: name=");
167        results.append(name);
168        results.append("  key=");
169        results.append(key);
170        results.append("  resource=");
171        results.append(resource);
172        results.append("  bundle=");
173        results.append(bundle);
174        results.append("\n");
175
176        return results.toString();
177    }
178
179}