FileDocCategorySizeDatePackage
NameValue.javaAPI DocphoneME MR2 API (J2ME)6732Wed May 02 18:00:42 BST 2007gov.nist.core

NameValue.java

/*
 * Portions Copyright  2000-2007 Sun Microsystems, Inc. All Rights
 * Reserved.  Use is subject to license terms.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt).
 * 
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 * 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions.
 */
/*
 */
package gov.nist.core;
/**
 *  Generic structure for storing name-value pairs.
 *
 * @version  JAIN-SIP-1.1
 *
 *
 * <a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a>
 *
 */
public class NameValue   extends GenericObject {
    /** FLag to indicate the value is a quoted string. */
    protected boolean isQuotedString;
    /** Field separator for name value encoding. */
    protected String separator;
    /** Characters used for quoting strings. */
    protected String quotes;
    /** The label for the name value pair. */
    protected String name;
    /** The value for this data element. */
    protected Object value;

    /** Default constructor. */
    public NameValue() {
        name = null; value = null;
        separator = Separators.EQUALS;
        this.quotes = "";
    }

    /**
     * Constructs a name value pair from initial strings.
     * @param n the name of the key
     * @param v the value for the pair
     */
    public NameValue(String n, Object v) {
        name = n;
        separator = Separators.EQUALS;
        quotes = "";
        setValue(v);
    }
    /**
     * Sets the separator for the encoding method below.
     * @param sep the field separator for the encoded string
     */
    public void setSeparator(String sep) {
        separator = sep;
    }

    /**
     * Sets the type of the field to be a quoted string.
     * A flag that indicates that doublequotes should be put around the
     * value when encoded
     * (for example name=value when value is doublequoted).
     */
    public void setQuotedValue() {
        isQuotedString = true;
        this.quotes = Separators.DOUBLE_QUOTE;
    }

    /**
     * Returns true if the value is quoted in doublequotes.
     * @return true if the value is of type quoted string
     */
    public boolean isValueQuoted() {
        return isQuotedString;
    }

    /**
     * Gets the name.
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * Gets the value.
     * @return the value
     */
    public Object getValue() {
        if (isValueQuoted()) {
            return "\"" + value + "\"";
        } else {
            return value;
        }
    }

    /**
     * Gets the unquoted value.
     * @return the value
     */
    public Object getUnquotedValue() {
        return value;
    }

    /**
     * Sets the name member.
     * @param n the name for the key
     */
    public void setName(String n) {
        name = n;
    }

    /**
     * Sets the value member.
     * @param v the value for the pair
     */
    public void setValue(Object v) {
        value = v;
        if (value != null) {
            if (value instanceof String) {
                String str = (String)value;
                if (str.startsWith("\"") && str.endsWith("\"")) {
                    setQuotedValue();
                    str = str.substring(1, str.length() - 1);
                    value = (Object)str;
                }
            }
        }
    }

    /**
     * Gets the encoded representation of this namevalue object.
     * Added doublequote for encoding doublequoted values
     * @since 1.0
     * @return an encoded name value (eg. name=value) string.
     */
    public String encode() {
        if (name != null && value != null) {
            return name + separator + quotes +
                    value.toString() +  quotes;
        } else if (name == null && value != null) {
            return quotes + value.toString() + quotes;
        } else if (name != null && value == null) {
            return name;
        } else return "";
    }

    /**
     * Makes a copy of the current instance.
     * @return copy of current object
     */
    public Object clone() {
        NameValue retval = new NameValue();
        retval.separator = this.separator;
        retval.isQuotedString = this.isQuotedString;
        retval.quotes = this.quotes;
        retval.name = this.name;
        if (value != null && value instanceof GenericObject) {
            retval.value = ((GenericObject)this.value).clone();
        } else retval.value = this.value;
        return retval;
    }

    /**
     * Equality comparison predicate.
     * @param other the object for comparison
     * @return true if the instances are equivalent
     */
    public boolean equals(Object other) {
        if (! other.getClass().equals(this.getClass()))
            return false;
        NameValue that = (NameValue) other;
        if (this == that)
            return true;
        if (this.name  == null && that.name != null ||
                this.name != null && that.name == null) return false;
        if (this.name != null && that.name != null &&
                this.name.toLowerCase().compareTo
                (that.name.toLowerCase()) != 0)
            return false;
        if (this.value != null && that.value == null ||
                this.value == null && that.value != null)
            return false;
        if (this.value == that.value)
            return true;
        if (value instanceof String) {
            // Quoted string comparisions are case sensitive.
            if (isQuotedString)
                return this.value.equals(that.value);
            String val = (String) this.value;
            String val1 = (String) that.value;
            return val.toLowerCase().
                    equals(val1.toLowerCase());
        } else return this.value.equals(that.value);
    }

    /**
     * Converts the contents to a string.
     * @return the encoded string contenets
     */
    public String toString() {
        return this.encode();
    }

}