blob: 1a73273ac4a53e518a9738794b90d4a22581c6c1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Oracle Corporation.
* 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:
* Cameron Bateman - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.FaceletTaglib;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.FaceletTaglibTag;
/**
* A tag record based on an xml tag defined Facelet taglib.xml
* @author cbateman
*
*/
public class XMLBasedTagRecord_Facelet10 extends FaceletTagRecord
{
/**
*
*/
private static final long serialVersionUID = 1411551451386954263L;
private final FaceletTaglib _taglibDefn;
private Map<String, FaceletTaglibTag> _tagIndexByName;
/**
* @param taglibDefn
* @param descriptor
*/
public XMLBasedTagRecord_Facelet10(final FaceletTaglib taglibDefn, final TagRecordDescriptor descriptor)
{
super(descriptor);
_taglibDefn = taglibDefn;
}
@Override
public String getURI()
{
return _taglibDefn.getNamespaceUri();
}
@Override
public FaceletTaglibTag getTag(final String name)
{
return getAndIndexElementDeclaration(name);
}
private synchronized FaceletTaglibTag getAndIndexElementDeclaration(final String name)
{
FaceletTaglibTag tagDefn = null;
if (_tagIndexByName == null)
{
_tagIndexByName = new HashMap<String, FaceletTaglibTag>();
}
else
{
tagDefn = _tagIndexByName.get(name);
}
if (tagDefn == null && _tagIndexByName.size() < _taglibDefn.getTag().size())
{
tagDefn = findTag(name);
}
return tagDefn;
}
private FaceletTaglibTag findTag(final String name)
{
for (final FaceletTaglibTag tag : _taglibDefn.getTag())
{
if (name.equals(tag.getTagName()))
{
return tag;
}
}
return null;
}
@Override
public List<FaceletTaglibTag> getTags()
{
return Collections.unmodifiableList(_taglibDefn.getTag());
}
public int getNumTags()
{
return _taglibDefn.getTag().size();
}
}