/* * Conditions Of Use * * This software was developed by employees of the National Institute of * Standards and Technology (NIST), an agency of the Federal Government. * Pursuant to title 15 Untied States Code Section 105, works of NIST * employees are not subject to copyright protection in the United States * and are considered to be in the public domain. As a result, a formal * license is not needed to use the software. * * This software is provided by NIST as a service and is expressly * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT * AND DATA ACCURACY. NIST does not warrant or make any representations * regarding the use of the software or the results thereof, including but * not limited to the correctness, accuracy, reliability or usefulness of * the software. * * Permission to use this software is contingent upon your acceptance * of the terms of this agreement * * . * */ /******************************************************************************* * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * *******************************************************************************/ package gov.nist.javax.sdp.fields; import gov.nist.core.*; import javax.sdp.*; /** * Attribute Field. * *@version JSR141-PUBLIC-REVIEW (subject to change). * *@author Olivier Deruelle <deruelle@antd.nist.gov> *@author M. Ranganathan <br/> * * * */ public class AttributeField extends SDPField implements javax.sdp.Attribute { protected NameValue attribute; public NameValue getAttribute() { return attribute; } public AttributeField() { super(ATTRIBUTE_FIELD); } /** * Set the attribute member */ public void setAttribute(NameValue a) { attribute = a; attribute.setSeparator(Separators.COLON); } /** * Get the string encoded version of this object * @since v1.0 */ public String encode() { String encoded_string = ATTRIBUTE_FIELD; if (attribute != null) encoded_string += attribute.encode(); return encoded_string + Separators.NEWLINE; } public String toString() { return this.encode(); } /** Returns the name of this attribute * @throws SdpParseException if the name is not well formatted. * @return a String identity or null. */ public String getName() throws SdpParseException { NameValue nameValue = getAttribute(); if (nameValue == null) return null; else { String name = nameValue.getName(); if (name == null) return null; else return name; } } /** Sets the id of this attribute. * @param name the string name/id of the attribute. * @throws SdpException if the name is null */ public void setName(String name) throws SdpException { if (name == null) throw new SdpException("The name is null"); else { NameValue nameValue = getAttribute(); if (nameValue == null) nameValue = new NameValue(); nameValue.setName(name); setAttribute(nameValue); } } /** Determines if this attribute has an associated value. * @throws SdpParseException if the value is not well formatted. * @return true if the attribute has a value. */ public boolean hasValue() throws SdpParseException { NameValue nameValue = getAttribute(); if (nameValue == null) return false; else { Object value = nameValue.getValueAsObject(); if (value == null) return false; else return true; } } /** Returns the value of this attribute. * @throws SdpParseException if the value is not well formatted. * @return the value; null if the attribute has no associated value. */ public String getValue() throws SdpParseException { NameValue nameValue = getAttribute(); if (nameValue == null) return null; else { Object value = nameValue.getValueAsObject(); if (value == null) return null; else if (value instanceof String) return (String) value; else return value.toString(); } } /** Sets the value of this attribute. * @param value the - attribute value * @throws SdpException if the value is null. */ public void setValue(String value) throws SdpException { if (value == null) throw new SdpException("The value is null"); else { NameValue nameValue = getAttribute(); if (nameValue == null) nameValue = new NameValue(); nameValue.setValueAsObject(value); setAttribute(nameValue); } } /** * Allow for null value when setting the value. * * @param value -- can be null. */ public void setValueAllowNull(String value) { NameValue nameValue = getAttribute(); if (nameValue == null) nameValue = new NameValue(); nameValue.setValueAsObject(value); setAttribute(nameValue); } public Object clone() { AttributeField retval = (AttributeField) super.clone(); if (this.attribute != null) retval.attribute = (NameValue) this.attribute.clone(); return retval; } public boolean equals(Object that ) { if ( ! (that instanceof AttributeField)) return false; AttributeField other = (AttributeField) that; return other.getAttribute().getName().equalsIgnoreCase(this.getAttribute().getName()) && this.getAttribute().getValueAsObject().equals(other.getAttribute().getValueAsObject()); } @Override public int hashCode() { if (getAttribute() == null ) throw new UnsupportedOperationException("Attribute is null cannot compute hashCode "); return this.encode().hashCode(); } }