Subversion Repositories eFlore/Applications.cel

Rev

Rev 385 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 aperonnet 1
package org.tela_botanica.client.observation;
2
 
3
 
54 david 4
//TODO : normaliser les noms de methodes (obtenir, ajouter ...)
2 aperonnet 5
 
156 aurelien 6
import java.util.HashMap;
7
import org.tela_botanica.client.interfaces.FournisseurListe;
12 david 8
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.modeles.Configuration;
101 jpm 10
import org.tela_botanica.client.modeles.ExportObservationsDAO;
156 aurelien 11
import org.tela_botanica.client.modeles.ImageAsynchroneDAO;
12
import org.tela_botanica.client.modeles.ImageCarnet;
54 david 13
import org.tela_botanica.client.modeles.ImageGeneriqueVueAsynchroneDAO;
14
import org.tela_botanica.client.modeles.ImageInformationRepartitionAsynchroneDAO;
156 aurelien 15
import org.tela_botanica.client.modeles.ImportObservationAsynchroneDAO;
251 aurelien 16
import org.tela_botanica.client.modeles.InformationCommuneDAO;
385 aurelien 17
import org.tela_botanica.client.modeles.LiaisonMotsClesAsynchroneDAO;
94 jpm 18
import org.tela_botanica.client.modeles.LienImageAsynchroneDAO;
91 jpm 19
import org.tela_botanica.client.modeles.ListeDateObservationAsynchroneDAO;
66 david 20
import org.tela_botanica.client.modeles.ListeEntiteGeographiqueObservationAsynchroneDAO;
156 aurelien 21
import org.tela_botanica.client.modeles.ListeObservation;
12 david 22
import org.tela_botanica.client.modeles.ListeObservationAsynchroneDAO;
23
import org.tela_botanica.client.modeles.ListeReferentielCommuneAsynchroneDAO;
20 david 24
import org.tela_botanica.client.modeles.ListeReferentielNomAsynchroneDAO;
156 aurelien 25
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
140 aurelien 26
import org.tela_botanica.client.modeles.NomRetenuAsynchroneDao;
12 david 27
import org.tela_botanica.client.modeles.NombreObservationAsynchroneDAO;
39 david 28
import org.tela_botanica.client.modeles.Observation;
20 david 29
import org.tela_botanica.client.modeles.ObservationAsynchroneDAO;
108 aurelien 30
import org.tela_botanica.client.modeles.TransmissionObservationAsynchroneDAO;
217 aurelien 31
import org.tela_botanica.client.vues.observation.ListeObservationVue;
32
 
325 aurelien 33
import com.google.gwt.core.client.GWT;
156 aurelien 34
import com.google.gwt.json.client.JSONArray;
35
import com.google.gwt.json.client.JSONObject;
251 aurelien 36
import com.google.gwt.maps.client.geom.LatLng;
318 aurelien 37
import com.google.gwt.user.client.Window;
156 aurelien 38
import com.gwtext.client.data.Node;
39
import com.gwtext.client.data.Tree;
251 aurelien 40
import com.gwtext.client.widgets.map.LatLonPoint;
156 aurelien 41
import com.gwtext.client.widgets.tree.TreeNode;
2 aperonnet 42
 
7 aperonnet 43
 
