1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package org.apache.harmony.xml.dom;
18 
19 import org.w3c.dom.Attr;
20 import org.w3c.dom.DOMException;
21 import org.w3c.dom.Element;
22 import org.w3c.dom.Node;
23 import org.w3c.dom.TypeInfo;
24 
25 /**
26  * Provides a straightforward implementation of the corresponding W3C DOM
27  * interface. The class is used internally only, thus only notable members that
28  * are not in the original interface are documented (the W3C docs are quite
29  * extensive). Hope that's ok.
30  * <p>
31  * Some of the fields may have package visibility, so other classes belonging to
32  * the DOM implementation can easily access them while maintaining the DOM tree
33  * structure.
34  */
35 public final class AttrImpl extends NodeImpl implements Attr {
36 
37     // Maintained by ElementImpl.
38     ElementImpl ownerElement;
39     boolean isId;
40 
41     boolean namespaceAware;
42     String namespaceURI;
43     String prefix;
44     String localName;
45 
46     private String value = "";
47 
AttrImpl(DocumentImpl document, String namespaceURI, String qualifiedName)48     AttrImpl(DocumentImpl document, String namespaceURI, String qualifiedName) {
49         super(document);
50         setNameNS(this, namespaceURI, qualifiedName);
51     }
52 
AttrImpl(DocumentImpl document, String name)53     AttrImpl(DocumentImpl document, String name) {
54         super(document);
55         setName(this, name);
56     }
57 
58     @Override
getLocalName()59     public String getLocalName() {
60         return namespaceAware ? localName : null;
61     }
62 
getName()63     public String getName() {
64         return prefix != null
65                 ? prefix + ":" + localName
66                 : localName;
67     }
68 
69     @Override
getNamespaceURI()70     public String getNamespaceURI() {
71         return namespaceURI;
72     }
73 
74     @Override
getNodeName()75     public String getNodeName() {
76         return getName();
77     }
78 
getNodeType()79     public short getNodeType() {
80         return Node.ATTRIBUTE_NODE;
81     }
82 
83     @Override
getNodeValue()84     public String getNodeValue() {
85         return getValue();
86     }
87 
getOwnerElement()88     public Element getOwnerElement() {
89         return ownerElement;
90     }
91 
92     @Override
getPrefix()93     public String getPrefix() {
94         return prefix;
95     }
96 
getSpecified()97     public boolean getSpecified() {
98         return value != null;
99     }
100 
getValue()101     public String getValue() {
102         return value;
103     }
104 
105     @Override
setPrefix(String prefix)106     public void setPrefix(String prefix) {
107         this.prefix = validatePrefix(prefix, namespaceAware, namespaceURI);
108     }
109 
setValue(String value)110     public void setValue(String value) throws DOMException {
111         this.value = value;
112     }
113 
getSchemaTypeInfo()114     public TypeInfo getSchemaTypeInfo() {
115         // TODO: populate this when we support XML Schema
116         return NULL_TYPE_INFO;
117     }
118 
isId()119     public boolean isId() {
120         return isId;
121     }
122 }
123