| /******************************************************************************* |
| * Copyright (c) 2001, 2008 Oracle Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.common.dom; |
| |
| /** |
| * Uniquely identifies a named attribute on a tag usint TagIdentifier as a way |
| * to uniquely identify the host tag. All instances should be considered |
| * immutable and idempotent. Factories may cache copies as transparent |
| * singletons for unique TagIdentifier/attribute. |
| * |
| * THIS CLASS IS NOT API AND SHOULD NOT BE USED |
| * |
| * @author cbateman |
| * |
| */ |
| public abstract class AttributeIdentifier |
| { |
| /** |
| * @return the attribute name (local name, namespace prefix is currently ignored) |
| */ |
| public abstract String getName(); |
| |
| /** |
| * @return the tag identifier |
| */ |
| public abstract TagIdentifier getTagIdentifier(); |
| |
| public final boolean equals(Object compareTo) |
| { |
| if (compareTo instanceof AttributeIdentifier) |
| { |
| return isSameAttributeType((AttributeIdentifier) compareTo); |
| } |
| return false; |
| } |
| |
| public final int hashCode() |
| { |
| // use toLowerCase to ensure equals matches |
| int hashCode = getName().toLowerCase().hashCode(); |
| |
| int tagCode = getTagIdentifier().hashCode(); |
| |
| hashCode = hashCode ^ tagCode; |
| |
| return hashCode; |
| } |
| |
| /** |
| * @param attributeId |
| * @return true if attributeId represents the same attribute as this. |
| */ |
| public final boolean isSameAttributeType(AttributeIdentifier attributeId) |
| { |
| // if same object, always true |
| if (attributeId == this) |
| { |
| return true; |
| } |
| |
| |
| // if tag identifiers not same, then always false. |
| if (!getTagIdentifier().isSameTagType(attributeId.getTagIdentifier())) |
| { |
| return false; |
| } |
| |
| // if tag id is the same, the tag name must be too. |
| return getName().toLowerCase().equals(attributeId.getName().toLowerCase()); |
| } |
| |
| } |