156 aurelien 44
public class ObservationModele implements Rafraichissable {
7 aperonnet 45
 
12 david 46
 
47
 
48
	/**
49
	 * Booleen indiquant si le médiateur est instancié (l'instance doit être unique donc le booleen est static)
50
	 */
51
	private static boolean estInstancie = false ;
52
 
88 jpm 53
	private static ObservationModele thisModele = null ;
12 david 54
 
88 jpm 55
 
152 david 56
 
57
 
12 david 58
	/**
59
	 * La configuration en cours
60
	 */
61
	private Configuration config = null;
7 aperonnet 62
 
12 david 63
 
64
	/**
65
	 * Le médiateur associé au modèle
66
	 */
67
 
68
	private ObservationMediateur observationMediateur = null ;
69
 
156 aurelien 70
	/**
71
	 * La liste des mots clés en cours
72
	 */
73
	private HashMap<String, String> motsCles = new HashMap<String, String>(0);
12 david 74
 
156 aurelien 75
	private Tree arbreMotsCles = new Tree() ;
12 david 76
 
152 david 77
	/**
156 aurelien 78
	 * La liste des observations affichées en cours (verifier utilité)
79
	 */
80
 
81
	private ListeObservation cacheObservation = new ListeObservation(0) ;
82
 
83
	/**
152 david 84
	 * DAO dont le resultat peut etre mis en cache
85
	 *
86
	 */
87
 
88
	private ListeReferentielNomAsynchroneDAO nomDAO=null;
89
	private ListeReferentielCommuneAsynchroneDAO refDAO=null;
90
 
12 david 91
 
152 david 92
 
93
 
12 david 94
	/**
95
	 * Retourne une instance de manière unique
96
	 * @param im le médiateur à associer
97
	 * @return l'instance du modèle
98
	 */
99
 
100
	static ObservationModele Instance(ObservationMediateur observationMediateur)
101
	{
102
		// si le modèle n'est pas encore instancié
103
		if(!estInstancie)
104
		{
105
			// on en crée un nouveau
106
			estInstancie = true ;
88 jpm 107
			thisModele = new ObservationModele(observationMediateur);
12 david 108
		}
88 jpm 109
		return thisModele ;
2 aperonnet 110
	}
111
 
12 david 112
 
113
 
114
	private ObservationModele(ObservationMediateur observationMediateur) {
115
 
116
		this.observationMediateur=observationMediateur;
117
 
118
		config = new Configuration();
2 aperonnet 119
 
12 david 120
 
121
	}
2 aperonnet 122
 
12 david 123
	/**
124
	 * Appelle le DAO asynchrone pour obtenir le nombre d'observation
125
	 * @param r le rafraichissable auxquel on enverra les données
86 jpm 126
	 * @param filtrage
12 david 127
	 * @param taillePage
128
	 */
129
	public void obtenirNombreObservation(Rafraichissable r) {
86 jpm 130
 
131
		String[][] criteres = {{"",""}} ;
132
		 	criteres = observationMediateur.renvoyerFiltres() ;
12 david 133
			// on rassemble les critères
134
			// on les crée un DAO auquel on les transmet et qui demande le nombre d'images correspondantes (pour les pages)
135
			NombreObservationAsynchroneDAO noaDAO = new NombreObservationAsynchroneDAO(this) ;
136
			noaDAO.obtenirNombreObservation(r, observationMediateur.getIdentifiant(), criteres) ;
137
 
2 aperonnet 138
	}
12 david 139
 
140
 
217 aurelien 141
	public void obtenirListeObservation(Rafraichissable r) {
142
		obtenirListeObservation(r,observationMediateur.getTaillePage(),observationMediateur.getPageEnCours());
143
	}
144
 
12 david 145
	/**
146
	 * Appelle le DAO asynchrone pour obtenir la liste des images
147
	 * @param r le rafraichissable auxquel on enverra les données
148
	 * @param taillePage
149
	 */
150
	public void obtenirListeObservation(Rafraichissable r, int taillePage, int pageEncours) {
151
 
86 jpm 152
 
89 jpm 153
		 	String[][] criteres = {{"",""}} ;
251 aurelien 154
			criteres = observationMediateur.renvoyerFiltres() ;
155
			// on rassemble les critères
12 david 156
 
157
 
158
			// ensuite on demande la page correspondante avec les mêmes critères
89 jpm 159
			String[][] criteres2 = new String[criteres.length+2][2] ;
12 david 160
 
89 jpm 161
			criteres2[0][0] = "limite" ;
162
			criteres2[0][1] = ""+taillePage ;
163
			criteres2[1][0] = "numero_page" ;
164
			criteres2[1][1] = ""+pageEncours ;
165
			for(int i = 0 ; i < criteres.length ; i++)
166
			{
167
				criteres2[i+2][0] = criteres[i][0] ;
168
				criteres2[i+2][1] = criteres[i][1] ;
169
			}
170
 
12 david 171
			// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images
172
			ListeObservationAsynchroneDAO loaDAO = new ListeObservationAsynchroneDAO(this);
173
			loaDAO.obtenirListeObservation(r, observationMediateur.getIdentifiant(), criteres2);
174
	}
175
 
2 aperonnet 176
 
54 david 177
	/**
178
	 * Obtenir une liste de commune
179
	 * @param r
180
	 * @param critere
181
	 */
12 david 182
 
13 david 183
	public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {
12 david 184
 
152 david 185
		if (refDAO==null) {
186
			refDAO=new ListeReferentielCommuneAsynchroneDAO(this);
187
		}
13 david 188
		refDAO.obtenirListeDonnees(r, critere);
189
 
12 david 190
	}
20 david 191
 
54 david 192
	/**
193
	 * Obtenir une liste de nom scientifique de plante
194
	 * @param r
195
	 * @param critere
196
	 */
20 david 197
 
198
	public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
199
 
152 david 200
		if (nomDAO==null) {
201
			nomDAO=new ListeReferentielNomAsynchroneDAO(this);
202
		}
20 david 203
		nomDAO.obtenirListeDonnees(r, critere);
204
 
205
	}
