package org.basex.api.dom; import org.basex.query.item.FTxt; import org.basex.query.item.ANode; import org.basex.query.iter.NodeCache; import org.basex.util.Token; import org.basex.util.Util; import org.w3c.dom.Attr; import org.w3c.dom.TypeInfo; /** * DOM - Attribute implementation. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class BXAttr extends BXNode implements Attr { /** * Constructor. * @param n node reference */ public BXAttr(final ANode n) { super(n); } @Override public String getNodeName() { return Token.string(node.name()); } @Override public String getLocalName() { return Token.string(Token.local(node.name())); } @Override public String getNodeValue() { return Token.string(node.string()); } @Override public String getName() { return getNodeName(); } @Override public String getNamespaceURI() { final byte[] uri = node.qname().uri(); return uri.length == 0 ? null : Token.string(uri); } @Override public BXNode getNextSibling() { return null; } @Override public BXNode getPreviousSibling() { return null; } @Override public BXElem getOwnerElement() { return (BXElem) getParentNode(); } @Override public String getValue() { return getNodeValue(); } @Override public boolean isId() { return false; } @Override public boolean getSpecified() { return false; } @Override public TypeInfo getSchemaTypeInfo() { Util.notimplemented(); return null; } @Override public void setValue(final String value) { readOnly(); } @Override public BXText getFirstChild() { return new BXText(text()); } @Override public BXNList getChildNodes() { final NodeCache nb = new NodeCache(); nb.add(text()); return new BXNList(nb); } /** * Returns the attribute value as text node. * @return text node */ private FTxt text() { final FTxt n = new FTxt(node.string()); n.parent(node); return n; } }