1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.backsource.xindice.cursor;
21 import java.util.AbstractList;
22 import org.apache.log4j.Logger;
23 import org.xmldb.api.base.ResourceSet;
24 import org.xmldb.api.base.XMLDBException;
25 import org.backsource.xindice.XindiceException;
26 /***
27 * Cursor for an XML:DB ResourceSet, is mostly used to get the cursor chain going, or for subclassing or usage as a delegator.
28 *
29 * @author <a href="mailto:pra@tim.se">Peter Antman</a>
30 * @version $Revision: 1.1.1.1 $
31 */
32
33 public class ResourceSetCursor extends AbstractList implements Cursor {
34 private static Logger log = Logger.getLogger(ResourceSetCursor .class);
35 protected ResourceSet set;
36 public ResourceSetCursor (ResourceSet set){
37 this.set = set;
38 }
39
40 /***
41 * Throws an XindiceException if used!.
42 */
43 public void setSource(Cursor cursor) throws XindiceException {
44 throw new XindiceException("This cursor can not have another cursor as a source");
45 }
46
47 public Object get(int i) throws java.lang.IndexOutOfBoundsException,IllegalStateException {
48 if ( set == null) {
49 throw new java.lang.IndexOutOfBoundsException("Set is null");
50 }
51 try {
52 return set.getResource(i);
53 } catch (XMLDBException e) {
54 log.error("Could not get resource from XML:DB: " + e,e);
55 throw new IllegalStateException("Could not get resource from XML:DB: " + e);
56 }
57
58 }
59
60 public int size() throws IllegalStateException{
61 try {
62 return set != null? (int)set.getSize() : 0;
63 } catch (XMLDBException e) {
64 log.error("Could not get size from XML:DB: " + e,e);
65 throw new IllegalStateException("Could not get size from XML:DB: " + e);
66 }
67
68 }
69
70 }