206
 
207
 
208
	/**
209
	 *
210
	 * Lance la creation d'une observation
211
	 * @param r : la vue demandeuse de donnee
212
	 * @param critere : les criteres de selection
213
	 */
214
 
39 david 215
	public void ajouterObservation(Rafraichissable r, Observation obs) {
20 david 216
 
217
		ObservationAsynchroneDAO obsDAO=new ObservationAsynchroneDAO(this);
39 david 218
		obsDAO.ajouter(r, observationMediateur.getIdentifiant(), obs);
20 david 219
 
220
	}
2 aperonnet 221
 
74 david 222
	/**
223
	 *
224
	 * Lance la creation d'une observation
225
	 * @param r : la vue demandeuse de donnee
226
	 * @param critere : les criteres de selection
227
	 */
20 david 228
 
79 david 229
	public void modifierObservation(Rafraichissable r, Observation obs) {
74 david 230
 
231
		ObservationAsynchroneDAO obsDAO=new ObservationAsynchroneDAO(this);
79 david 232
		obsDAO.modifier(r, observationMediateur.getIdentifiant(), obs);
74 david 233
 
234
	}
20 david 235
 
217 aurelien 236
 
237
 
238
	public void modifierObservationEnMasse(
239
			Rafraichissable r, Observation obs) {
240
		ListeObservationAsynchroneDAO liObsDAO=new ListeObservationAsynchroneDAO(this);
241
		liObsDAO.modifierEnMasse(r, observationMediateur.getIdentifiant(), obs);
242
 
243
	}
244
 
245
 
246
 
77 jpm 247
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
248
 
249
		ObservationAsynchroneDAO obsDao = new ObservationAsynchroneDAO(this) ;
250
		obsDao.supprimer(r,observationMediateur.getIdentifiant(),numeroOrdre) ;
251
 
252
 
253
	}
74 david 254
 
77 jpm 255
 
7 aperonnet 256
 
20 david 257
 
12 david 258
	/**
259
	 * Accesseur pour la configuration en cours d'utilisation
260
	 *
261
	 * @return la configuration
262
	 */
263
	public Configuration getConfig() {
264
 
265
		return config;
2 aperonnet 266
	}
267
 
66 david 268
 
269
	/**
270
	 * Obtenir des informations de repartition relative a un numero nomenclatural
271
	 * @param r
272
	 * @param numeroNomenclaturalSaisiObservation
273
	 */
12 david 274
 
54 david 275
 
276
	public void obtenirImageInformationRepartition( Rafraichissable r,String numeroNomenclaturalSaisiObservation) {
277
 
278
		ImageInformationRepartitionAsynchroneDAO repDAO=new ImageInformationRepartitionAsynchroneDAO(this);
279
		repDAO.obtenirURLImage(r, numeroNomenclaturalSaisiObservation);
280
 
281
 
282
	}
283
 
66 david 284
	/**
285
	 * Obtenir une image generique associee a un numero nomenclatural
286
	 * @param r
287
	 * @param numeroNomenclaturalSaisiObservation
288
	 */
54 david 289
 
290
	public void obtenirImageGenerique( Rafraichissable r,String numeroNomenclaturalSaisiObservation) {
291
 
292
		ImageGeneriqueVueAsynchroneDAO imgDAO=new ImageGeneriqueVueAsynchroneDAO(this);
293
		imgDAO.obtenirURLImage(r, numeroNomenclaturalSaisiObservation);
294
 
295
 
296
	}
297
 
298
 
