/*
* The MIT License
* Copyright (c) 2012 Microsoft Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package microsoft.exchange.webservices.data.security;
import javax.xml.stream.XMLStreamConstants;
/**
* The Class XmlNodeType.
*/
public class XmlNodeType implements XMLStreamConstants {
/**
* The node type.
*/
public int nodeType;
/**
* Instantiates a new Xml node type.
*
* @param nodeType The node type.
*/
public XmlNodeType(int nodeType) {
this.nodeType = nodeType;
}
/**
* Returns a string representation of the object. In general, the
* <code>toString</code> method returns a string that "textually represents"
* this object. The result should be a concise but informative
* representation that is easy for a person to read. It is recommended that
* all subclasses override this method.
* <p/>
* The <code>toString</code> method for class <code>Object</code> returns a
* string consisting of the name of the class of which the object is an
* instance, the at-sign character `<code>@</code>', and the unsigned
* hexadecimal representation of the hash code of the object. In other
* words, this method returns a string equal to the value of: <blockquote>
* <p/>
* <pre>
* getClass().getName() + '@' + Integer.toHexString(hashCode())
* </pre>
* <p/>
* </blockquote>
*
* @return a string representation of the object.
*/
@Override
public String toString() {
return getString(nodeType);
}
/**
* Sets the node type.
*
* @param nodeType the new node type
*/
public void setNodeType(int nodeType) {
this.nodeType = nodeType;
}
/**
* Gets the node type.
*
* @return the node type
*/
public int getNodeType() {
return nodeType;
}
/**
* Gets the string.
*
* @param nodeType the node type
* @return the string
*/
public static String getString(int nodeType) {
switch (nodeType) {
case XMLStreamConstants.ATTRIBUTE:
return "ATTRIBUTE";
case XMLStreamConstants.CDATA:
return "CDATA";
case XMLStreamConstants.CHARACTERS:
return "CHARACTERS";
case XMLStreamConstants.COMMENT:
return "COMMENT";
case XMLStreamConstants.DTD:
return "DTD";
case XMLStreamConstants.END_DOCUMENT:
return "END_DOCUMENT";
case XMLStreamConstants.END_ELEMENT:
return "END_ELEMENT";
case XMLStreamConstants.ENTITY_DECLARATION:
return "ENTITY_DECLARATION";
case XMLStreamConstants.ENTITY_REFERENCE:
return "ENTITY_REFERENCE";
case XMLStreamConstants.NAMESPACE:
return "NAMESPACE";
case XMLStreamConstants.NOTATION_DECLARATION:
return "NOTATION_DECLARATION";
case XMLStreamConstants.PROCESSING_INSTRUCTION:
return "PROCESSING_INSTRUCTION";
case XMLStreamConstants.SPACE:
return "SPACE";
case XMLStreamConstants.START_DOCUMENT:
return "START_DOCUMENT";
case XMLStreamConstants.START_ELEMENT:
return "START_ELEMENT";
case 0:
return "NONE";
default:
return "UNKNOWN";
}
}
/**
* Indicates whether some other object is "equal to" this one.
* <p/>
* The <code>equals</code> method implements an equivalence relation on
* non-null object references:
* <ul>
* <li>It is <i>reflexive</i>: for any non-null reference value
* <code>x</code>, <code>x.equals(x)</code> should return <code>true</code>.
* <li>It is <i>symmetric</i>: for any non-null reference values
* <code>x</code> and <code>y</code>, <code>x.equals(y)</code> should return
* <code>true</code> if and only if <code>y.equals(x)</code> returns
* <code>true</code>.
* <li>It is <i>transitive</i>: for any non-null reference values
* <code>x</code>, <code>y</code>, and <code>z</code>, if
* <code>x.equals(y)</code> returns <code>true</code> and
* <code>y.equals(z)</code> returns <code>true</code>, then
* <code>x.equals(z)</code> should return <code>true</code>.
* <li>It is <i>consistent</i>: for any non-null reference values
* <code>x</code> and <code>y</code>, multiple invocations of
* <tt>x.equals(y)</tt> consistently return <code>true</code> or
* consistently return <code>false</code>, provided no information used in
* <code>equals</code> comparisons on the objects is modified.
* <li>For any non-null reference value <code>x</code>,
* <code>x.equals(null)</code> should return <code>false</code>.
* </ul>
* <p/>
* The <tt>equals</tt> method for class <code>Object</code> implements the
* most discriminating possible equivalence relation on objects; that is,
* for any non-null reference values <code>x</code> and <code>y</code>, this
* method returns <code>true</code> if and only if <code>x</code> and
* <code>y</code> refer to the same object (<code>x == y</code> has the
* value <code>true</code>).
* <p/>
* Note that it is generally necessary to override the <tt>hashCode</tt>
* method whenever this method is overridden, so as to maintain the general
* contract for the <tt>hashCode</tt> method, which states that equal
* objects must have equal hash codes.
*
* @param obj the reference object with which to compare.
* @return if this object is the same as the obj argument; otherwise.
* @see #hashCode()
* @see java.util.Hashtable
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof XmlNodeType) {
XmlNodeType other = (XmlNodeType) obj;
return this.nodeType == other.nodeType;
} else {
return super.equals(obj);
}
}
/**
* Returns a hash code value for the object. This method is supported for
* the benefit of hashtables such as those provided by
* <code>java.util.Hashtable</code>.
* <p/>
* The general contract of <code>hashCode</code> is:
* <ul>
* <li>Whenever it is invoked on the same object more than once during an
* execution of a Java application, the <tt>hashCode</tt> method must
* consistently return the same integer, provided no information used in
* <tt>equals</tt> comparisons on the object is modified. This integer need
* not remain consistent from one execution of an application to another
* execution of the same application.
* <li>If two objects are equal according to the <tt>equals(Object)</tt>
* method, then calling the <code>hashCode</code> method on each of the two
* objects must produce the same integer result.
* <li>It is <em>not</em> required that if two objects are unequal according
* to the {@link Object#equals(Object)} method, then
* calling the <tt>hashCode</tt> method on each of the two objects must
* produce distinct integer results. However, the programmer should be aware
* that producing distinct integer results for unequal objects may improve
* the performance of hashtables.
* </ul>
* <p/>
* As much as is reasonably practical, the hashCode method defined by class
* <tt>Object</tt> does return distinct integers for distinct objects. (This
* is typically implemented by converting the internal address of the object
* into an integer, but this implementation technique is not required by the
* Java<font size="-2"><sup>TM</sup></font> programming language.)
*
* @return a hash code value for this object.
* @see Object#equals(Object)
* @see java.util.Hashtable
*/
@Override
public int hashCode() {
return this.nodeType;
}
}