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. | |
} | |
} |