66 david 299
	/**
300
	 * Obtenir la liste de l'ensemble des entites geographiques associes aux observation d'un utilisateur
301
	 * @param r
302
	 */
54 david 303
 
66 david 304
	public void obtenirListeEntiteGeographique(Rafraichissable r) {
54 david 305
 
66 david 306
	    ListeEntiteGeographiqueObservationAsynchroneDAO entDAO = new ListeEntiteGeographiqueObservationAsynchroneDAO(this);
307
	    entDAO.obtenirListeEntitesGeographiques(r, observationMediateur.getIdentifiant());
54 david 308
 
309
	}
91 jpm 310
 
311
 
312
 
313
	public void obtenirDatesObservation(
314
			Rafraichissable r) {
315
	    ListeDateObservationAsynchroneDAO ldoDAO = new ListeDateObservationAsynchroneDAO(this);
316
	    ldoDAO.obtenirListeDate(r, observationMediateur.getIdentifiant());
317
 
318
	}
94 jpm 319
 
320
 
321
 
322
	public void obtenirLiaisonImage(Rafraichissable r,
323
			String ordreObservation) {
324
 
325
		LienImageAsynchroneDAO liaDAO = new LienImageAsynchroneDAO(this) ;
326
		liaDAO.obtenirLiaisonsObservationsImages(r, ordreObservation,observationMediateur.getIdentifiant()) ;
327
 
328
	}
101 jpm 329
 
330
 
331
 
332
	public void exporterObservations() {
333
 
334
		String[][] criteres = {{"",""}} ;
335
	 	criteres = observationMediateur.renvoyerFiltres() ;
336
		// on rassemble les critères
251 aurelien 337
		// on les crée un DAO auquel on les transmet et qui demande le nombre d'images correspondantes (pour les pages)
101 jpm 338
		ExportObservationsDAO exoDAO = new ExportObservationsDAO(this) ;
339
		exoDAO.exporterObservations(observationMediateur.getIdentifiant(), criteres) ;
340
 
341
	}
104 jpm 342
 
343
 
344
 
345
	public void supprimerLiaisonImages(String idImg, String idObs) {
346
 
347
		LienImageAsynchroneDAO lienDAO = new LienImageAsynchroneDAO(this) ;
348
		lienDAO.supprimerLienImageObservation(idImg, idObs) ;
349
 
350
	}
351
 
352
	public String getIdentifiant() {
353
 
354
		return observationMediateur.getIdentifiant() ;
355
	}
107 aurelien 356
 
357
	public void supprimerListeObservation(Rafraichissable r,
358
			String numObs) {
359
		ListeObservationAsynchroneDAO lioaDAO = new ListeObservationAsynchroneDAO(this);
360
		lioaDAO.supprimerListeObservation(r, observationMediateur.getIdentifiant(), numObs);
361
 
362
	}
108 aurelien 363
 
364
	public void transmettreListeObservation(
145 aurelien 365
			Rafraichissable r, String numObsapl, boolean publier) {
108 aurelien 366
		TransmissionObservationAsynchroneDAO toaDAO = new TransmissionObservationAsynchroneDAO(this);
145 aurelien 367
		toaDAO.transmettreObservations(r, observationMediateur.getIdentifiant(), numObsapl, publier);
108 aurelien 368
 
369
	}
115 aurelien 370
 
140 aurelien 371
	public void analyserHistorique(Rafraichissable r,String anum) {
372
 
373
		NomRetenuAsynchroneDao nraDAO = new NomRetenuAsynchroneDao(this);
374
		nraDAO.obtenirNomRetenu(r, anum);
375
 
376
	}
377
 
378
 
379
 
380
	public void importerObservations() {
381
		ImportObservationAsynchroneDAO ioDAO = new ImportObservationAsynchroneDAO(this);
382
		ioDAO.importerObservations();
383
 
384
	}
156 aurelien 385
 
386
 
387
 
388
	public void obtenirArbreMotsCles(Rafraichissable r) {
389
 
390
		MotsClesAsynchroneDAO mcoDAO = new MotsClesAsynchroneDAO(this);
391
		mcoDAO.obtenirListeMotsCles(this);
392
 
393
	}
394
 
