1 /**********************************************
2 * Copyright (C) 2010 Lukas Laag
3 * This file is part of lib-gwt-svg.
4 *
5 * libgwtsvg is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * libgwtsvg is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with libgwtsvg. If not, see http://www.gnu.org/licenses/
17 **********************************************/
18 /*
19 * Copyright (c) 2004 World Wide Web Consortium,
20 *
21 * (Massachusetts Institute of Technology, European Research Consortium for
22 * Informatics and Mathematics, Keio University). All Rights Reserved. This
23 * work is distributed under the W3C(r) Software License [1] in the hope that
24 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
25 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26 *
27 * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
28 */
29
30 package org.vectomatic.dom.svg;
31
32 import java.util.Iterator;
33
34 import com.google.gwt.core.client.JavaScriptException;
35 import com.google.gwt.core.client.JavaScriptObject;
36
37 /**
38 * <p>This interface defines a list of DOMString values.</p> <p>{@link org.vectomatic.dom.svg.OMSVGStringList}
39 * has the same attributes and methods as other SVGxxxList interfaces. Implementers
40 * may consider using a single base class to implement the various SVGxxxList
41 * interfaces.</p>
42 */
43 public class OMSVGStringList implements Iterable<String> {
44 private JavaScriptObject ot;
45 protected OMSVGStringList(JavaScriptObject ot) {
46 this.ot = ot;
47 }
48
49 // Implementation of the svg::SVGStringList W3C IDL interface
50 /**
51 * The number of items in the list.
52 */
53 public final native int getNumberOfItems() /*-{
54 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.numberOfItems;
55 }-*/;
56 /**
57 * Clears all existing current items from the list, with the result being
58 * an empty list.
59 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list
60 * cannot be modified.
61 */
62 public final native void clear() throws JavaScriptException /*-{
63 this.@org.vectomatic.dom.svg.OMSVGStringList::ot.clear();
64 }-*/;
65 /**
66 * Clears all existing current items from the list and re-initializes the
67 * list to hold the single item specified by the parameter.
68 * @param newItem The item which should become the only member of the list.
69 * @return The item being inserted into the list.
70 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list
71 * cannot be modified.
72 */
73 public final native String initialize(String newItem) throws JavaScriptException /*-{
74 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.initialize(newItem);
75 }-*/;
76 /**
77 * Returns the specified item from the list.
78 * @param index The index of the item from the list which is to be returned.
79 * The first item is number 0.
80 * @return The selected item.
81 * @throws DOMException(INDEX_SIZE_ERR) Raised if the index number is greater
82 * than or equal to {@link org.vectomatic.dom.svg.OMSVGStringList#getNumberOfItems()}.
83 */
84 public final native String getItem(int index) throws JavaScriptException /*-{
85 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.getItem(index);
86 }-*/;
87 /**
88 * Inserts a new item into the list at the specified position. The first item
89 * is number 0.
90 * @param newItem The item which is to be inserted into the list.
91 * @param index The index of the item before which the new item is to be
92 * inserted. The first item is number 0. If the index is equal to 0, then
93 * the new item is inserted at the front of the list. If the index is greater
94 * than or equal to {@link org.vectomatic.dom.svg.OMSVGStringList#getNumberOfItems()},
95 * then the new item is appended to the end of the list.
96 * @return The inserted item.
97 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list
98 * cannot be modified.
99 */
100 public final native String insertItemBefore(String newItem, int index) throws JavaScriptException /*-{
101 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.insertItemBefore(newItem, index);
102 }-*/;
103 /**
104 * Replaces an existing item in the list with a new item.
105 * @param newItem The item which is to be inserted into the list.
106 * @param index The index of the item which is to be replaced. The first
107 * item is number 0.
108 * @return The inserted item.
109 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list
110 * cannot be modified.
111 * @throws DOMException(INDEX_SIZE_ERR) Raised if the index number is greater
112 * than or equal to {@link org.vectomatic.dom.svg.OMSVGStringList#getNumberOfItems()}.
113 */
114 public final native String replaceItem(String newItem, int index) throws JavaScriptException /*-{
115 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.replaceItem(newItem, index);
116 }-*/;
117 /**
118 * Removes an existing item from the list.
119 * @param index The index of the item which is to be removed. The first
120 * item is number 0.
121 * @return The removed item.
122 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list
123 * cannot be modified.
124 * @throws DOMException(INDEX_SIZE_ERR) Raised if the index number is greater
125 * than or equal to {@link org.vectomatic.dom.svg.OMSVGStringList#getNumberOfItems()}.
126 */
127 public final native String removeItem(int index) throws JavaScriptException /*-{
128 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.removeItem(index);
129 }-*/;
130 /**
131 * Inserts a new item at the end of the list.
132 * @param newItem The item which is to be inserted. The first item is number
133 * 0.
134 * @return The inserted item.
135 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list
136 * cannot be modified.
137 */
138 public final native String appendItem(String newItem) throws JavaScriptException /*-{
139 return this.@org.vectomatic.dom.svg.OMSVGStringList::ot.appendItem(newItem);
140 }-*/;
141
142 /**
143 * Returns an iterator over the {@link java.lang.String}
144 * elements in this list in proper sequence.
145 *
146 * <p>This implementation returns a straightforward implementation of the
147 * iterator interface, relying on the backing list's {@code getNumberOfItems()},
148 * and {@code getItem(int)} methods.
149 *
150 * <p>Note that the iterator returned by this method will throw an
151 * {@code UnsupportedOperationException} in response to its
152 * {@code remove} method.
153 *
154 * @return an iterator over the {@link java.lang.String}
155 * elements in this list in proper sequence
156 */
157 @Override
158 public final Iterator<String> iterator() {
159 return new Iterator<String>() {
160 private int index;
161 @Override
162 public boolean hasNext() {
163 return index < getNumberOfItems();
164 }
165
166 @Override
167 public String next() {
168 return getItem(index++);
169 }
170
171 @Override
172 public void remove() {
173 throw new UnsupportedOperationException();
174 }
175 };
176 }
177
178 }