1/*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5/*
6 * Licensed to the Apache Software Foundation (ASF) under one or more
7 * contributor license agreements.  See the NOTICE file distributed with
8 * this work for additional information regarding copyright ownership.
9 * The ASF licenses this file to You under the Apache License, Version 2.0
10 * (the "License"); you may not use this file except in compliance with
11 * the License.  You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22package com.sun.org.apache.xml.internal.dtm.ref;
23
24/**
25 * The class ExtendedType represents an extended type object used by
26 * ExpandedNameTable.
27 */
28public final class ExtendedType
29{
30    private int nodetype;
31    private String namespace;
32    private String localName;
33    private int hash;
34
35    /**
36     * Create an ExtendedType object from node type, namespace and local name.
37     * The hash code is calculated from the node type, namespace and local name.
38     *
39     * @param nodetype Type of the node
40     * @param namespace Namespace of the node
41     * @param localName Local name of the node
42     */
43    public ExtendedType (int nodetype, String namespace, String localName)
44    {
45      this.nodetype = nodetype;
46      this.namespace = namespace;
47      this.localName = localName;
48      this.hash = nodetype + namespace.hashCode() + localName.hashCode();
49    }
50
51    /**
52     * Create an ExtendedType object from node type, namespace, local name
53     * and a given hash code.
54     *
55     * @param nodetype Type of the node
56     * @param namespace Namespace of the node
57     * @param localName Local name of the node
58     * @param hash The given hash code
59     */
60    public ExtendedType (int nodetype, String namespace, String localName, int hash)
61    {
62      this.nodetype = nodetype;
63      this.namespace = namespace;
64      this.localName = localName;
65      this.hash = hash;
66    }
67
68    /**
69     * Redefine this ExtendedType object to represent a different extended type.
70     * This is intended to be used ONLY on the hashET object. Using it elsewhere
71     * will mess up existing hashtable entries!
72     */
73    protected void redefine(int nodetype, String namespace, String localName)
74    {
75      this.nodetype = nodetype;
76      this.namespace = namespace;
77      this.localName = localName;
78      this.hash = nodetype + namespace.hashCode() + localName.hashCode();
79    }
80
81    /**
82     * Redefine this ExtendedType object to represent a different extended type.
83     * This is intended to be used ONLY on the hashET object. Using it elsewhere
84     * will mess up existing hashtable entries!
85     */
86    protected void redefine(int nodetype, String namespace, String localName, int hash)
87    {
88      this.nodetype = nodetype;
89      this.namespace = namespace;
90      this.localName = localName;
91      this.hash = hash;
92    }
93
94    /**
95     * Override the hashCode() method in the Object class
96     */
97    public int hashCode()
98    {
99      return hash;
100    }
101
102    /**
103     * Test if this ExtendedType object is equal to the given ExtendedType.
104     *
105     * @param other The other ExtendedType object to test for equality
106     * @return true if the two ExtendedType objects are equal.
107     */
108    public boolean equals(ExtendedType other)
109    {
110      try
111      {
112        return other.nodetype == this.nodetype &&
113                other.localName.equals(this.localName) &&
114                other.namespace.equals(this.namespace);
115      }
116      catch(NullPointerException e)
117      {
118        return false;
119      }
120    }
121
122    /**
123     * Return the node type
124     */
125    public int getNodeType()
126    {
127      return nodetype;
128    }
129
130    /**
131     * Return the local name
132     */
133    public String getLocalName()
134    {
135      return localName;
136    }
137
138    /**
139     * Return the namespace
140     */
141    public String getNamespace()
142    {
143      return namespace;
144    }
145
146}
147