... ci sono anche i commenti javadoc all'interno, spero vi sia di grande utilità.

Da non utilizzare a scopo di lucro.

Code :

package *.*;

import java.util.*;

/**
*

Title: ResultHolder </p>
*

Description : Questo oggetto costruisce una tabella dinamica in base alle esigenze.
* Per Costruire l'Oggetto ResultHolder basta settare i valori delle colonne.</p>
* @author Flavio Rocchi
* @e-mail: f.rocchi@inwind.it
* @website: www.topdesk.it
* @copyright: Da non utilizzare a scopo di lucro.
* $Id: ResultHolder.java,v 1.3 2002/10/18 16:33:20 rocchi Exp $
*/

public class ResultHolder {

private Hashtable hs = new Hashtable();
private final String TOKEN = new String("¿");


public ResultHolder() {
}
/**
* Questo metodo permette di avere l'indice della chiave (key) passata
* come parametro.

* Codice di esempio:

* resultHolder rh = new resultHoder();

* int value = rh.getIndexKey(x1);

* In questo caso value avrà valore 0.

* -------------------------------------------

* | x1 | x2 | x3 | x4 | x5 | x6 |

* -------------------------------------------

* | y1 | y4 | y7 | y1 | y4 | y7 |

* -------------------------------------------

* | y2 | y5 | y8 | y2 | y5 | y8 |

* -------------------------------------------

* | y3 | y6 | y9 | y3 | y6 | y9 |

* -------------------------------------------

* x = key
* y = value

*/




public int getIndexKey(String key){
int index = -1;

Vector values = new Vector();
String value = new String("");
Enumeration ex = hs.keys();

while(ex.hasMoreElements()){
value = value.concat(ex.nextElement().toString()+TOKEN);
}

StringTokenizer kx = new StringTokenizer(value,TOKEN);

while(kx.hasMoreElements()){
values.add(kx.nextToken());
}

int k=0;
while(k<values.size()){
if(values.elementAt(k).equals(key))
{ index = k; }
k++;
}

return index;
}
/**
* Questo metodo permette di avere un oggetto Vector con tutte le
* chiavi dell'oggetto resultHolder.

* Codice di esempio:

* resultHolder rh = new resultHoder();

* Vector value = rh.getKeys();

* In questo caso value avrà valore x1,x2,x3,x4,x5,x6.

* -------------------------------------------

* | x1 | x2 | x3 | x4 | x5 | x6 |

* -------------------------------------------

* | y1 | y4 | y7 | y1 | y4 | y7 |

* -------------------------------------------

* | y2 | y5 | y8 | y2 | y5 | y8 |

* -------------------------------------------

* | y3 | y6 | y9 | y3 | y6 | y9 |

* -------------------------------------------

* x = key

* y = value

*/


public Vector getKeys(){

String value = new String("");
Vector values = new Vector();
Enumeration ex = hs.keys();

while(ex.hasMoreElements()){
value = value.concat(ex.nextElement().toString()+TOKEN);
}


StringTokenizer kx = new StringTokenizer(value,TOKEN);


while(kx.hasMoreElements()){
values.add(kx.nextToken());
}

return values;
}
/**
* Questo metodo permette di ricevere il valore di una chiave (key) all'indice (indice)
* passato come paramtero.

* Codice di esempio:

* resultHolder rh = new resultHoder();

* String value = rh.getValue(x1, 0);

* In questo caso value avrà valore y1.

* -------------------------------------------

* | x1 | x2 | x3 | x4 | x5 | x6 |

* -------------------------------------------

* | y1 | y4 | y7 | y1 | y4 | y7 |

* -------------------------------------------

* | y2 | y5 | y8 | y2 | y5 | y8 |

* -------------------------------------------

* | y3 | y6 | y9 | y3 | y6 | y9 |

* -------------------------------------------

* x = key

* y = value

*/




public String getValue(String key, int indice){
String value = new String(hs.get(key).toString());
StringTokenizer kx = new StringTokenizer(value,TOKEN);
Vector values = new Vector(kx.countTokens());
while(kx.hasMoreElements()){
values.add(kx.nextElement().toString());
}
values.remove(0);
value = new String(values.elementAt(indice).toString());

return value;
}
/**
* Questo metodo permette di avere il nome della chiave all'indice
* (indice) passato come parametro.

*/



public String getValueKey(int indice){
Vector values = new Vector();
String value = new String("");
Enumeration ex = hs.keys();

while(ex.hasMoreElements()){
value = value.concat(ex.nextElement().toString()+TOKEN);
}


StringTokenizer kx = new StringTokenizer(value,TOKEN);


while(kx.hasMoreElements()){
values.add(kx.nextToken());
}

value = new String(values.elementAt(indice).toString());

return value;
}
/**
* Questo metodo permette di ricevere tutti i valori in un oggetto Vector
* di una chiave (key).

*/




public Vector getValues(String key){
Vector values = new Vector();
String value = new String(hs.get(key).toString());

StringTokenizer kx = new StringTokenizer(value,TOKEN);
while(kx.hasMoreElements()){
values.add(kx.nextElement().toString());
}
values.remove(key);

return values;
}
/**
* Questo metodo permette di inserire le chiavi (columnNames) dell'oggetto resultHoder,
* in modo tale che poi le possiamo utilizzare per richiamare i valori e
* per inserirne di nuovi.

*/


public void setNames(String[] columnNames){
hs = new Hashtable();
for(int i=0;i<columnNames.length;i++){
hs.put(columnNames[i],columnNames[i]+TOKEN);
}
}
/**
* Questo metodo permette di inserire un valore (value) ad una chiave (key)
* in modo tale che l'oggetto di tipo resultHolder aumenti di dimensione.

*/


public void setValue(String key, String value){
String valore = new String(hs.get(key).toString());
valore = valore.concat(value+TOKEN);
hs.remove(key);
hs.put(key,valore);
}
/**
* Questo metodo restituisce il numero degli elementi chiave contenuti
* all'interno dell'oggetto resultHolder.
Come da esempio sottostante,
* mi restituisce la dimensione della riga x.

* -------------------------------------

* | x | x | x | x | x | x |

* -------------------------------------

* | y | y | y | y | y | y |

* -------------------------------------

* | y | y | y | y | y | y |

* -------------------------------------

* | y | y | y | y | y | y |

* -------------------------------------

* x = key

* y = value

*/

public int size(){
Vector values = new Vector();
String value = new String("");

Enumeration z = hs.keys();
while(z.hasMoreElements()){
value = value.concat(z.nextElement().toString()+TOKEN);
}

StringTokenizer kx = new StringTokenizer(value,TOKEN);
while(kx.hasMoreElements()){
values.add(kx.nextToken(TOKEN).toString());
}

int size = values.size();

return size;
}
/**
* Questo metodo restituisce il numero degli elementi contenuti
* all'interno della colonna che ha come chiave key.
Come da esempio
* sottostante che rappresenta l'oggetto resultHoder:

* resultHolder rh = new resultHoder();

* int size = rh.size(x1);

* il valore di size è uguale a 3.

* -------------------------------------------

* | x1 | x2 | x3 | x4 | x5 | x6 |

* -------------------------------------------

* | y | y | y | y | y | y |

* -------------------------------------------

* | y | y | y | y | y | y |

* -------------------------------------------

* | y | y | y | y | y | y |

* -------------------------------------------

* x = key

* y = value

*/

public int size(String key){
Vector values = new Vector();
String value = new String(hs.get(key).toString());
StringTokenizer kx = new StringTokenizer(value,TOKEN);

while(kx.hasMoreElements()){
values.add(kx.nextToken(TOKEN));
}

values.remove(key);

int size = values.size();

return size;
}
}