Ciao a tutti.

Devo realizzare un menu per un'applicazione java che presenti un elenco di categorie con sottocategorie associate. Uso un database Progress che mi restutuisce un elenco di recodset dove ciascun elemento resenta un riferimento al padre.

Per ogni elemento che mi viene restituito dalla query prima verifico se sitratta di una foglia (elememento senza figli) e quindi salvo le foglie in un ArrayList di questo tipo


private ArrayList<CategoryNode> childList=new ArrayList<CategoryNode>(20);

mentre le radici (categorie di primo livello con padre nullo) e sottocategorie vengono memorizzate in due mappe distinte in modo che riesca facilmente a recuperarle senza scorrimento.

private HashMap<String, CategoryNode> categoryMap=new HashMap<String, CategoryNode>(40);
private HashMap<String, CategoryNode> rootMap=new HashMap<String, CategoryNode>(40);

A questo punto ho pensato di scorrere la lista dei figli childList e per ogni elemento contenuto recupero il padre dalle due mappe categoryMap o rootMap attraverso il riferimento al padre memorizzato in ogni nodo (la classe CategoryNode mantiene il riferimento al padre) e lo aggiungo creando un nuovo nodo. Il problema è che non riesco a farlo in maniera ricorsiva così alla fine ho una lista slegata di categorie di livello1 con figli e sottocategorie vuote e poi una seconda lista con le sottocategorie ed eventuali altri figli con doppioni.

ecco il codice

codice:
creaNodo(childList);//lista con figli

private CategoryNode creaNodo(ArrayList<CategoryNode> childList){
		TreeNode nodo=null;
		CategoryNode pNode=null;
		CategoryNode rNode=null;
		
		Iterator<CategoryNode> itchList = childList.iterator();
		
		while(itchList.hasNext()){
			
			CategoryNode cn = itchList.next();
				String nomeEsteso=cn.getNomeEsteso();
				String siglaProgramma=cn.getProgID();
				String procID=cn.getProcID();
				String padreProgramma=cn.getpadrePrg();//recupero il padre
				pNode=(CategoryNode)categoryMap.get(procID+"|"+padreProgramma);
				rNode=(CategoryNode)rootMap.get(procID+"|"+padreProgramma);
				if(pNode!=null){
					nodo=new CategoryNode(nomeEsteso,siglaProgramma,pNode,desEnglish,procID);
					pNode.addChildCategory((CategoryNode)nodo);
					parentList1.add((CategoryNode)pNode);
					
				}else{//è figlio di una radice
					nodo=new CategoryNode(nomeEsteso,siglaProgramma,pNode,desEnglish,procID);
					if(rNode!=null){
						nodo=new CategoryNode(nomeEsteso,siglaProgramma,rNode,desEnglish,procID);
						rNode.addChildCategory((CategoryNode)nodo);
						parentList2.add((CategoryNode)rNode);
					}else{
						parentList1.add((CategoryNode)nodo);	
					}
				}
		}
		
		return pNode;
	}
Spero di essermi spiegata abbastanza chiaramente, non ho grandissima esperienza e ho bisogno di aiuto per capire come posso andare avanti o se c'è una soluzione migliore per farlo.

Ringrazio in anticipo tutti quelli che avranno la pazienza di leggere e rispondere!