/******************************************************************************* * 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; import org.w3c.dom.Node; /** * Generic adapter for DOM attribute structures. * * @author cbateman * * <p> * <b>Provisional API - subject to change</b> * </p> */ public abstract class AttrDOMAdapter extends DOMAdapter { private AttributeIdentifier _attributeId; // lazily instantiated. private final ElementDOMAdapter _owner; /** * @param owner */ protected AttrDOMAdapter(final ElementDOMAdapter owner) { _owner = owner; } /** * The default implementation always returns the owner specified in the * constructor. * * @return the element that owns this attribute */ public ElementDOMAdapter getOwningElement() { return _owner; } /** * @return the value of the attribute. May return null if the attribute has * no value. */ public abstract String getValue(); @Override public final short getNodeType() { return Node.ATTRIBUTE_NODE; } /** * @return the attribute identifier */ public final AttributeIdentifier getAttributeIdentifier() { synchronized (this) { if (_attributeId == null) { _attributeId = new MyAttributeIdentifier(); } } return _attributeId; } private class MyAttributeIdentifier extends AttributeIdentifier { @Override public String getName() { return AttrDOMAdapter.this.getLocalName(); } @Override public TagIdentifier getTagIdentifier() { return getOwningElement().getTagId(); } } }