package org.eclipse.jst.jsf.context.resolver.structureddocument.internal.impl; import org.eclipse.jst.jsf.context.IModelContext; import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver; import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.IStructuredDocumentContextResolverFactory2; import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.IXMLNodeContextResolver; import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext; import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2; import org.w3c.dom.Attr; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * A default resolver based on the dom context resolver. * */ public class DOMBasedXMLNodeContextResolver implements IXMLNodeContextResolver { private IDOMContextResolver delegate; /** * @param delegate */ public DOMBasedXMLNodeContextResolver(final IDOMContextResolver delegate) { this.delegate = delegate; } public IXMLNodeContextResolver getParentNodeResolver() { Node node = this.delegate.getNode(); Element parentNode = null; if (node instanceof Attr) { parentNode = ((Attr)node).getOwnerElement(); } else if (node instanceof Element) { parentNode = (Element) ((Element)node).getParentNode(); } if (parentNode != null) { IStructuredDocumentContext context = IStructuredDocumentContextFactory2.INSTANCE.getContext(parentNode); if (context != null) { IDOMContextResolver domContextResolver = IStructuredDocumentContextResolverFactory2.INSTANCE.getDOMContextResolver(context); if (domContextResolver != null) { return new DOMBasedXMLNodeContextResolver(domContextResolver); } } } return null; } public boolean isAttribute() { return this.delegate.getNode() instanceof Attr; } public String getValue() { Node node = this.delegate.getNode(); if (node instanceof Attr) { return ((Attr)node).getValue(); } return null; } public String getLocalName() { Node node = this.delegate.getNode(); if (node instanceof Attr) { return ((Attr)node).getLocalName(); } else if (node instanceof Element) { return ((Element)node).getLocalName(); } return null; } public String getNamespaceURI() { Node node = this.delegate.getNode(); if (node != null) { return node.getNamespaceURI(); } return null; } public void setContext(IModelContext context) { // ignore since this resolver is just delegating to a dom context. } }