395
	public void rafraichir(Object nouvelleDonnees,
396
			boolean repandreRaffraichissement) {
397
 
398
		if(nouvelleDonnees instanceof JSONArray) {
399
			// alors on a reçu les informations sur les mots clés
400
			JSONArray reponse = (JSONArray) nouvelleDonnees;
401
 
402
			final int taillemax = reponse.size();
403
 
404
			// si le tableau est vide
405
			if (taillemax == 0) {
406
				// on crée un arbre vide
407
				TreeNode root = new TreeNode();
318 aurelien 408
				root.setId("racine_obs");
342 aurelien 409
				root.setText("Projets");
410
				String[] usObj = { "Projets", "racine_obs" };
156 aurelien 411
				root.setUserObject(usObj);
412
				arbreMotsCles.setRootNode(root);
342 aurelien 413
 
156 aurelien 414
			}
415
 
416
			// pour chacun des élements du tableau
417
			for (int j = 0; j < taillemax; j++) {
418
				// on extrait les élements du tableau
419
				if (reponse.get(j).isObject() != null) {
420
					JSONObject noeud = (JSONObject) reponse.get(j);
421
 
422
					String id_noeud = noeud.get("cmc_id_mot_cle_utilisateur")
423
							.isString().stringValue();
424
					String mot_cle = noeud.get("cmc_mot_cle").isString()
425
							.stringValue();
426
					String parent = noeud.get("cmc_id_parent").isString()
427
							.stringValue();
428
 
429
					String[] usObj = { mot_cle, id_noeud };
430
 
431
					// et on construit l'arbre à partir de la racine (qui est
432
					// toujoursl e premier élément)
318 aurelien 433
					if (id_noeud.equals("racine_obs")) {
156 aurelien 434
						TreeNode root = new TreeNode();
435
						root.setId(id_noeud);
436
						root.setText(mot_cle);
437
						root.setUserObject(usObj);
438
						arbreMotsCles.setRootNode(root);
439
					} else {
440
						// et en ajoutant les noeuds un à un (qui sont renvoyé
441
						// dans l'ordre hierarchique de leur niveau
442
						// ce qui permet de les traiter séquentiellement)
443
						TreeNode node = new TreeNode();
444
						node.setId(id_noeud);
445
						node.setText(mot_cle);
446
						node.setChecked(false);
447
						Node parentNode = arbreMotsCles.getNodeById(parent);
448
						node.setUserObject(usObj);
342 aurelien 449
 
156 aurelien 450
						parentNode.appendChild(node);
451
					}
677 aurelien 452
 
453
					motsCles.put(id_noeud, mot_cle);
156 aurelien 454
				}
455
			}
318 aurelien 456
 
156 aurelien 457
			// enfin on met à jour l'arbre des mots clés contenu dans le modèle
318 aurelien 458
			//rafraichirArbreMotsCles(arbreMotsCles);
156 aurelien 459
			// et on notifie le médiateur de la mise à jour en lui passant une
460
			// copie des données
461
			observationMediateur.rafraichirArbreMotsCles(arbreMotsCles);
462
		}
463
 
342 aurelien 464
		if(nouvelleDonnees instanceof Observation) {
465
			observationMediateur.obtenirNombreObservation();
466
		}
467
 
156 aurelien 468
	}
469
 
470
	/**
471
	 * Met à jour l'arbre des mots clés à partir d'un objet
472
	 *
473
	 * @param o
474
	 *            le nouvel arbre de mots clés
475
	 */
476
	public void rafraichirArbreMotsCles(Object o) {
477
		arbreMotsCles = (com.gwtext.client.data.Tree) o;
478
	}
479
 
480
	/**
481
	 * Met à jour la table de correspondance mots clés / ids à partir d'un objet
482
	 *
483
	 * @param o
484
	 *            la nouvelle table des mots clés
485
	 */
486
	@SuppressWarnings("unchecked")
487
	public void rafraichirMotsCles(Object o) {
488
		if (o instanceof HashMap) {
489
			motsCles = (HashMap<String, String>) o;
490
		}
491
	}
12 david 492
 
156 aurelien 493
	/**
494
	 * Va chercher les mots clés associés à une image dans la liste des images
495
	 * chargée dans le modèle
496
	 *
497
	 * @param r
498
	 *            le rafraichissable auquel on enverra les informations
499
	 * @param id
500
	 *            l'identifiant de l'image
501
	 */
