blob: f17eed387a1ff98a8643b62a85d9653d3bfbd7e2 [file] [log] [blame]
package org.eclipse.jst.jsf.facelet.core.internal.cm;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
/**
* Represents information about Facelets brought from external sources such as
* the JSP tag library.
*
* @author cbateman
*
*/
public abstract class ExternalTagInfo extends TagInfo
{
/**
* Single instance of the null external tag info
*/
public static TagInfo NULL_INSTANCE = new NullExternalTagInfo();
@Override
public abstract CMNamedNodeMap getAttributes(final String tagName);
@Override
public abstract Object getTagProperty(final String tagName, final String key);
/**
* @author cbateman
*
*/
public static class NullExternalTagInfo extends ExternalTagInfo
{
private NullExternalTagInfo()
{
// no external instantitation
}
@Override
public CMNamedNodeMap getAttributes(final String tagName)
{
return new NullCMNamedNodeMap();
}
@Override
public Object getTagProperty(final String tagName, final String key)
{
// no data so always null
return null;
}
private static class NullCMNamedNodeMap implements CMNamedNodeMap
{
public int getLength()
{
return 0;
}
public CMNode getNamedItem(final String name)
{
return null;
}
public CMNode item(final int index)
{
return null;
}
public Iterator iterator()
{
return new NullIterator();
}
}
private static class NullIterator implements Iterator
{
public boolean hasNext()
{
return false;
}
public Object next()
{
throw new NoSuchElementException();
}
public void remove()
{
throw new UnsupportedOperationException(
"can not remove regions via iterator"); //$NON-NLS-1$
}
}
}
}