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
17package org.apache.harmony.xml.dom;
18
19import org.w3c.dom.Attr;
20import org.w3c.dom.DOMException;
21import org.w3c.dom.Element;
22import org.w3c.dom.Node;
23import 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 */
35public 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
48    AttrImpl(DocumentImpl document, String namespaceURI, String qualifiedName) {
49        super(document);
50        setNameNS(this, namespaceURI, qualifiedName);
51    }
52
53    AttrImpl(DocumentImpl document, String name) {
54        super(document);
55        setName(this, name);
56    }
57
58    @Override
59    public String getLocalName() {
60        return namespaceAware ? localName : null;
61    }
62
63    public String getName() {
64        return prefix != null
65                ? prefix + ":" + localName
66                : localName;
67    }
68
69    @Override
70    public String getNamespaceURI() {
71        return namespaceURI;
72    }
73
74    @Override
75    public String getNodeName() {
76        return getName();
77    }
78
79    public short getNodeType() {
80        return Node.ATTRIBUTE_NODE;
81    }
82
83    @Override
84    public String getNodeValue() {
85        return getValue();
86    }
87
88    public Element getOwnerElement() {
89        return ownerElement;
90    }
91
92    @Override
93    public String getPrefix() {
94        return prefix;
95    }
96
97    public boolean getSpecified() {
98        return value != null;
99    }
100
101    public String getValue() {
102        return value;
103    }
104
105    @Override
106    public void setPrefix(String prefix) {
107        this.prefix = validatePrefix(prefix, namespaceAware, namespaceURI);
108    }
109
110    public void setValue(String value) throws DOMException {
111        this.value = value;
112    }
113
114    public TypeInfo getSchemaTypeInfo() {
115        // TODO: populate this when we support XML Schema
116        return NULL_TYPE_INFO;
117    }
118
119    public boolean isId() {
120        return isId;
121    }
122}
123