502
	public void obtenirMotsClesId(Rafraichissable r, String id) {
503
		Observation o = cacheObservation.get(id);
504
		String motsClesId = o.getMotsCles();
505
		String[] motsClesIdTab = motsClesId.split(",");
506
		r.rafraichir(motsClesIdTab, false);
507
	}
508
 
509
	/**
342 aurelien 510
	 * Met à jour les mots clés associés à une obs et appelle le DAO pour
156 aurelien 511
	 * synchroniser la base de données
512
	 *
513
	 * @param ids
385 aurelien 514
	 *            les identifiants des observations selectionnées
156 aurelien 515
	 * @param motsClesEnCours
385 aurelien 516
	 *            les mots clés à appliquer aux observations
156 aurelien 517
	 */
318 aurelien 518
	public void mettreAjourMotsCles(String motsClesEnCours, String[] idsObsALier) {
359 aurelien 519
 
520
		String motsCles = "";
521
		String obsAlier = "";
522
		int nbObs = 0;
523
 
318 aurelien 524
		for (int i = 0; i < idsObsALier.length; i++) {
359 aurelien 525
 
318 aurelien 526
			if (cacheObservation.containsKey(idsObsALier[i])) {
342 aurelien 527
 
528
				if(!motsClesEnCours.endsWith(";") && !motsClesEnCours.startsWith(";")) {
529
					motsCles += ";";
530
				}
359 aurelien 531
 
532
				obsAlier += ","+idsObsALier[i];
342 aurelien 533
				motsCles += motsClesEnCours;
534
 
359 aurelien 535
				nbObs++;
362 aurelien 536
 
537
				Observation m = cacheObservation.get(idsObsALier[i]);
538
 
539
				if(m.getMotsCles() != null && !m.getMotsCles().endsWith(";") && !motsCles.startsWith(";")) {
540
					motsCles += ";";
541
				}
542
 
543
				m.setMotsCles(m.getMotsCles()+motsCles);
544
 
545
				cacheObservation.put(m.getNumeroOrdre(), m);
156 aurelien 546
			}
547
		}
359 aurelien 548
 
549
		while(obsAlier.startsWith(",")) {
550
			obsAlier = obsAlier.replaceFirst(",", "");
551
		}
552
 
553
		if(nbObs > 0) {
554
 
385 aurelien 555
			LiaisonMotsClesAsynchroneDAO lmcDAO = new LiaisonMotsClesAsynchroneDAO(this);
556
			lmcDAO.modifier(this,observationMediateur.getIdentifiant(), obsAlier, motsClesEnCours);
359 aurelien 557
		}
156 aurelien 558
	}
559
 
385 aurelien 560
 
561
	public void supprimerLiaisonMotCleObservations(
562
			Rafraichissable r, String idObs, String idMC) {
563
 
564
		LiaisonMotsClesAsynchroneDAO lmcDAO = new LiaisonMotsClesAsynchroneDAO(this);
565
		lmcDAO.supprimer(r,observationMediateur.getIdentifiant(), idObs, idMC);
566
 
567
	}
568
 
156 aurelien 569
	/**
570
	 * Ajoute un mot clé à l'arbre des mots clés local et appelle le DAO qui
571
	 * fait la mise à jour de l'arbre des mots clés dans la base
572
	 *
573
	 * @param n
574
	 *            le nouveau noeud contenant le mot clé
575
	 * @param arbreMC
576
	 *            l'arbre des mots cles en cours
577
	 */
578
	public void ajouterMotCleDansArbre(TreeNode n,
579
			com.gwtext.client.data.Tree arbreMC) {
580
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
581
 
582
		String[] usObj = (String[]) n.getUserObject();
583
		String motCle = usObj[0];
584
		String id = usObj[1];
585
		String parentId = "";
586
 
342 aurelien 587
		if (!id.equals("racine_obs")) {
156 aurelien 588
			String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
589
			parentId = parentUsObj[1];
590
		} else {
342 aurelien 591
			parentId = "racine_obs";
156 aurelien 592
		}
318 aurelien 593
 
156 aurelien 594
		rafraichirArbreMotsCles(arbreMC);
595
 
596
		String nouveauMotCle = "&identifiant=" + getIdentifiant() + "&motcle="
597
				+ motCle + "&id=" + id + "&parent=" + parentId;
598
		MCDao.ajouterBaseDeDonnees(nouveauMotCle);
599
	}
600
 
