| 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); |
| } |
| } |
| } |