Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2041 → Rev 2042

/trunk/src/org/tela_botanica/client/modeles/dao/MotsClesAsynchroneDAO.java
12,6 → 12,7
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Window;
 
/**
* DAO d'accès à l'arbre de mots clés
23,6 → 24,8
private String identifiant = "" ;
private String mode = "";
private String nomService = "InventoryKeywordTree";
//private String nomService = "InventoryKeyWordList";
 
public MotsClesAsynchroneDAO() {
mode = "images";
43,7 → 46,7
public void obtenirListeMotsCles(final Rafraichissable r) {
// on demande tous les mots clés associés à l'utilisateur
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl()
+ "/InventoryKeyWordList/"+mode+"/"+identifiant+"/");
+ "/"+nomService+"/"+mode+"/"+identifiant+"/");
 
try {
rb.sendRequest(null, new RequestCallback() {
86,14 → 89,15
*
* @param motcle
* le mots clés à ajouter avec son parent et son identifiant
* @param r
*/
public void ajouterBaseDeDonnees(String motcle) {
public void ajouterBaseDeDonnees(String motcle, final Rafraichissable r) {
if (!motcle.equals("")) {
String postData = motcle+"&mode="+mode;
 
// on fait un post asynchrone
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, Configuration.getServiceBaseUrl()
+ "/InventoryKeyWordList/");
+ "/"+nomService+"/");
try {
rb.sendRequest(postData, new RequestCallback() {
 
109,13 → 113,12
// TODO: les messages ne devraient pas être affichés ici
// mais l'architecture par très malléable complique les choses
if (response.getText().equals("OK")) {
try {
Integer idMotcle = Integer.parseInt(response.getText());
r.rafraichir(idMotcle, false);
} catch (Exception e) {
com.google.gwt.user.client.Window
.alert("Le mot clé a été ajouté");
return;
} else {
com.google.gwt.user.client.Window
.alert("Problème lors de la mise à jour des données, le serveur a répondu "+response.getText());
.alert("Problème lors de la mise à jour des données, le serveur a répondu "+response.getText());
}
}
 
139,7 → 142,7
postData += "&action=DELETE";
 
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, Configuration.getServiceBaseUrl()
+ "/InventoryKeyWordList/"
+ "/"+nomService+"/"
+ mode+"/"
+ identifiant
+ "/"
183,8 → 186,9
* @param motcle
* le mots clés à modifier avec son parent et son identifiant
*/
public void modifierBaseDeDonnees(String motcle) {
 
public void modifierBaseDeDonnees(String motcle, final Rafraichissable r) {
//TODO : cette fonction n'a aucun sens, on lui passe une sorte de chaine
// de requete url, elle devrait avoir au moins trois paramètres qu'elle assemble elle même
if (!motcle.equals("")) {
 
String postData = "";
191,7 → 195,7
postData += "&action=modification"+motcle;
 
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, Configuration.getServiceBaseUrl()
+ "/InventoryKeyWordList/"+mode+"/"+ identifiant);
+ "/"+nomService+"/"+mode+"/"+ identifiant);
try {
rb.sendRequest(postData, new RequestCallback() {
 
209,6 → 213,7
if (response.getText().equals("OK")) {
com.google.gwt.user.client.Window
.alert("Le mot clé a été renommé");
r.rafraichir("OK", false);
return;
} else {
com.google.gwt.user.client.Window
231,7 → 236,7
* le mots clés à ajouter avec son ancien parent, son nouveau et
* son identifiant
*/
public void deplacerBaseDeDonnees(String motcle) {
public void deplacerBaseDeDonnees(String motcle, final Rafraichissable r) {
 
if (!motcle.equals("")) {
 
239,7 → 244,7
postData += "&action=deplacement"+motcle;
 
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, Configuration.getServiceBaseUrl()
+ "/InventoryKeyWordList/"+mode+"/"+identifiant);
+ "/"+nomService+"/"+mode+"/"+identifiant);
try {
rb.sendRequest(postData, new RequestCallback() {
 
252,8 → 257,7
@Override
public void onResponseReceived(Request request,
Response response) {
// TODO Auto-generated method stub
 
r.rafraichir("OK", false);
}
 
});
262,7 → 266,5
e.printStackTrace();
}
}
 
}
 
}
/trunk/src/org/tela_botanica/client/observation/ObservationMediateur.java
1021,10 → 1021,8
* @param arbreMC
* le nouvel arbre de mots clés à mettre à jour
*/
public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
observationModele.ajouterMotCleDansArbre(n, arbreMC);
getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n, false);
 
public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
observationModele.ajouterMotCleDansArbre(n, arbreMC, r);
}
 
/**
1053,10 → 1051,7
* le nouvel arbre de mots clés à mettre à jour
*/
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
 
observationModele.modifierMotCleDansArbre(n, arbreMC);
getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n, false);
 
observationModele.modifierMotCleDansArbre(n, arbreMC, getPanneauFiltres().getArbreMotsClesObservationVue());
}
 
/**
1070,7 → 1065,7
*/
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
 
observationModele.deplacerMotCleDansArbre(n, arbreMC);
observationModele.deplacerMotCleDansArbre(n, arbreMC, getPanneauFiltres().getArbreMotsClesObservationVue());
}
 
 
/trunk/src/org/tela_botanica/client/observation/ObservationModele.java
28,8 → 28,11
import org.tela_botanica.client.modeles.objets.Observation;
import org.tela_botanica.client.modeles.objets.Utilisateur;
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels;
import org.tela_botanica.client.util.MotsClesUtilitaire;
 
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;
409,67 → 412,15
 
@Override
public void rafraichir(Object nouvelleDonnees,
boolean repandreRaffraichissement) {
boolean repandreRaffraichissement) {
if(nouvelleDonnees instanceof JSONArray) {
// alors on a reçu les informations sur les mots clés
JSONArray reponse = (JSONArray) nouvelleDonnees;
 
final int taillemax = reponse.size();
 
// si le tableau est vide
if (taillemax == 0) {
// on crée un arbre vide
TreeNode root = new TreeNode();
root.setId("racine_obs");
root.setText("Projets");
String[] usObj = { "Projets", "racine_obs" };
root.setUserObject(usObj);
arbreMotsCles.setRootNode(root);
}
 
// pour chacun des élements du tableau
for (int j = 0; j < taillemax; j++) {
// on extrait les élements du tableau
if (reponse.get(j).isObject() != null) {
JSONObject noeud = (JSONObject) reponse.get(j);
 
String id_noeud = noeud.get("id_mot_cle_obs")
.isString().stringValue();
String mot_cle = noeud.get("mot_cle").isString()
.stringValue();
String parent = noeud.get("ce_mot_cle_obs_parent").isString()
.stringValue();
 
String[] usObj = { mot_cle, id_noeud };
 
// et on construit l'arbre à partir de la racine (qui est
// toujoursl e premier élément)
if (id_noeud.equals("racine_obs")) {
TreeNode root = new TreeNode();
root.setId(id_noeud);
root.setText(mot_cle);
root.setUserObject(usObj);
arbreMotsCles.setRootNode(root);
} else {
// et en ajoutant les noeuds un à un (qui sont renvoyé
// dans l'ordre hierarchique de leur niveau
// ce qui permet de les traiter séquentiellement)
TreeNode node = new TreeNode();
node.setId(id_noeud);
node.setText(mot_cle);
node.setChecked(false);
Node parentNode = arbreMotsCles.getNodeById(parent);
node.setUserObject(usObj);
parentNode.appendChild(node);
}
motsCles.put(id_noeud, mot_cle);
}
}
JSONArray donneesArbre = (JSONArray)nouvelleDonnees;
Object[] arbreEtCorrespondancesIds = MotsClesUtilitaire.construireArbre("Projets", "racine_obs", donneesArbre);
arbreMotsCles = (Tree)arbreEtCorrespondancesIds[0];
motsCles = (HashMap<String, String>)arbreEtCorrespondancesIds[1];
// enfin on met à jour l'arbre des mots clés contenu dans le modèle
//rafraichirArbreMotsCles(arbreMotsCles);
// et on notifie le médiateur de la mise à jour en lui passant une
592,7 → 543,7
* l'arbre des mots cles en cours
*/
public void ajouterMotCleDansArbre(TreeNode n,
com.gwtext.client.data.Tree arbreMC) {
com.gwtext.client.data.Tree arbreMC, Rafraichissable r) {
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO("obs");
 
String[] usObj = (String[]) n.getUserObject();
602,16 → 553,21
 
if (!id.equals("racine_obs")) {
String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
parentId = parentUsObj[1];
if(parentUsObj[1].equals("racine_obs")) {
parentId= "";
} else {
parentId = parentUsObj[1];
}
} else {
parentId = "racine_obs";
parentId = "";
}
rafraichirArbreMotsCles(arbreMC);
motsCles.put(id, motCle);
 
String nouveauMotCle = "&identifiant=" + Utilisateur.getInstance().getIdentifiantUtilisateurConsulte() + "&motcle="
+ motCle + "&id=" + id + "&parent=" + parentId;
MCDao.ajouterBaseDeDonnees(nouveauMotCle);
MCDao.ajouterBaseDeDonnees(nouveauMotCle, r);
}
 
/**
645,7 → 601,7
* @param arbreMC
* l'arbre des mots clés en cours
*/
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
 
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO("obs");
 
665,7 → 621,7
 
String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
+ parentId;
MCDao.modifierBaseDeDonnees(motCleModifie);
MCDao.modifierBaseDeDonnees(motCleModifie, r);
 
}
 
678,7 → 634,7
* @param arbreMC
* l'arbre des mots cles en cours
*/
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO("obs");
 
String[] usObj = (String[]) n.getUserObject();
696,7 → 652,7
 
String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
+ parentId;
MCDao.deplacerBaseDeDonnees(motCleModifie);
MCDao.deplacerBaseDeDonnees(motCleModifie, r);
}
/**
/trunk/src/org/tela_botanica/client/util/MotsClesUtilitaire.java
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);
}
}
}
}
}
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java
1117,8 → 1117,8
* @param arbreMC
* le nouvel arbre de mots clés à mettre à jour
*/
public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
getIModele().ajouterMotCleDansArbre(n, arbreMC);
public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
getIModele().ajouterMotCleDansArbre(n, arbreMC, r);
filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
mettreAJourListeMotsClesAffiches();
}
1148,9 → 1148,8
* le nouvel arbre de mots clés à mettre à jour
*/
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
getIModele().modifierMotCleDansArbre(n, arbreMC);
getIModele().modifierMotCleDansArbre(n, arbreMC, filtres.getMotsClesFiltre());
getIModele().mettreAjourMotsClesId(n.getText(), n.getId());
filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
mettreAJourListeMotsClesAffiches();
}
 
