/** * Copyright (C) 2010-2017 Structr GmbH * * This file is part of Structr <http://structr.org>. * * Structr is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * Structr 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Structr. If not, see <http://www.gnu.org/licenses/>. */ package org.structr.web.entity.dom; 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; /** * * */ public class DOMAttribute implements Attr, DOMImportable, DOMAdoptable { private DOMElement parent = null; private boolean specified = false; private boolean isId = false; private String name = null; private String value = null; private Page page = null; public DOMAttribute(Page page, DOMElement parent, String name, String value) { this(page, parent, name, value, true, false); } public DOMAttribute(Page page, DOMElement parent, String name, String value, boolean specified, boolean isId) { this.page = page; this.specified = specified; this.isId = isId; this.parent = parent; this.name = name; this.value = value; } @Override public boolean equals(Object o) { if (o instanceof DOMAttribute) { return ((DOMAttribute)o).hashCode() == hashCode(); } return false; } @Override public int hashCode() { return (name.hashCode() * 31) + value.hashCode(); } @Override public String toString() { return value; } @Override public String getNodeName() { return name; } @Override public String getNodeValue() throws DOMException { return value; } @Override public void setNodeValue(String value) throws DOMException { this.value = value; } @Override public short getNodeType() { return ATTRIBUTE_NODE; } @Override public Node getParentNode() { return parent; } @Override public NodeList getChildNodes() { return null; } @Override public Node getFirstChild() { return null; } @Override public Node getLastChild() { return null; } @Override public Node getPreviousSibling() { if (parent != null) { String previousAttributeName = parent.getOffsetAttributeName(name, -1); if (previousAttributeName != null) { return parent.getAttributeNode(previousAttributeName); } } return null; } @Override public Node getNextSibling() { if (parent != null) { String nextAttributeName = parent.getOffsetAttributeName(name, 1); if (nextAttributeName != null) { return parent.getAttributeNode(nextAttributeName); } } return null; } @Override public NamedNodeMap getAttributes() { return null; } @Override public Document getOwnerDocument() { return page; } @Override public Node insertBefore(Node node, Node node1) throws DOMException { return null; } @Override public Node replaceChild(Node node, Node node1) throws DOMException { return null; } @Override public Node removeChild(Node node) throws DOMException { return null; } @Override public Node appendChild(Node node) throws DOMException { return null; } @Override public boolean hasChildNodes() { return false; } @Override public Node cloneNode(boolean bln) { return null; } @Override public void normalize() { } @Override public boolean isSupported(String string, String string1) { return false; } @Override public String getNamespaceURI() { return parent.getNamespaceURI(); } @Override public String getPrefix() { return null; } @Override public void setPrefix(String prefix) throws DOMException { } @Override public String getLocalName() { return getNodeName(); } @Override public boolean hasAttributes() { return false; } @Override public String getBaseURI() { return null; } @Override public short compareDocumentPosition(Node node) throws DOMException { throw new UnsupportedOperationException("Not supported yet."); } @Override public String getTextContent() throws DOMException { return value; } @Override public void setTextContent(String text) throws DOMException { this.value = text; } @Override public boolean isSameNode(Node node) { return getNodeName().equals(node.getNodeName()); } @Override public String lookupPrefix(String string) { return null; } @Override public boolean isDefaultNamespace(String string) { return true; } @Override public String lookupNamespaceURI(String string) { return null; } @Override public boolean isEqualNode(Node node) { return equals(node); } @Override public Object getFeature(String string, String string1) { return null; } @Override public Object setUserData(String string, Object o, UserDataHandler udh) { return null; } @Override public Object getUserData(String string) { return null; } @Override public String getName() { return getNodeName(); } @Override public boolean getSpecified() { return specified; } @Override public String getValue() { return getNodeValue(); } @Override public void setValue(String value) throws DOMException { setNodeValue(value); } @Override public Element getOwnerElement() { return parent; } @Override public TypeInfo getSchemaTypeInfo() { return null; } @Override public boolean isId() { return isId; } public void setParent(DOMElement parent) { this.parent = parent; } // ----- interface DOMAdoptable ----- @Override public Node doAdopt(final Page _page) throws DOMException { this.page = _page; return this; } // ----- interface DOMImportable ----- @Override public Node doImport(Page newPage) throws DOMException { Attr newAttr = newPage.createAttribute(name); newAttr.setValue(value); return newAttr; } }