/*******************************************************************************
 * 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 java.util.Map;

import org.w3c.dom.Node;

/**
 * T
 * @author cbateman
 * 
 * <p><b>Provisional API - subject to change</b></p>
 *
 */
public abstract class ElementDOMAdapter extends DOMAdapter
{
    private TagIdentifier       _tagIdentifier; // lazily initialized
    
    /**
     * Map should be considered immutable and may throw exceptions if
     * mutations are attempted.
     * 
     * @return a nodeName keyed map of attributes belonging to this element
     */
    public abstract Map<String, ? extends AttrDOMAdapter> getAttributes();

    @Override
    public final short getNodeType()
    {
        return  Node.ELEMENT_NODE;
    }

    /**
     * @return the namespace uri for element or null if not applicable (i.e. HTML).
     */
    public abstract String getNamespace();
    
    /**
     * @return the tag identifier for this attribute
     */
    public final TagIdentifier getTagId()
    {
        synchronized(this)
        {
            if (_tagIdentifier == null)
            {
                _tagIdentifier = new MyTagIdentifier();
            }
        }
        return _tagIdentifier; 
    }
    
    private final class MyTagIdentifier extends TagIdentifier
    {
        @Override
        public String getTagName()
        {
            return getLocalName();
        }

        @Override
        public String getUri()
        {
            return getNamespace();
        }

        @Override
        public boolean isJSPTag()
        {
            // shouldn't be called
            throw new UnsupportedOperationException("jsp flag not supported on this identifier"); //$NON-NLS-1$
        }
        
    }
}