1164,8 → 1163,7
* le nouvel arbre de mots clés à mettre à jour
*/
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
getIModele().deplacerMotCleDansArbre(n, arbreMC);
filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
getIModele().deplacerMotCleDansArbre(n, arbreMC, filtres.getMotsClesFiltre());
mettreAJourListeMotsClesAffiches();
}
1786,7 → 1784,7
@Override
protected void surAjoutMotCle(TreeNode node, Tree arbre) {
ajouterMotCleDansArbre(node, arbre);
ajouterMotCleDansArbre(node, arbre, fnMc);
}
@Override
/trunk/src/org/tela_botanica/client/image/ImageModele.java
20,6 → 20,7
import org.tela_botanica.client.modeles.objets.ListeImageCarnet;
import org.tela_botanica.client.modeles.objets.ListeObservation;
import org.tela_botanica.client.modeles.objets.Utilisateur;
import org.tela_botanica.client.util.MotsClesUtilitaire;
 
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
482,65 → 483,14
 
// si on reçoit un tableau JSON
if (nouvelleDonnees instanceof JSONArray) {
// alors on a reçu les informations sur les mots clés
JSONArray reponse = (JSONArray) nouvelleDonnees;
 
final int taillemax = reponse.size();
 
// si le tableau est vide
if (taillemax == 0) {
// on crée un arbre vide
TreeNode root = new TreeNode();
root.setId("racine");
root.setText("Tags");
String[] usObj = { "Tags", "racine" };
root.setUserObject(usObj);
arbreMotsCles.setRootNode(root);
}
// alors on a reçu les informations sur les mots clés
JSONArray donneesArbre = (JSONArray)nouvelleDonnees;
HashMap<String, String> motsCles = new HashMap<String, String>(taillemax);
Object[] arbreEtCorrespondancesIds = MotsClesUtilitaire.construireArbre("Tags", "racine", donneesArbre);
arbreMotsCles = (Tree)arbreEtCorrespondancesIds[0];
motsCles = (HashMap<String, String>)arbreEtCorrespondancesIds[1];
 
// pour chacun des élements du tableau
for (int j = 0; j < taillemax; j++) {
// on extrait les élements du tableau
if (reponse.get(j).isObject() != null) {
JSONObject noeud = (JSONObject) reponse.get(j);
 
String id_noeud = noeud.get("id_mot_cle_image")
.isString().stringValue();
String mot_cle = noeud.get("mot_cle").isString()
.stringValue();
String parent = noeud.get("ce_mot_cle_image_parent").isString()
.stringValue();
 
String[] usObj = { mot_cle, id_noeud };
 
// et on construit l'arbre à partir de la racine (qui est
// toujours le premier élément)
if (id_noeud.equals("racine")) {
TreeNode root = new TreeNode();
root.setId(id_noeud);
root.setText(mot_cle);
root.setUserObject(usObj);
arbreMotsCles.setRootNode(root);
} else {
// et en ajoutant les noeuds un à un (qui sont renvoyé
// dans l'ordre hierarchique de leur niveau
// ce qui permet de les traiter séquentiellement)
TreeNode node = new TreeNode();
node.setId(id_noeud);
node.setText(mot_cle);
node.setChecked(false);
Node parentNode = arbreMotsCles.getNodeById(parent);
node.setUserObject(usObj);
parentNode.appendChild(node);
}
motsCles.put(id_noeud, mot_cle);
}
}
// enfin on met à jour l'arbre des mots clés contenu dans le modèle
rafraichirArbreMotsCles(arbreMotsCles);
// la table de hachage
653,7 → 603,7
* l'arbre des mots cles en cours
*/
public void ajouterMotCleDansArbre(TreeNode n,
com.gwtext.client.data.Tree arbreMC) {
com.gwtext.client.data.Tree arbreMC, Rafraichissable r) {
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO("images");
 
String[] usObj = (String[]) n.getUserObject();
673,7 → 623,7
 
String nouveauMotCle = "&identifiant=" + getIdentifiant() + "&motcle="
+ motCle + "&id=" + id + "&parent=" + parentId;
MCDao.ajouterBaseDeDonnees(nouveauMotCle);
MCDao.ajouterBaseDeDonnees(nouveauMotCle, r);
}
 
/**
705,7 → 655,7
* @param arbreMC
* l'arbre des mots clés en cours
*/
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
 
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO("images");
 
725,7 → 675,7
 
String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
+ parentId;
MCDao.modifierBaseDeDonnees(motCleModifie);
MCDao.modifierBaseDeDonnees(motCleModifie, r);
 
}
 
