1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.sourceforge.jwebunit.htmlunit;
23
24 import com.gargoylesoftware.htmlunit.html.DomElement;
25 import com.gargoylesoftware.htmlunit.html.DomNode;
26 import com.gargoylesoftware.htmlunit.html.HtmlElement;
27 import com.gargoylesoftware.htmlunit.html.HtmlInput;
28 import com.gargoylesoftware.htmlunit.html.HtmlOption;
29 import com.gargoylesoftware.htmlunit.html.HtmlTextArea;
30 import net.sourceforge.jwebunit.api.IElement;
31
32 import java.util.ArrayList;
33 import java.util.List;
34
35
36
37
38
39
40
41 public class HtmlUnitElementImpl implements IElement {
42
43
44
45
46 private DomElement element;
47
48 public HtmlUnitElementImpl(DomElement element) {
49 if (element == null)
50 throw new NullPointerException("Cannot create an IElement for a null element.");
51 this.element = element;
52 }
53
54
55
56
57
58
59 public String getAttribute(String name) {
60 if ("value".equals(name) && element instanceof HtmlOption) {
61
62 return ((HtmlOption) element).getValueAttribute();
63 } else {
64 if (!element.hasAttribute(name))
65 return null;
66
67 return element.getAttribute(name);
68 }
69 }
70
71
72
73
74
75
76 public String getName() {
77 return element.getNodeName();
78 }
79
80
81
82
83
84
85 public List<IElement> getChildren() {
86 List<IElement> children = new ArrayList<IElement>();
87 for (DomElement e : element.getChildElements()) {
88 if (e != null)
89 children.add(new HtmlUnitElementImpl(e));
90 }
91 return children;
92 }
93
94
95
96
97
98
99 public IElement getParent() {
100 DomNode p = element.getParentNode();
101 while (true) {
102 if (p == null)
103 return null;
104
105 if (p instanceof HtmlElement)
106 return new HtmlUnitElementImpl((HtmlElement) p);
107
108
109 p = p.getParentNode();
110 }
111 }
112
113
114
115
116
117
118 public String getTextContent() {
119 return element.getTextContent();
120 }
121
122
123
124
125
126
127 public IElement getElement(String xpath) {
128
129 return new HtmlUnitElementImpl((HtmlElement) element.getFirstByXPath(xpath));
130 }
131
132
133
134
135
136
137 public List<IElement> getElements(String xpath) {
138 List<IElement> elements = new ArrayList<IElement>();
139 for (Object o : element.getByXPath(xpath)) {
140 if (o instanceof HtmlElement)
141 elements.add(new HtmlUnitElementImpl((HtmlElement) o));
142 }
143 return elements;
144 }
145
146 public String toString() {
147 return "IElement[name=" + getName() + " wrapped=" + element + "]";
148 }
149
150
151
152
153
154
155 public void setAttribute(String string) {
156 element.setAttributeNS(null, string, "1");
157 }
158
159
160
161
162
163
164 public void setAttribute(String name, String value) {
165 if ("value".equals(name) && element instanceof HtmlInput) {
166
167 ((HtmlInput) element).setValueAttribute(value);
168 } else {
169 element.setAttribute(name, value);
170 }
171 }
172
173
174
175
176
177
178 public void setTextContent(String value) {
179 if (element instanceof HtmlTextArea) {
180 ((HtmlTextArea) element).setText(value);
181 } else {
182 element.setTextContent(value);
183 }
184 }
185
186 @Override
187 public int hashCode() {
188 final int prime = 31;
189 int result = 1;
190 result = prime * result + ((element == null) ? 0 : element.hashCode());
191 return result;
192 }
193
194 @Override
195 public boolean equals(Object obj) {
196 if (this == obj)
197 return true;
198 if (obj == null)
199 return false;
200 if (getClass() != obj.getClass())
201 return false;
202 final HtmlUnitElementImpl other = (HtmlUnitElementImpl) obj;
203 if (element == null) {
204 if (other.element != null)
205 return false;
206 } else if (!element.equals(other.element))
207 return false;
208 return true;
209 }
210
211
212
213
214
215
216 public DomElement getHtmlElement() {
217 return element;
218 }
219
220 }