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 MimeTypeArray extends HtmlUnitScriptable {
40  
41      private final List<MimeType> elements_ = new ArrayList<>();
42  
43      
44  
45  
46      @JsxConstructor
47      public void jsConstructor() {
48          
49      }
50  
51      
52  
53  
54  
55  
56      protected String getItemName(final Object element) {
57          return ((MimeType) element).getType();
58      }
59  
60      
61  
62  
63  
64  
65      @JsxFunction
66      public MimeType item(final int index) {
67          return elements_.get(index);
68      }
69  
70      
71  
72  
73      @Override
74      protected Object getWithPreemption(final String name) {
75          final MimeType response = namedItem(name);
76          if (response != null) {
77              return response;
78          }
79          return NOT_FOUND;
80      }
81  
82      
83  
84  
85      @Override
86      public boolean has(final String name, final Scriptable start) {
87          if (NOT_FOUND != getWithPreemption(name)) {
88              return true;
89          }
90  
91          return super.has(name, start);
92      }
93  
94      
95  
96  
97  
98      @Override
99      public final MimeType get(final int index, final Scriptable start) {
100         final MimeTypeArray array = (MimeTypeArray) start;
101         final List<MimeType> elements = array.elements_;
102 
103         if (index >= 0 && index < elements.size()) {
104             return elements.get(index);
105         }
106         return null;
107     }
108 
109     
110 
111 
112 
113 
114     @JsxFunction
115     public MimeType namedItem(final String name) {
116         for (final MimeType element : elements_) {
117             if (name.equals(getItemName(element))) {
118                 return element;
119             }
120         }
121         return null;
122     }
123 
124     
125 
126 
127 
128     @JsxGetter
129     public int getLength() {
130         return elements_.size();
131     }
132 
133     
134 
135 
136 
137     void add(final MimeType element) {
138         elements_.add(element);
139     }
140 
141     
142 
143 
144     @JsxSymbol
145     public Scriptable iterator() {
146         return JavaScriptEngine.newArrayIteratorTypeValues(getParentScope(), this);
147     }
148 }