738,7 → 688,7
* @param arbreMC
* l'arbre des mots cles en cours
*/
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO("images");
 
String[] usObj = (String[]) n.getUserObject();
756,7 → 706,7
 
String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
+ parentId;
MCDao.deplacerBaseDeDonnees(motCleModifie);
MCDao.deplacerBaseDeDonnees(motCleModifie, r);
}
 
/**
/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesFiltreVue.java
4,6 → 4,7
import org.tela_botanica.client.interfaces.Filtrable;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.observation.ObservationMediateur;
import org.tela_botanica.client.util.MotsClesUtilitaire;
 
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.Node;
248,7 → 249,7
}
 
// et on recopie le nouvel arbre
copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles
MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles
.getRootNode());
 
// si l'arbre n'était pas encore considéré comme instancié
334,35 → 335,6
}
 
/**
* 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
*/
private 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] +prefixe);
child.setUserObject(usObj);
ndPereCopie.appendChild(child);
 
if (!ndNodeFils[i].isLeaf()) {
copierFilsNoeud(ndNodeFils[i], child);
}
 
}
}
}
 
/**
* Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
*/
@Override
/trunk/src/org/tela_botanica/client/vues/observation/filtres/ArbreMotsClesObservationVue.java
2,6 → 2,8
import org.tela_botanica.client.interfaces.Filtrable;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.observation.ObservationMediateur;
import org.tela_botanica.client.util.MotsClesUtilitaire;
 
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.Node;
94,6 → 96,8
MultiSelectionModel msModel = null;
 
