blob: bae83f7a74799b27b47095093cee0ac75c851785 [file] [log] [blame]
package org.eclipse.jst.jsf.facelet.core.internal.cm;
import java.util.Iterator;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamespace;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
/**
* A namespace a specific to a document, where it's tag name prefix is known.
*
*/
class DocumentNamespaceCMAdapter implements CMNamedNodeMap, CMDocument
{
private final String _prefix;
private final NamespaceCMAdapter _adapter;
public DocumentNamespaceCMAdapter(final NamespaceCMAdapter adapter, final String prefix)
{
_prefix = prefix;
_adapter = adapter;
}
public int getLength()
{
return _adapter.getLength();
}
public CMNode getNamedItem(String name)
{
CMNode node = _adapter.getNamedItem(name);
if (node != null)
{
node = new DocumentElementCMAdapter((ElementCMAdapter) node,_prefix);
}
return node;
}
public CMNode item(int index)
{
CMNode item = _adapter.item(index);
if (item != null)
{
item = new DocumentElementCMAdapter((ElementCMAdapter) item,_prefix);
}
return item;
}
public Iterator<?> iterator()
{
return new WrappingIterator(_adapter.iterator());
}
private class WrappingIterator implements Iterator<CMNode>
{
private Iterator<?> _it;
public WrappingIterator(final Iterator<?> it)
{
_it = it;
}
public boolean hasNext()
{
return _it.hasNext();
}
public CMNode next()
{
CMNode node = (CMNode) _it.next();
node = getNamedItem(node.getNodeName());
return node;
}
public void remove()
{
throw new UnsupportedOperationException(""); //$NON-NLS-1$
}
}
public CMNamedNodeMap getElements()
{
return this;
}
public CMNamedNodeMap getEntities()
{
//not changing entities
return _adapter.getEntities();
}
public CMNamespace getNamespace()
{
return new CMNamespaceImpl(_adapter.getNamespace(), _prefix);
}
public String getNodeName()
{
// not changing node name
return _adapter.getNodeName();
}
public int getNodeType()
{
return _adapter.getNodeType();
}
public Object getProperty(String propertyName)
{
return _adapter.getProperty(propertyName);
}
public boolean supports(String propertyName)
{
return _adapter.supports(propertyName);
}
private static class CMNamespaceImpl implements CMNamespace
{
private final CMNamespace _proxy;
private final String _prefix;
CMNamespaceImpl(CMNamespace proxy, final String prefix)
{
_proxy = proxy;
_prefix = prefix;
}
public String getPrefix()
{
return _prefix;
}
public String getURI()
{
return _proxy.getURI();
}
public String getNodeName()
{
return _proxy.getNodeName();
}
public int getNodeType()
{
return _proxy.getNodeType();
}
public Object getProperty(String propertyName)
{
return _proxy.getProperty(propertyName);
}
public boolean supports(String propertyName)
{
return _proxy.supports(propertyName);
}
}
}