1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host;
16
17 import java.util.ArrayList;
18 import java.util.List;
19
20 import org.htmlunit.corejs.javascript.Scriptable;
21 import org.htmlunit.javascript.HtmlUnitScriptable;
22 import org.htmlunit.javascript.JavaScriptEngine;
23 import org.htmlunit.javascript.configuration.JsxClass;
24 import org.htmlunit.javascript.configuration.JsxConstructor;
25 import org.htmlunit.javascript.configuration.JsxFunction;
26 import org.htmlunit.javascript.configuration.JsxGetter;
27 import org.htmlunit.javascript.configuration.JsxSymbol;
28
29
30
31
32
33
34
35
36
37
38 @JsxClass
39 public class PluginArray extends HtmlUnitScriptable {
40
41 private final List<Plugin> elements_ = new ArrayList<>();
42
43
44
45
46 @JsxConstructor
47 public void jsConstructor() {
48
49 }
50
51
52
53
54
55
56 @JsxFunction
57 public Plugin item(final int index) {
58 if (index >= 0 && index < elements_.size()) {
59 return elements_.get(index);
60 }
61 return null;
62 }
63
64
65
66
67 @Override
68 protected Object getWithPreemption(final String name) {
69 final Plugin response = namedItem(name);
70 if (response != null) {
71 return response;
72 }
73 return NOT_FOUND;
74 }
75
76
77
78
79 @Override
80 public boolean has(final String name, final Scriptable start) {
81 if (NOT_FOUND != getWithPreemption(name)) {
82 return true;
83 }
84
85 return super.has(name, start);
86 }
87
88
89
90
91
92 @Override
93 public final Plugin get(final int index, final Scriptable start) {
94 final PluginArray array = (PluginArray) start;
95 final List<Plugin> elements = array.elements_;
96
97 if (index >= 0 && index < elements.size()) {
98 return elements.get(index);
99 }
100 return null;
101 }
102
103
104
105
106
107
108 @JsxFunction
109 public Plugin namedItem(final String name) {
110 for (final Plugin element : elements_) {
111 if (name.equals(getItemName(element))) {
112 return element;
113 }
114 }
115 return null;
116 }
117
118
119
120
121
122 @JsxGetter
123 public int getLength() {
124 return elements_.size();
125 }
126
127
128
129
130
131
132 @JsxFunction
133 public void refresh(final boolean reloadDocuments) {
134
135 }
136
137
138
139
140
141
142 protected String getItemName(final Object element) {
143 return ((Plugin) element).getName();
144 }
145
146
147
148
149
150 void add(final Plugin element) {
151 elements_.add(element);
152 }
153
154
155
156
157 @JsxSymbol
158 public Scriptable iterator() {
159 return JavaScriptEngine.newArrayIteratorTypeValues(getParentScope(), this);
160 }
161 }