1 package uba.db.ar;
2
3 import java.util.*;
4
5 /***
6 * @version 1.0
7 * @todo Hay que mejorar el mecanismo de como itera esto!
8 */
9
10 public class TupleCollection implements TupleProvider {
11 private TuplaDef myTupleDef;
12
13 private List contents;
14
15 private Iterator lastUsedIterator;
16
17 public TupleCollection(TuplaDef tuplaDefinition) {
18 contents = new ArrayList();
19 myTupleDef = tuplaDefinition;
20 }
21
22 /***
23 * hasNext
24 *
25 * @return boolean
26 */
27 public boolean hasNext() {
28 Iterator i = iterator();
29 return (i.hasNext());
30 }
31
32 /***
33 * iterator
34 *
35 * @return Iterator
36 * @todo Esto no esta muy bien, ver como se puede mejorar
37 */
38
39 private Iterator iterator() {
40 if (lastUsedIterator == null) {
41 lastUsedIterator = contents.iterator();
42 }
43 return lastUsedIterator;
44 }
45
46 /***
47 * next
48 *
49 * @return Tupla
50 * @todo Chequear que efectivamente haya un hasNext, otherwise raise
51 * exception
52 */
53 public Tupla next() {
54 Iterator i = iterator();
55 return ((Tupla) i.next());
56 }
57
58 public TuplaDef tupleDefinition() {
59 return myTupleDef;
60 }
61
62 public int size() {
63 return contents.size();
64 }
65
66 /***
67 * addTupla
68 *
69 * @param tupla
70 * Tupla
71 * @todo Aca falta el chequeo de que la tupla def de la tupla que llega sea
72 * igual a la tupla def del container. Pero esto requeriria
73 * implementar cosas adicionales en otras clases, que por ahora no lo
74 * voy a hacer.
75 */
76
77 public void addTupla(Tupla tupla) {
78 contents.add(tupla);
79 }
80
81 public String toString() {
82 String result;
83 Iterator i = contents.iterator();
84 result = getClass().getName() + ": [\n" + myTupleDef.toString()
85 + "\n\n";
86 while (i.hasNext()) {
87 result = result + ((Tupla) i.next()).toString() + "\n";
88 }
89 result = result + "\n] (Tuplas: " + (new Integer(size())).toString()
90 + ")";
91 return result;
92 }
93
94 public void reset() {
95 lastUsedIterator = null;
96 }
97
98 }