private String cheminTemporaireAjout = null;
 
/**
* Constructeur sans paramètre (privé car interdit d'utilisation)
*/
243,6 → 247,8
* Ajoute les listeners nécessaires pour la gestion des évènements
*/
private void ajouterListeners() {
final Rafraichissable r = this;
arbreMotsCles.addListener(new TreePanelListenerAdapter() {
 
// gestion du clic sur un noeud
292,7 → 298,7
// on notifie le médiateur de l'ajout et on lui passe
// l'arbre
getOMediateur().ajouterMotCleDansArbre(nd,
getArbreMotsCles().getTree());
getArbreMotsCles().getTree(), r);
// et considère l'ajout achevé
ajoutNoeud = false;
}
307,7 → 313,7
modifNoeud = false;
}
}
 
arbreMotsCles.disable();
}
 
// gestion du déplacement d'un noeud
442,8 → 448,8
String[] usObject = new String[2];
// l'objet contient le nom du noeud
usObject[0] = "";
usObject[1] = genererIdMotCle(nd);
nd.setId(usObject[1]);
usObject[1] = "";
nd.setUserObject(usObject);
// l'identifiant d'un noeud c'est son hashcode
// l'objet associé au noeud contient aussi son identifiant
450,13 → 456,16
 
// on le concatène au parent et on étend ses enfants
parent.appendChild(nd);
// en attendant qu'il soit ajouté on lui affecte son chemin en tant qu'id
// ce qui permettra de le retrouver et de lui affecter son id sur retour du web service
cheminTemporaireAjout = MotsClesUtilitaire.construireChemin(nd);
nd.setId(cheminTemporaireAjout);
parent.expand();
// enfin on place le curseur et on fait apparaitre le champ d'édition
// pour que l'utilisateur nomme son mot clé
te.startEdit(nd);
 
}
 
