Subversion Repositories eFlore/Applications.cel

Rev

Rev 2148 | Rev 2172 | Go to most recent revision | Details | Compare with Previous | 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
 
2166 aurelien 5
import org.tela_botanica.client.cel2;
6
 
2042 aurelien 7
import com.google.gwt.json.client.JSONArray;
8
import com.google.gwt.json.client.JSONObject;
9
import com.google.gwt.user.client.Window;
10
import com.gwtext.client.data.Node;
11
import com.gwtext.client.data.Tree;
12
import com.gwtext.client.widgets.tree.TreeNode;
13
 
14
public class MotsClesUtilitaire {
15
 
16
	//TODO rassembler tout ce qui construit les arbres de mots clés ici
2062 aurelien 17
	private static String[] caracteresInterdits = {"\\", "/", ","};
2042 aurelien 18
 
19
	public static String obtenirCheminParent(String cheminMotCle, String motCle) {
2148 aurelien 20
		return cheminMotCle.substring(0, cheminMotCle.length() - motCle.length() -1).toLowerCase();
2042 aurelien 21
	}
22
 
23
	public static Object[] construireArbre(String NomRacine, String idRacine,
2062 aurelien 24
			JSONArray arbreJson, boolean afficherCheckbox) {
2042 aurelien 25
 
26
		Tree arbreMotsCles = new Tree() ;
27
		HashMap<String, String> motsCles = new HashMap<String, String>(0);
28
		HashMap<String, String> parentes = new HashMap<String, String>();
29
 
30
		final int taillemax = arbreJson.size();
31
 
32
		// on crée un arbre vide
33
		TreeNode root = new TreeNode();
34
		root.setId(idRacine);
35
		root.setText(NomRacine);
36
		String[] usObjRacine = {NomRacine, idRacine};
37
		root.setUserObject(usObjRacine);
38
		arbreMotsCles.setRootNode(root);
39
 
40
		// le mot clé racine possède le chemin racine ("/")
41
		parentes.put("/", idRacine);
42
 
43
		// pour chacun des élements du tableau
44
		for (int j = 0; j < taillemax; j++) {
45
			// on extrait les élements du tableau
46
			if (arbreJson.get(j).isObject() != null) {
47
				JSONObject noeud = (JSONObject) arbreJson.get(j);
48
 
49
				String idMotCle = noeud.get("id_mot_cle")
50
						.isString().stringValue();
51
				String motCle = noeud.get("mot_cle").isString()
52
						.stringValue();
2148 aurelien 53
 
54
				// le chemin est mis en minuscule afin de fusionner toutes
55
				// la variantes minuscules majuscule d'un mot clé
56
				// qui peuvent poser problème
2042 aurelien 57
				String chemin = noeud.get("chemin").isString()
2148 aurelien 58
						.stringValue().toLowerCase();
2042 aurelien 59
 
60
				String cheminParent = MotsClesUtilitaire.obtenirCheminParent(chemin, motCle);
61
				String parent = parentes.get(cheminParent);
62
 
63
				String[] usObj = {motCle, idMotCle};
64
 
65
				// et on construit l'arbre en ajoutant les noeuds un à un (qui sont renvoyés
66
				// dans l'ordre hierarchique de leur niveau
67
				// ce qui permet de les traiter séquentiellement)
68
				TreeNode node = new TreeNode();
69
				node.setId(idMotCle);
70
				node.setText(motCle);
2062 aurelien 71
				if(afficherCheckbox) {
72
					node.setChecked(false);
73
				}
2148 aurelien 74
 
2042 aurelien 75
				Node parentNode = arbreMotsCles.getNodeById(parent);
76
				node.setUserObject(usObj);
77
				parentNode.appendChild(node);
78
 
79
				parentes.put(chemin, idMotCle);
80
				motsCles.put(idMotCle, motCle);
81
			}
82
		}
83
		Object[] retour = {arbreMotsCles, motsCles};
84
		return retour;
85
	}
86
 
87
	/**
88
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
89
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
90
	 *
91
	 * @param ndPereOriginal
92
	 *            le père des noeuds de l'arbre original
93
	 * @param ndPereCopie
94
	 *            le père qui va recevoir les copies
95
	 */
2062 aurelien 96
	public static void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie, boolean afficherCheckbox) {
2042 aurelien 97
		if (ndPereCopie != null && ndPereOriginal != null) {
98
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
99
 
100
			for (int i = 0; i < ndNodeFils.length; i++) {
2166 aurelien 101
 
2042 aurelien 102
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
103
				TreeNode child = new TreeNode(usObj[0]);
104
				child.setId(usObj[1]);
2062 aurelien 105
				if(afficherCheckbox) {
106
					child.setChecked(false);
107
				}
2042 aurelien 108
				child.setUserObject(usObj);
109
				ndPereCopie.appendChild(child);
110
 
111
				if (!ndNodeFils[i].isLeaf()) {
2062 aurelien 112
					copierFilsNoeud(ndNodeFils[i], child, afficherCheckbox);
2042 aurelien 113
				}
114
			}
115
		}
116
	}
2062 aurelien 117
 
118
	public static TreeNode ajouterNoeud(TreeNode parent, boolean afficherCheckbox) {
119
		// on crée un nouveau noeud vide
120
		TreeNode nd = new TreeNode("");
121
		nd.setCls("x-view-treenode-keyword");
122
 
123
		if(afficherCheckbox) {
124
			nd.setChecked(true);
125
		}
126
 
127
		// on associe un objet au noeud qui contient des infos
128
		String[] usObject = new String[2];
129
		// l'objet contient le nom du noeud
130
		usObject[0] = "";
131
		usObject[1] = "";
132
		nd.setUserObject(usObject);
133
 
134
		String cheminTemporaireAjout = parent.getPath()+"/"+nd.getId();
135
		nd.setId(cheminTemporaireAjout);
136
 
137
		return nd;
138
	}
139
 
140
	public static String getChaineCaracteresInterdits() {
141
		String interdits = "";
142
		for (int i = 0; i < MotsClesUtilitaire.caracteresInterdits.length; i++) {
143
			interdits += MotsClesUtilitaire.caracteresInterdits[i]+" ";
144
		}
145
		return interdits;
146
	}
147
 
148
	public static boolean estUnMotCleAutorise(String motCle) {
149
		boolean valide = !motCle.trim().isEmpty();
150
		for (int i = 0; i < MotsClesUtilitaire.caracteresInterdits.length; i++) {
151
			if(motCle.indexOf(MotsClesUtilitaire.caracteresInterdits[i]) != -1) {
152
				valide = false;
153
				break;
154
			}
155
		}
156
		return valide;
157
	}
2042 aurelien 158
}