View Javadoc

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  }