New file |
0,0 → 1,116 |
package org.tela_botanica.client.util; |
|
import java.util.HashMap; |
|
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.user.client.Window; |
import com.gwtext.client.data.Node; |
import com.gwtext.client.data.Tree; |
import com.gwtext.client.widgets.tree.TreeNode; |
|
public class MotsClesUtilitaire { |
|
//TODO rassembler tout ce qui construit les arbres de mots clés ici |
|
public static String obtenirCheminParent(String cheminMotCle, String motCle) { |
return cheminMotCle.substring(0, cheminMotCle.length() - motCle.length() -1); |
} |
|
public static Object[] construireArbre(String NomRacine, String idRacine, |
JSONArray arbreJson) { |
|
Tree arbreMotsCles = new Tree() ; |
HashMap<String, String> motsCles = new HashMap<String, String>(0); |
HashMap<String, String> parentes = new HashMap<String, String>(); |
|
final int taillemax = arbreJson.size(); |
|
// on crée un arbre vide |
TreeNode root = new TreeNode(); |
root.setId(idRacine); |
root.setText(NomRacine); |
String[] usObjRacine = {NomRacine, idRacine}; |
root.setUserObject(usObjRacine); |
arbreMotsCles.setRootNode(root); |
|
// le mot clé racine possède le chemin racine ("/") |
parentes.put("/", idRacine); |
|
// pour chacun des élements du tableau |
for (int j = 0; j < taillemax; j++) { |
// on extrait les élements du tableau |
if (arbreJson.get(j).isObject() != null) { |
JSONObject noeud = (JSONObject) arbreJson.get(j); |
|
String idMotCle = noeud.get("id_mot_cle") |
.isString().stringValue(); |
String motCle = noeud.get("mot_cle").isString() |
.stringValue(); |
String chemin = noeud.get("chemin").isString() |
.stringValue(); |
|
String cheminParent = MotsClesUtilitaire.obtenirCheminParent(chemin, motCle); |
String parent = parentes.get(cheminParent); |
|
String[] usObj = {motCle, idMotCle}; |
|
// et on construit l'arbre en ajoutant les noeuds un à un (qui sont renvoyés |
// dans l'ordre hierarchique de leur niveau |
// ce qui permet de les traiter séquentiellement) |
TreeNode node = new TreeNode(); |
node.setId(idMotCle); |
node.setText(motCle); |
node.setChecked(false); |
Node parentNode = arbreMotsCles.getNodeById(parent); |
node.setUserObject(usObj); |
parentNode.appendChild(node); |
|
parentes.put(chemin, idMotCle); |
motsCles.put(idMotCle, motCle); |
} |
} |
Object[] retour = {arbreMotsCles, motsCles}; |
return retour; |
} |
|
public static String construireChemin(TreeNode nd) { |
String chemin = "/"; |
Node node = nd; |
while(node != null) { |
String[] usObj = (String[])node.getUserObject(); |
chemin = usObj[0]+"/"+chemin; |
node = node.getParentNode(); |
} |
return chemin; |
} |
|
/** |
* Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un |
* copie du sous arbre du premier noeud, qu'elle concatène au deuxième |
* |
* @param ndPereOriginal |
* le père des noeuds de l'arbre original |
* @param ndPereCopie |
* le père qui va recevoir les copies |
*/ |
public static void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) { |
if (ndPereCopie != null && ndPereOriginal != null) { |
Node[] ndNodeFils = ndPereOriginal.getChildNodes(); |
|
for (int i = 0; i < ndNodeFils.length; i++) { |
|
String[] usObj = (String[]) ndNodeFils[i].getUserObject(); |
TreeNode child = new TreeNode(usObj[0]); |
child.setId(usObj[1]); |
child.setChecked(false); |
child.setUserObject(usObj); |
ndPereCopie.appendChild(child); |
|
if (!ndNodeFils[i].isLeaf()) { |
copierFilsNoeud(ndNodeFils[i], child); |
} |
} |
} |
} |
} |