Subversion Repositories eFlore/Applications.cel

Rev

Rev 2062 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2042 aurelien 1
package org.tela_botanica.client.util;
2
 
3
import java.util.HashMap;
4
 
5
import com.google.gwt.json.client.JSONArray;
6
import com.google.gwt.json.client.JSONObject;
7
import com.google.gwt.user.client.Window;
8
import com.gwtext.client.data.Node;
9
import com.gwtext.client.data.Tree;
10
import com.gwtext.client.widgets.tree.TreeNode;
11
 
12
public class MotsClesUtilitaire {
13
 
14
	//TODO rassembler tout ce qui construit les arbres de mots clés ici
15
 
16
	public static String obtenirCheminParent(String cheminMotCle, String motCle) {
17
		return cheminMotCle.substring(0, cheminMotCle.length() - motCle.length() -1);
18
	}
19
 
20
	public static Object[] construireArbre(String NomRacine, String idRacine,
21
			JSONArray arbreJson) {
22
 
23
		Tree arbreMotsCles = new Tree() ;
24
		HashMap<String, String> motsCles = new HashMap<String, String>(0);
25
		HashMap<String, String> parentes = new HashMap<String, String>();
26
 
27
		final int taillemax = arbreJson.size();
28
 
29
		// on crée un arbre vide
30
		TreeNode root = new TreeNode();
31
		root.setId(idRacine);
32
		root.setText(NomRacine);
33
		String[] usObjRacine = {NomRacine, idRacine};
34
		root.setUserObject(usObjRacine);
35
		arbreMotsCles.setRootNode(root);
36
 
37
		// le mot clé racine possède le chemin racine ("/")
38
		parentes.put("/", idRacine);
39
 
40
		// pour chacun des élements du tableau
41
		for (int j = 0; j < taillemax; j++) {
42
			// on extrait les élements du tableau
43
			if (arbreJson.get(j).isObject() != null) {
44
				JSONObject noeud = (JSONObject) arbreJson.get(j);
45
 
46
				String idMotCle = noeud.get("id_mot_cle")
47
						.isString().stringValue();
48
				String motCle = noeud.get("mot_cle").isString()
49
						.stringValue();
50
				String chemin = noeud.get("chemin").isString()
51
						.stringValue();
52
 
53
				String cheminParent = MotsClesUtilitaire.obtenirCheminParent(chemin, motCle);
54
				String parent = parentes.get(cheminParent);
55
 
56
				String[] usObj = {motCle, idMotCle};
57
 
58
				// et on construit l'arbre en ajoutant les noeuds un à un (qui sont renvoyés
59
				// dans l'ordre hierarchique de leur niveau
60
				// ce qui permet de les traiter séquentiellement)
61
				TreeNode node = new TreeNode();
62
				node.setId(idMotCle);
63
				node.setText(motCle);
64
				node.setChecked(false);
65
				Node parentNode = arbreMotsCles.getNodeById(parent);
66
				node.setUserObject(usObj);
67
				parentNode.appendChild(node);
68
 
69
				parentes.put(chemin, idMotCle);
70
				motsCles.put(idMotCle, motCle);
71
			}
72
		}
73
		Object[] retour = {arbreMotsCles, motsCles};
74
		return retour;
75
	}
76
 
77
	public static String construireChemin(TreeNode nd) {
78
		String chemin = "/";
79
		Node node = nd;
80
		while(node != null) {
81
			String[] usObj = (String[])node.getUserObject();
82
			chemin = usObj[0]+"/"+chemin;
83
			node = node.getParentNode();
84
		}
85
		return chemin;
86
	}
87
 
88
	/**
89
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
90
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
91
	 *
92
	 * @param ndPereOriginal
93
	 *            le père des noeuds de l'arbre original
94
	 * @param ndPereCopie
95
	 *            le père qui va recevoir les copies
96
	 */
97
	public static void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
98
		if (ndPereCopie != null && ndPereOriginal != null) {
99
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
100
 
101
			for (int i = 0; i < ndNodeFils.length; i++) {
102
 
103
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
104
				TreeNode child = new TreeNode(usObj[0]);
105
				child.setId(usObj[1]);
106
				child.setChecked(false);
107
				child.setUserObject(usObj);
108
				ndPereCopie.appendChild(child);
109
 
110
				if (!ndNodeFils[i].isLeaf()) {
111
					copierFilsNoeud(ndNodeFils[i], child);
112
				}
113
			}
114
		}
115
	}
116
}