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 SVGLength objects.</p> <p>{@link org.vectomatic.dom.svg.OMSVGLengthList} 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> <p id="ReadOnlyLengthList">An {@link org.vectomatic.dom.svg.OMSVGLengthList} 42 * object can be designated as <em>read only</em>, which means that attempts 43 * to modify the object will result in an exception being thrown, as described 44 * below.</p> 45 */ 46 public class OMSVGLengthList implements Iterable<OMSVGLength> { 47 private JavaScriptObject ot; 48 protected OMSVGLengthList(JavaScriptObject ot) { 49 this.ot = ot; 50 } 51 52 // Implementation of the svg::SVGLengthList W3C IDL interface 53 /** 54 * The number of items in the list. 55 */ 56 public final native int getNumberOfItems() /*-{ 57 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.numberOfItems; 58 }-*/; 59 /** 60 * Clears all existing current items from the list, with the result being 61 * an empty list. 62 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 63 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 64 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 65 */ 66 public final native void clear() throws JavaScriptException /*-{ 67 this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.clear(); 68 }-*/; 69 /** 70 * Clears all existing current items from the list and re-initializes the 71 * list to hold the single item specified by the parameter. If the inserted 72 * item is already in a list, it is removed from its previous list before 73 * it is inserted into this list. The inserted item is the item itself and 74 * not a copy. 75 * @param newItem The item which should become the only member of the list. 76 * @return The item being inserted into the list. 77 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 78 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 79 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 80 */ 81 public final native OMSVGLength initialize(OMSVGLength newItem) throws JavaScriptException /*-{ 82 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.initialize(newItem); 83 }-*/; 84 /** 85 * Returns the specified item from the list. The returned item is the item 86 * itself and not a copy. Any changes made to the item are immediately reflected 87 * in the list. 88 * @param index The index of the item from the list which is to be returned. 89 * The first item is number 0. 90 * @return The selected item. 91 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 92 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 93 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 94 */ 95 public final native OMSVGLength getItem(int index) throws JavaScriptException /*-{ 96 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.getItem(index); 97 }-*/; 98 /** 99 * Inserts a new item into the list at the specified position. The first item 100 * is number 0. If <var>newItem</var> is already in a list, it is removed 101 * from its previous list before it is inserted into this list. The inserted 102 * item is the item itself and not a copy. If the item is already in this 103 * list, note that the index of the item to insert before is <i>before</i> 104 * the removal of the item. 105 * @param newItem The item which is to be inserted into the list. 106 * @param index The index of the item before which the new item is to be 107 * inserted. The first item is number 0. If the index is equal to 0, then 108 * the new item is inserted at the front of the list. If the index is greater 109 * than or equal to {@link org.vectomatic.dom.svg.OMSVGLengthList#getNumberOfItems()}, 110 * then the new item is appended to the end of the list. 111 * @return The inserted item. 112 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 113 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 114 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 115 */ 116 public final native OMSVGLength insertItemBefore(OMSVGLength newItem, int index) throws JavaScriptException /*-{ 117 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.insertItemBefore(newItem, index); 118 }-*/; 119 /** 120 * Replaces an existing item in the list with a new item. If <var>newItem</var> 121 * is already in a list, it is removed from its previous list before it is 122 * inserted into this list. The inserted item is the item itself and not 123 * a copy. If the item is already in this list, note that the index of the 124 * item to replace is <i>before</i> the removal of the item. 125 * @param newItem The item which is to be inserted into the list. 126 * @param index The index of the item which is to be replaced. The first 127 * item is number 0. 128 * @return The inserted item. 129 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 130 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 131 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 132 * @throws DOMException(INDEX_SIZE_ERR) Raised if the index number is greater 133 * than or equal to {@link org.vectomatic.dom.svg.OMSVGLengthList#getNumberOfItems()}. 134 */ 135 public final native OMSVGLength replaceItem(OMSVGLength newItem, int index) throws JavaScriptException /*-{ 136 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.replaceItem(newItem, index); 137 }-*/; 138 /** 139 * Removes an existing item from the list. 140 * @param index The index of the item which is to be removed. The first 141 * item is number 0. 142 * @return The removed item. 143 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 144 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 145 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 146 * @throws DOMException(INDEX_SIZE_ERR) Raised if the index number is greater 147 * than or equal to {@link org.vectomatic.dom.svg.OMSVGLengthList#getNumberOfItems()}. 148 */ 149 public final native OMSVGLength removeItem(int index) /*-{ 150 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.removeItem(index); 151 }-*/; 152 /** 153 * Inserts a new item at the end of the list. If <var>newItem</var> is already 154 * in a list, it is removed from its previous list before it is inserted into 155 * this list. The inserted item is the item itself and not a copy. 156 * @param newItem The item which is to be inserted. The first item is number 157 * 0. 158 * @return The inserted item. 159 * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised when the list 160 * corresponds to a <a href="svgdom.html#ReadOnlyNodes">read only attribute</a> 161 * or when the object itself is <a href="#ReadOnlyLengthList">read only</a>. 162 */ 163 public final native OMSVGLength appendItem(OMSVGLength newItem) throws JavaScriptException /*-{ 164 return this.@org.vectomatic.dom.svg.OMSVGLengthList::ot.appendItem(newItem); 165 }-*/; 166 167 /** 168 * Returns an iterator over the {@link org.vectomatic.dom.svg.OMSVGLength} 169 * elements in this list in proper sequence. 170 * 171 * <p>This implementation returns a straightforward implementation of the 172 * iterator interface, relying on the backing list's {@code getNumberOfItems()}, 173 * and {@code getItem(int)} methods. 174 * 175 * <p>Note that the iterator returned by this method will throw an 176 * {@code UnsupportedOperationException} in response to its 177 * {@code remove} method. 178 * 179 * @return an iterator over the {@link org.vectomatic.dom.svg.OMSVGLength} 180 * elements in this list in proper sequence 181 */ 182 @Override 183 public final Iterator<OMSVGLength> iterator() { 184 return new Iterator<OMSVGLength>() { 185 private int index; 186 @Override 187 public boolean hasNext() { 188 return index < getNumberOfItems(); 189 } 190 191 @Override 192 public OMSVGLength next() { 193 return getItem(index++); 194 } 195 196 @Override 197 public void remove() { 198 throw new UnsupportedOperationException(); 199 } 200 }; 201 } 202 }