19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: ExtendedType.java 468653 2006-10-28 07:07:05Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.dtm.ref;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The class ExtendedType represents an extended type object used by
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ExpandedNameTable.
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic final class ExtendedType
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private int nodetype;
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private String namespace;
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private String localName;
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    private int hash;
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Create an ExtendedType object from node type, namespace and local name.
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * The hash code is calculated from the node type, namespace and local name.
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param nodetype Type of the node
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param namespace Namespace of the node
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param localName Local name of the node
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public ExtendedType (int nodetype, String namespace, String localName)
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.nodetype = nodetype;
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.namespace = namespace;
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.localName = localName;
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.hash = nodetype + namespace.hashCode() + localName.hashCode();
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Create an ExtendedType object from node type, namespace, local name
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * and a given hash code.
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param nodetype Type of the node
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param namespace Namespace of the node
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param localName Local name of the node
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param hash The given hash code
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public ExtendedType (int nodetype, String namespace, String localName, int hash)
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.nodetype = nodetype;
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.namespace = namespace;
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.localName = localName;
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.hash = hash;
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Redefine this ExtendedType object to represent a different extended type.
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * This is intended to be used ONLY on the hashET object. Using it elsewhere
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * will mess up existing hashtable entries!
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected void redefine(int nodetype, String namespace, String localName)
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.nodetype = nodetype;
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.namespace = namespace;
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.localName = localName;
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.hash = nodetype + namespace.hashCode() + localName.hashCode();
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Redefine this ExtendedType object to represent a different extended type.
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * This is intended to be used ONLY on the hashET object. Using it elsewhere
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * will mess up existing hashtable entries!
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    protected void redefine(int nodetype, String namespace, String localName, int hash)
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.nodetype = nodetype;
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.namespace = namespace;
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.localName = localName;
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      this.hash = hash;
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Override the hashCode() method in the Object class
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public int hashCode()
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return hash;
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Test if this ExtendedType object is equal to the given ExtendedType.
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     *
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @param other The other ExtendedType object to test for equality
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @return true if the two ExtendedType objects are equal.
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public boolean equals(ExtendedType other)
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      try
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return other.nodetype == this.nodetype &&
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                other.localName.equals(this.localName) &&
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                other.namespace.equals(this.namespace);
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      catch(NullPointerException e)
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        return false;
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Return the node type
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public int getNodeType()
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return nodetype;
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Return the local name
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public String getLocalName()
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return localName;
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * Return the namespace
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public String getNamespace()
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return namespace;
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
146