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