/**
* Fonction de gestion sur le clic sur le noeud
*
580,7 → 589,7
rootChild[i].remove();
}
copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
 
// si l'arbre n'était pas encore considéré comme instancié
if (!arbreCharge) {
622,41 → 631,20
motsClesEnAttente = motsClesIds;
}
}
}
 
private String genererIdMotCle(TreeNode nd) {
double IdMC = (nd.hashCode() + ((Math.random() * 10000) + 1));
return ""+IdMC;
}
/**
* 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
*/
private 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.setUserObject(usObj);
ndPereCopie.appendChild(child);
 
if (!ndNodeFils[i].isLeaf()) {
copierFilsNoeud(ndNodeFils[i], child);
}
 
// reception d'un nouvel identifiant de mot clé
if(nouvelleDonnees instanceof Integer) {
if(cheminTemporaireAjout != null) {
String id = ((Integer)(nouvelleDonnees)).toString();
TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
String[] userObj = {noeudEnAjout.getText(), id};
noeudEnAjout.setUserObject(userObj);
noeudEnAjout.setId(id);
cheminTemporaireAjout = null;
}
}
arbreMotsCles.enable();
}
public void raz() {
/trunk/src/org/tela_botanica/client/vues/observation/filtres/ArbreDateObservationFiltreVue.java
52,8 → 52,6
* La structure de donnees qui stocke l'arbre. Utilisee a ce niveau car trop liee a la vue
*/
private Tree donneesDates = new Tree();
/**
* booléen d'initialisation
*/
/trunk/src/org/tela_botanica/client/vues/image/filtres/ArbreDateImageFiltreVue.java
49,8 → 49,6
* La structure de donnees qui stocke l'arbre. Utilisee a ce niveau car trop liee a la vue
*/
private Tree donneesDates = new Tree();
/**
* booléen d'initialisation
*/
/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesVue.java
2,6 → 2,7
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.util.MotsClesUtilitaire;
 
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
80,6 → 81,8
*/
private boolean motsCleInitialises;
 
private String cheminTemporaireAjout;
 
/**
* Constructeur sans paramètre (privé car interdit d'utilisation)
*/
178,6 → 181,8
* Ajoute les listeners nécessaires pour la gestion des évènements
*/
private void ajouterListeners() {
final Rafraichissable r = this;
arbreMotsCles.addListener(new TreePanelListenerAdapter() {
 
@Override
226,7 → 231,7
// et on notifie le médiateur de l'ajout et on lui passe
// l'arbre
getIMediateur().ajouterMotCleDansArbre(nd,
getArbreMotsCles().getTree());
getArbreMotsCles().getTree(), r);
}
// si c'est noeud déjà existant
else {
347,8 → 352,9
String[] usObject = new String[2];
// l'objet contient le nom du noeud
usObject[0] = "";
usObject[1] = genererIdMotCle(nd);
nd.setId(usObject[1]);
cheminTemporaireAjout = MotsClesUtilitaire.construireChemin(nd);
usObject[1] = cheminTemporaireAjout;
nd.setId(cheminTemporaireAjout);
nd.setUserObject(usObject);
// l'identifiant d'un noeud c'est son hashcode
// l'objet associé au noeud contient aussi son identifiant
441,7 → 447,7
rootChild[i].remove();
}
copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
 
// si l'arbre n'était pas encore considéré comme instancié
if (!arbreCharge) {
460,39 → 466,19
tableauMotsClesEnCours = (String[]) nouvelleDonnees;
cocherMotsCles(tableauMotsClesEnCours);
}
}
 
private String genererIdMotCle(TreeNode nd) {
return "" + (nd.hashCode() + (Math.random() * 10000));
}
/**
* 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
*/
private 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);
}
 
// reception d'un nouvel identifiant de mot clé
if(nouvelleDonnees instanceof Integer) {
if(cheminTemporaireAjout != null) {
String id = ((Integer)(nouvelleDonnees)).toString();
TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
String[] userObj = {noeudEnAjout.getText(), id};
noeudEnAjout.setUserObject(userObj);
noeudEnAjout.setId(id);
cheminTemporaireAjout = null;
}
}
arbreMotsCles.enable();
}
}