601
	/**
602
	 * Supprime un noeud de l'arbre des mots clés et appelle le DAO qui va
603
	 * supprimer les mots clés associés dans la base
604
	 *
605
	 * @param n
606
	 *            le noeud à supprimer
607
	 * @param arbreMC
608
	 *            l'arbre des mots clés en cours
609
	 */
610
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
611
 
612
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
613
 
614
		String[] usObj = (String[]) n.getUserObject();
615
		String id = usObj[1];
318 aurelien 616
 
617
		rafraichirArbreMotsCles(arbreMC);
156 aurelien 618
 
619
		MCDao.supprimerBaseDeDonnees(id);
620
 
621
	}
622
 
623
	/**
624
	 * Modifie le noeud donné dans l'arbre des mots clés en cours et appelle le
625
	 * DAO qui synchronise la modification dans la base de données
626
	 *
627
	 * @param n
628
	 *            le noeud modifié
629
	 * @param arbreMC
630
	 *            l'arbre des mots clés en cours
631
	 */
632
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
633
 
634
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
635
 
636
		String[] usObj = (String[]) n.getUserObject();
637
		String motCle = usObj[0];
638
		String id = usObj[1];
639
		String parentId = "";
640
 
641
		if (!id.equals("racine")) {
642
			String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
643
			parentId = parentUsObj[1];
644
		} else {
645
			parentId = "racine";
646
		}
647
 
648
		rafraichirArbreMotsCles(arbreMC);
649
 
650
		String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
651
				+ parentId;
652
		MCDao.modifierBaseDeDonnees(motCleModifie);
653
 
654
	}
655
 
656
	/**
657
	 * Deplace un noeud dans l'arbre des mots cles et appelle le DAO qui
658
	 * reorganise l'arbre dans la base de donnees suivant le changement
659
	 *
660
	 * @param n
661
	 *            le noeud deplace (et son sous arbre associe)
662
	 * @param arbreMC
663
	 *            l'arbre des mots cles en cours
664
	 */
665
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
666
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
667
 
668
		String[] usObj = (String[]) n.getUserObject();
669
		String motCle = usObj[0];
670
		String id = usObj[1];
671
		String parentId = "";
342 aurelien 672
		if (!id.equals("racine_obs")) {
156 aurelien 673
			String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
674
			parentId = parentUsObj[1];
675
		} else {
342 aurelien 676
			parentId = "racine_obs";
156 aurelien 677
		}
318 aurelien 678
 
156 aurelien 679
		rafraichirArbreMotsCles(arbreMC);
680
 
681
		String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
682
				+ parentId;
683
		MCDao.deplacerBaseDeDonnees(motCleModifie);
684
	}
685
 
686
	/**
687
	 * Ajoute un nouveau mot clés à la liste des mots clés locale
688
	 *
689
	 * @param text
690
	 *            le mot clé
691
	 * @param id
692
	 *            l'identifiant du mot clé
693
	 */
694
	public void mettreAjourMotsClesId(String text, String id) {
695
		motsCles.put(id, text);
696
	}
697
 
677 aurelien 698
	public String obtenirTexteMotCle(String id) {
699
 
700
		String correspondanceId = "";
701
 
702
		String motCleTexte = motsCles.get(id);
703
 
704
		if(motCleTexte != null) {
705
			correspondanceId = motCleTexte;
706
		}
707
 
708
		return correspondanceId;
709
	}
710
 
156 aurelien 711
	public void rafraichirCacheObservation(ListeObservation li) {
712
		cacheObservation = li ;
713
	}
714
 
715
	public ListeObservation getCacheObservation() {
716
		return cacheObservation ;
717
	}
718
 
251 aurelien 719
	public void obtenirInformationCommune(Rafraichissable r, String nomCommune, String codePostal) {
720
		InformationCommuneDAO infocommune = new InformationCommuneDAO(r);
721
		infocommune.obtenirInfosCommune(r, nomCommune, codePostal);
722
	}
156 aurelien 723
 
251 aurelien 724
	public void obtenirInformationCoord(Rafraichissable r, LatLng coord) {
725
		InformationCommuneDAO infocommune = new InformationCommuneDAO(r);
726
		infocommune.obtenirCommunePlusProche(r, coord.getLongitude(), coord.getLatitude());
727
	}
2 aperonnet 728
}