/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/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(); |
} |
} |
/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/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/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/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 |
*/ |