/*
* The JabaJaba class library
* Copyright (C) 1997-2004 ASAMI, Tomoharu (asami@AsamiOffice.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package com.AsamiOffice.xml;
import java.net.MalformedURLException;
import java.net.URL;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.TypeInfo;
import org.w3c.dom.UserDataHandler;
import com.AsamiOffice.text.UString;
/**
* SmartElement
*
* @since Aug. 18, 1999
* @version Aug. 11, 2004
* @author ASAMI, Tomoharu (asami@AsamiOffice.com)
*/
public class SmartElement implements Element {
protected Element element_;
protected String localName_;
protected String prefix_;
protected String namespaceURI_;
public SmartElement(Element element) {
if (element == null) {
throw (new IllegalArgumentException());
}
element_ = element;
}
// Node
public String getNodeName() {
return (element_.getNodeName());
}
// Node
public String getNodeValue() throws DOMException {
return (element_.getNodeValue());
}
// Node
public void setNodeValue(String nodeValue) throws DOMException {
element_.setNodeValue(nodeValue);
}
// Node
public short getNodeType() {
return (element_.getNodeType());
}
// Node
public Node getParentNode() {
return (element_.getParentNode());
}
// Node
public NodeList getChildNodes() {
return (element_.getChildNodes());
}
// Node
public Node getFirstChild() {
return (element_.getFirstChild());
}
// Node
public Node getLastChild() {
return (element_.getLastChild());
}
// Node
public Node getPreviousSibling() {
return (element_.getPreviousSibling());
}
// Node
public Node getNextSibling() {
return (element_.getNextSibling());
}
// Node
public NamedNodeMap getAttributes() {
return (element_.getAttributes());
}
// Node
public Document getOwnerDocument() {
return (element_.getOwnerDocument());
}
// Node
public Node insertBefore(Node newChild, Node refChild)
throws DOMException {
return (element_.insertBefore(newChild, refChild));
}
// Node
public Node replaceChild(Node newChild, Node oldChild)
throws DOMException {
return (element_.replaceChild(newChild, oldChild));
}
// Node
public Node removeChild(Node oldChild) throws DOMException {
return (element_.removeChild(oldChild));
}
// Node
public Node appendChild(Node newChild) throws DOMException {
return (element_.appendChild(newChild));
}
// Node
public boolean hasChildNodes() {
return (element_.hasChildNodes());
}
// Node
public Node cloneNode(boolean deep) {
return (element_.cloneNode(deep));
}
// Node
public boolean isSupported(String feature, String version) {
return (element_.isSupported(feature, version));
}
// Element
public String getTagName() {
return (element_.getTagName());
}
// Element
public String getAttribute(String name) {
return (element_.getAttribute(name));
}
// Element
public void setAttribute(String name, String value) throws DOMException {
element_.setAttribute(name, value);
}
// Element
public void removeAttribute(String name) throws DOMException {
element_.removeAttribute(name);
}
// Element
public Attr getAttributeNode(String name) {
return (element_.getAttributeNode(name));
}
// Element
public Attr setAttributeNode(Attr newAttr) throws DOMException {
return (element_.setAttributeNode(newAttr));
}
// Element
public Attr removeAttributeNode(Attr oldAttr) throws DOMException {
return (element_.removeAttributeNode(oldAttr));
}
// Element
public NodeList getElementsByTagName(String name) {
return (element_.getElementsByTagName(name));
}
// Element
public void normalize() {
element_.normalize();
}
// DOM2
public String getAttributeNS(String namespaceURI, String localName) {
throw (new UnsupportedOperationException());
}
public boolean supports(String feature, String version) {
throw (new UnsupportedOperationException());
}
public Attr getAttributeNodeNS(String namespaceURI, String localName) {
throw (new UnsupportedOperationException());
}
public void removeAttributeNS(String namespaceURI, String localName) {
throw (new UnsupportedOperationException());
}
public void setAttributeNS(
String namespaceURI,
String localName,
String value
) {
throw (new UnsupportedOperationException());
}
public void setPrefix(String prefix) {
throw (new UnsupportedOperationException());
}
public NodeList getElementsByTagNameNS(
String namespaceURI,
String tagName
) {
String displayName = getDisplayName(namespaceURI, tagName);
return (element_.getElementsByTagName(displayName));
}
public Attr setAttributeNodeNS(Attr attr) {
throw (new UnsupportedOperationException());
}
public boolean hasAttributes() {
throw (new UnsupportedOperationException());
}
public boolean hasAttribute(String name) {
throw (new UnsupportedOperationException());
}
public boolean hasAttributeNS(String namespaceURI, String name) {
throw (new UnsupportedOperationException());
}
// namespace operation
public boolean isTag(String namespaceURI, String localName) {
_setupNamespace();
return (
namespaceURI.equals(namespaceURI_) &&
localName.equals(localName_)
);
}
public String getPrefix() {
_setupNamespace();
return (prefix_);
}
public String getLocalName() {
_setupNamespace();
return (localName_);
}
public String getNamespaceURI() {
_setupNamespace();
return (namespaceURI_);
}
public String getDisplayName(
String namespaceURI,
String tagName
) {
String prefix = _findPrefixByNamespaceURI(namespaceURI, element_);
if (prefix == null) {
return (tagName);
} else if ("".equals(prefix)) { // default namespace
return (tagName);
} else {
return (prefix + ":" + tagName);
}
}
private void _setupNamespace() {
if (localName_ != null) {
return;
}
String tagName = element_.getTagName();
String[] tokens = UString.getPairTokens(tagName, ":");
if (tokens.length == 1) {
localName_ = tokens[0];
prefix_ = "";
namespaceURI_ = _findDefaultNamespaceURI(element_);
} else {
prefix_ = tokens[0];
localName_ = tokens[1];
namespaceURI_ = _findNamespaceURI(prefix_, element_);
}
}
private String _findDefaultNamespaceURI(Element element) {
return (_findNamespaceURIByAttributeName("xmlns", element));
}
private String _findNamespaceURI(String prefix, Element element) {
return (_findNamespaceURIByAttributeName("xmlns:" + prefix, element));
}
private String _findNamespaceURIByAttributeName(
String name,
Element element
) {
for (;;) {
String attr = UString.checkNull(element.getAttribute(name));
if (attr != null) {
return (attr);
}
Node parent = element.getParentNode();
if (parent == null) {
return (null);
}
if (parent.getNodeType() != Node.ELEMENT_NODE) {
return (null);
}
element = (Element)parent;
}
}
public String getAttributeAsString(
String namespaceURI,
String localName
) {
String prefix = _findPrefixByNamespaceURI(namespaceURI, element_);
if (prefix == null) {
return (null);
} else if ("".equals(prefix)) { // default namespace
return (UString.checkNull(element_.getAttribute(localName)));
} else {
return (
UString.checkNull(
element_.getAttribute(prefix + ":" + localName)
)
);
}
}
private String _findPrefixByNamespaceURI(
String namespaceURI,
Element element
) {
if (namespaceURI == null) {
namespaceURI = "";
}
for (;;) {
NamedNodeMap attrs = element.getAttributes();
int size = attrs.getLength();
for (int i = 0;i < size;i++) {
Attr attr = (Attr)attrs.item(i);
String value = attr.getValue();
if (namespaceURI.equals(value)) {
String name = attr.getName();
if ("xmlns".equals(name)) {
return ("");
}
if (name.startsWith("xmlns:")) {
return (name.substring("xmlns:".length()));
}
}
}
Node parent = element.getParentNode();
if (parent == null) {
return (null);
}
if (parent.getNodeType() != Node.ELEMENT_NODE) {
return (null);
}
element = (Element)parent;
}
}
// XML Base
public String getXMLBaseAsString() {
return (UElement.getXMLBaseAsString(element_));
}
// element operation
public Element getElement() {
return (element_);
}
public Element[] getElements() {
return (UElement.getElements(element_));
}
public Element[] getElements(String name) {
return (UElement.getElements(element_, name));
}
public Element[] getElements(String namespaceURI, String localName) {
return (UElement.getElements(element_, namespaceURI, localName));
}
public Element[] getElementsRecursive(String name) {
return (UElement.getElementsRecursive(element_, name));
}
public Element getOnlyElement(String name)
throws IllegalArgumentException {
return (UElement.getOnlyElement(element_, name));
}
public Element getOnlyElement(String namespaceURI, String localName)
throws IllegalArgumentException {
return (UElement.getOnlyElement(element_, namespaceURI, localName));
}
public Element getOnlyElementRecursive(String name)
throws IllegalArgumentException {
return (UElement.getOnlyElementRecursive(element_, name));
}
// attribute operation
public String getAttributeAsCDATA(String name) {
return (UElement.getAttributeAsCDATA(element_, name));
}
public String getAttributeAsNMTOKEN(String name) {
return (UElement.getAttributeAsNMTOKEN(element_, name));
}
public String[] getAttributeAsNMTOKENS(String name) {
return (UElement.getAttributeAsNMTOKENS(element_, name));
}
public String getAttributeAsString(String name) {
return (UElement.getAttributeAsString(element_, name));
}
public boolean getAttributeAsBoolean(String name) {
return (UElement.getAttributeAsBoolean(element_, name));
}
public boolean getAttributeAsBoolean(String name, boolean defaultValue) {
return (UElement.getAttributeAsBoolean(element_, name, defaultValue));
}
public Number getAttributeAsNumber(String name) {
return (UElement.getAttributeAsNumber(element_, name));
}
public Number getAttributeAsNumber(String name, Number defaultValue) {
return (UElement.getAttributeAsNumber(element_, name, defaultValue));
}
public URL getAttributeAsURL(String name) throws MalformedURLException {
return (UElement.getAttributeAsURL(element_, name));
}
public URL getAttributeAsURLByFileOrURLName(String name)
throws IllegalArgumentException {
return (UElement.getAttributeAsURLByFileOrURLName(element_, name));
}
public int getAttributeAsEnumerationNumber(
String name,
String[] candidates,
int base
) {
return (
UElement.getAttributeAsEnumerationNumber(
element_,
name,
candidates,
base
)
);
}
public int getAttributeAsEnumerationNumber(
String name,
String[] candidates,
int base,
String defaultValue
) {
return (
UElement.getAttributeAsEnumerationNumber(
element_,
name,
candidates,
base,
defaultValue
)
);
}
// method and attribute
public String getAttributeOfOnlyElementAsString(
String tagName,
String attrName
) throws IllegalArgumentException {
return (
UElement.getAttributeOfOnlyElementAsString(
element_,
tagName,
attrName
)
);
}
public String getAttributeOfOnlyElementRecursiveAsString(
String tagName,
String attrName
) throws IllegalArgumentException {
return (
UElement.getAttributeOfOnlyElementRecursiveAsString(
element_,
tagName,
attrName
)
);
}
public Integer getAttributeOfOnlyElementAsInteger(
String tagName,
String attrName
) throws IllegalArgumentException {
return (
UElement.getAttributeOfOnlyElementAsInteger(
element_,
tagName,
attrName
)
);
}
public Float getAttributeOfOnlyElementAsFloat(
String tagName,
String attrName
) throws IllegalArgumentException {
return (
UElement.getAttributeOfOnlyElementAsFloat(
element_,
tagName,
attrName
)
);
}
public Double getAttributeOfOnlyElementAsDouble(
String tagName,
String attrName
) throws IllegalArgumentException {
return (
UElement.getAttributeOfOnlyElementAsDouble(
element_,
tagName,
attrName
)
);
}
// data operation
public Number getDataAsNumber() {
return (UElement.getDataAsNumber(element_));
}
public Number getDataAsNumber(String name) {
return (UElement.getDataAsNumber(element_, name));
}
public Long getDataAsLong() {
return (UElement.getDataAsLong(element_));
}
public Long getDataAsLong(String name) {
return (UElement.getDataAsLong(element_, name));
}
// DOM 3
public TypeInfo getSchemaTypeInfo() {
// TODO Auto-generated method stub
return null;
}
public void setIdAttribute(String arg0, boolean arg1) throws DOMException {
// TODO Auto-generated method stub
}
public void setIdAttributeNS(String arg0, String arg1, boolean arg2) throws DOMException {
// TODO Auto-generated method stub
}
public void setIdAttributeNode(Attr arg0, boolean arg1) throws DOMException {
// TODO Auto-generated method stub
}
public String getBaseURI() {
// TODO Auto-generated method stub
return null;
}
public short compareDocumentPosition(Node arg0) throws DOMException {
// TODO Auto-generated method stub
return 0;
}
public String getTextContent() throws DOMException {
// TODO Auto-generated method stub
return null;
}
public void setTextContent(String arg0) throws DOMException {
// TODO Auto-generated method stub
}
public boolean isSameNode(Node arg0) {
// TODO Auto-generated method stub
return false;
}
public String lookupPrefix(String arg0) {
// TODO Auto-generated method stub
return null;
}
public boolean isDefaultNamespace(String arg0) {
// TODO Auto-generated method stub
return false;
}
public String lookupNamespaceURI(String arg0) {
// TODO Auto-generated method stub
return null;
}
public boolean isEqualNode(Node arg0) {
// TODO Auto-generated method stub
return false;
}
public Object getFeature(String arg0, String arg1) {
// TODO Auto-generated method stub
return null;
}
public Object setUserData(String arg0, Object arg1, UserDataHandler arg2) {
// TODO Auto-generated method stub
return null;
}
public Object getUserData(String arg0) {
// TODO Auto-generated method stub
return null;
}
}