Subversion Repositories eFlore/Applications.cel

Rev

Rev 54 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 54 Rev 68
Line 1... Line 1...
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
Line -... Line 2...
-
 
2
 
-
 
3
import java.util.Iterator;
2
 
4
 
3
import org.tela_botanica.client.interfaces.Filtrable;
5
import org.tela_botanica.client.interfaces.Filtrable;
-
 
6
import org.tela_botanica.client.interfaces.Rafraichissable;
-
 
7
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
8
import org.tela_botanica.client.modeles.ListeEntiteGeographiqueObservation;
Line -... Line 9...
-
 
9
import org.tela_botanica.client.observation.ObservationMediateur;
-
 
10
 
-
 
11
import com.google.gwt.json.client.JSONArray;
5
import org.tela_botanica.client.observation.ObservationMediateur;
12
import com.google.gwt.json.client.JSONObject;
6
 
13
import com.google.gwt.user.client.Window;
7
import com.google.gwt.user.client.ui.Label;
14
import com.google.gwt.user.client.ui.Label;
8
import com.gwtext.client.data.Node;
15
import com.gwtext.client.data.Node;
9
import com.gwtext.client.data.NodeTraversalCallback;
16
import com.gwtext.client.data.NodeTraversalCallback;
Line 19... Line 26...
19
 * cliquable
26
 * cliquable
20
 * 
27
 * 
21
 * @author aurelien
28
 * @author aurelien
22
 * 
29
 * 
23
 */
30
 */
24
public class ArbreLocaliteObservationFiltreVue extends Panel implements Rafraichissable,
31
public class ArbreEntiteGeographiqueObservationFiltreVue extends Panel implements Rafraichissable,
25
		Filtrable {
32
		Filtrable {
Line 26... Line 33...
26
 
33
 
27
	/**
34
	/**
28
	 * Le médiateur associé à la vue
35
	 * Le médiateur associé à la vue
29
	 */
36
	 */
Line 30... Line 37...
30
	private ObservationMediateur	observationMediateur		= null;
37
	private ObservationMediateur	observationMediateur		= null;
31
 
38
 
32
	/**
39
	/**
33
	 * Les localites en cours
40
	 * Les localites en cours
Line 34... Line 41...
34
	 */
41
	 */
35
	private String localitesEncours = "";
42
	private String entitesGeographiquesEncours = "";
36
 
43
 
37
	/**
44
	/**
-
 
45
	 * Le treepanel qui affiche l'arbre
-
 
46
	 */
Line 38... Line 47...
38
	 * Le treepanel qui affiche l'arbre
47
	private TreePanel arbreEntitesGeographiques = null;
-
 
48
 
-
 
49
 
-
 
50
 
-
 
51
	/**
-
 
52
	 * La structure de donnees qui stocke l'arbre. Utilisee a ce niveau car trop liee a la vue
-
 
53
	 */
39
	 */
54
	
40
	private TreePanel arbreLocalites = null;
55
	private Tree donneeEntitesGeographiques = new Tree();;
41
 
56
	
Line 42... Line 57...
42
	/**
57
	/**
Line 51... Line 66...
51
 
66
 
52
	/**
67
	/**
53
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
68
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
54
	 */
69
	 */
55
	@SuppressWarnings("unused")
70
	@SuppressWarnings("unused")
56
	private ArbreLocaliteObservationFiltreVue() {
71
	private ArbreEntiteGeographiqueObservationFiltreVue() {
57
		super();
72
		super();
Line 58... Line 73...
58
	}
73
	}
59
 
74
 
60
	/**
75
	/**
61
	 * Constructeur avec paramètres
76
	 * Constructeur avec paramètres
62
	 * 
77
	 * 
63
	 * @param im
78
	 * @param im
64
	 *            le médiateur à associer
79
	 *            le médiateur à associer
Line 65... Line 80...
65
	 */
80
	 */
66
	public ArbreLocaliteObservationFiltreVue(ObservationMediateur obs) {
81
	public ArbreEntiteGeographiqueObservationFiltreVue(ObservationMediateur obs) {
Line 67... Line 82...
67
 
82
 
Line 68... Line 83...
68
		// on crée le panel
83
		// on crée le panel
69
		super();
84
		super();
70
		
85
		
Line 71... Line 86...
71
		this.observationMediateur = obs;
86
		this.observationMediateur = obs;
Line 72... Line 87...
72
 
87
 
73
		// on crée le conteneur de l'arbre
88
		// on crée le conteneur de l'arbre
Line 89... Line 104...
89
 
104
 
90
	/**
105
	/**
91
	 * Ajoute les listeners pour le rendu du panel
106
	 * Ajoute les listeners pour le rendu du panel
92
	 */
107
	 */
93
	private void ajouterListenersPanel() {
108
	private void ajouterListenersPanel() {
Line 94... Line 109...
94
		this.addListener(new PanelListenerAdapter() {
109
		  this.addListener(new PanelListenerAdapter() {
95
 
110
 
96
			// on instancie réellement les composants au moment du rendu pour
111
			// on instancie réellement les composants au moment du rendu pour
97
			// accélérer l'affichage
-
 
98
			// et éviter des bugs
112
			// accélérer l'affichage
Line 99... Line 113...
99
			@Override
113
			// et éviter des bugs
100
			public void onRender(Component component) {
114
			public void onRender(Component component) {
101
 
115
 
102
				// on interdit le drag and drop dans l'arbre
116
				// on interdit le drag and drop dans l'arbre
103
				arbreLocalites.setEnableDD(false);
117
				arbreEntitesGeographiques.setEnableDD(false);
104
				arbreLocalites.setId("x-view-tree-filter");
118
				arbreEntitesGeographiques.setId("x-view-tree-filter");
Line 105... Line 119...
105
				arbreLocalites.setAutoWidth(false);
119
				arbreEntitesGeographiques.setAutoWidth(false);
106
				arbreLocalites.setAutoScroll(true);
120
				arbreEntitesGeographiques.setAutoScroll(true);
107
				arbreLocalites.setBorder(false);
121
				arbreEntitesGeographiques.setBorder(false);
108
 
122
 
109
				// on crée une racine pour l'arbre
123
				// on crée une racine pour l'arbre
Line 110... Line 124...
110
				TreeNode root = new TreeNode("Tags");
124
				TreeNode root = new TreeNode("Tags");
111
				root.setId("racine_filtre");
125
				root.setId("racine_filtre");
112
				String[] usObject = { "Localités", "racine" };
126
				String[] usObject = { "Localités", "racine" };
Line 113... Line 127...
113
				root.setUserObject(usObject);
127
				root.setUserObject(usObject);
114
 
128
 
-
 
129
				arbreEntitesGeographiques.setRootNode(root);
Line 115... Line 130...
115
				arbreLocalites.setRootNode(root);
130
				arbreEntitesGeographiques.setRootVisible(true);
116
				arbreLocalites.setRootVisible(true);
131
				arbreEntitesGeographiques.setBorder(false);
Line 117... Line -...
117
				arbreLocalites.setBorder(false);
-
 
118
 
-
 
119
				// on met en forme le layout
-
 
120
				((Panel) component).add(arbreLocalites);
-
 
121
 
-
 
122
				// on ajoute les listeners d'évenements
-
 
123
				ajouterListeners();
132
 
124
 
133
				// on met en forme le layout
Line -... Line 134...
-
 
134
				//((Panel) component).add(arbreEntitesGeographiques);
125
				
135
				add(arbreEntitesGeographiques);
Line 126... Line 136...
126
				// et on demande l'arbre des localites
136
 
127
			
137
				// on ajoute les listeners d'évenements
Line -... Line 138...
-
 
138
				ajouterListeners();
-
 
139
 
128
				observationMediateur.obtenirArbreLocalites(observationMediateur.getPanneauFiltres().getArbreLocaliteObservationFiltreVue());
140
				
129
				
141
				// enfin on considère le composant comme instancié
130
										
142
				estInstancie = true;
131
				
143
 
Line 148... Line 160...
148
	 * Méthode héritée de l'interface rafraichissable
160
	 * Méthode héritée de l'interface rafraichissable
149
	 */
161
	 */
150
	public void rafraichir(Object nouvelleDonnees,
162
	public void rafraichir(Object nouvelleDonnees,
151
			boolean repandreRaffraichissement) {
163
			boolean repandreRaffraichissement) {
Line 152... Line -...
152
 
-
 
153
		// si on a reçu un arbre
-
 
154
		if (nouvelleDonnees instanceof Tree) {
-
 
Line -... Line 164...
-
 
164
 
-
 
165
 
-
 
166
		if (nouvelleDonnees instanceof ListeEntiteGeographiqueObservation) {
-
 
167
		
-
 
168
			
-
 
169
			String entite=null;
-
 
170
			String parent=null;
-
 
171
			
-
 
172
			ListeEntiteGeographiqueObservation data = (ListeEntiteGeographiqueObservation) nouvelleDonnees ;
-
 
173
		
-
 
174
			
-
 
175
			if (data.isEmpty()) {
-
 
176
				// on crée un arbre vide
-
 
177
				TreeNode root = new TreeNode();
-
 
178
				root.setId("racine");
-
 
179
				root.setText("Tags");
-
 
180
				String[] usObj = { "Tags", "racine" };
-
 
181
				root.setUserObject(usObj);
-
 
182
				donneeEntitesGeographiques.setRootNode(root);
-
 
183
				
-
 
184
			}
-
 
185
			
-
 
186
			// on la parse et on récupère les informations quiç nous interessent
-
 
187
			for (Iterator<String> it= data.keySet().iterator(); it.hasNext();) {
-
 
188
				
-
 
189
				EntiteGeographiqueObservation ent=(EntiteGeographiqueObservation) data.get(it.next());
-
 
190
				
-
 
191
				entite=ent.getEntite();
-
 
192
				parent=ent.getParent();
-
 
193
				
-
 
194
			
-
 
195
				String[] usObj = { entite };
-
 
196
 
-
 
197
					// et on construit l'arbre à partir de la racine (qui est
-
 
198
					// toujours le premier élément)
-
 
199
					if (entite.equals("racine")) {
-
 
200
						TreeNode root = new TreeNode();
-
 
201
						root.setId(entite);
-
 
202
						root.setText(entite);
-
 
203
						root.setUserObject(usObj);
-
 
204
						donneeEntitesGeographiques.setRootNode(root);
-
 
205
					} else {
-
 
206
						// et en ajoutant les noeuds un à un (qui sont renvoyé
-
 
207
						// dans l'ordre hierarchique de leur niveau
-
 
208
						// ce qui permet de les traiter séquentiellement)
-
 
209
						TreeNode node = new TreeNode();
-
 
210
						node.setId(entite);
-
 
211
						node.setText(entite);
-
 
212
						node.setChecked(false);
-
 
213
						Node parentNode = donneeEntitesGeographiques.getNodeById(parent);
-
 
214
						node.setUserObject(usObj);
-
 
215
						parentNode.appendChild(node);
-
 
216
					}
-
 
217
				}
-
 
218
 
155
			Tree nouvelArbre = (Tree) nouvelleDonnees;
219
			}
156
 
220
			
Line 157... Line 221...
157
			// on vide tous les noeuds
221
			// on vide tous les noeuds
Line 158... Line 222...
158
			arbreLocalites.getRootNode().eachChild(new NodeTraversalCallback() {
222
			arbreEntitesGeographiques.getRootNode().eachChild(new NodeTraversalCallback() {
159
 
223
 
160
				public boolean execute(Node node) {
224
				public boolean execute(Node node) {
Line 161... Line 225...
161
 
225
 
Line 162... Line 226...
162
					node.remove();
226
					node.remove();
163
					return true;
227
					return true;
164
				}
228
				}
Line 165... Line 229...
165
 
229
 
166
			});
230
			});
167
 
231
 
168
			// et on recopie le nouvel arbre
232
			// et on recopie le nouvel arbre
169
			copierFilsNoeud(nouvelArbre.getRootNode(), arbreLocalites
233
			copierFilsNoeud(donneeEntitesGeographiques.getRootNode(), arbreEntitesGeographiques
Line 170... Line 234...
170
					.getRootNode());
234
					.getRootNode());
171
 
235
 
172
			// si l'arbre n'était pas encore considéré comme instancié
-
 
173
			if (!estInstancie) {
236
			// si l'arbre n'était pas encore considéré comme instancié
174
				// on signale que oui
-
 
175
				estInstancie = true;
-
 
176
			}
-
 
177
 
-
 
178
			// l'état du filtre est réinitialisé
-
 
179
			filtreModifie = false;
-
 
180
 
-
 
181
			show();
-
 
182
		}
-
 
183
 
-
 
184
		if (nouvelleDonnees instanceof TreeNode) {
-
 
185
			TreeNode nd = (TreeNode) nouvelleDonnees;
-
 
186
 
-
 
187
			// si le noeud n'existe pas déjà c'est un ajout
-
 
188
			if (arbreLocalites.getTree().getNodeById(nd.getId() + "_filtre") == null) {
-
 
189
				// donc on ne fait rien de spécial
-
 
190
			}
-
 
191
			// si le noeud existe déjà c'est un déplacement
-
 
192
			else {
-
 
193
				// alors on supprime d'abord le noeud concerné
-
 
194
				arbreLocalites.getTree().getNodeById(nd.getId() + "_filtre")
-
 
195
				.remove();
-
 
196
			}
-
 
197
 
-
 
198
			// on cherche le père du nouveau noeud
-
 
199
			Node ndPereOriginal = nd.getParentNode();
-
 
200
			String idPereFiltre = ndPereOriginal.getId() + "_filtre";
-
 
201
 
-
 
202
			String[] usObj = (String[]) nd.getUserObject();
-
 
203
			TreeNode child = new TreeNode(usObj[0]);
-
 
204
			child.setId(usObj[1] + "_filtre");
-
 
205
			child.setChecked(false);
-
 
206
			child.setUserObject(usObj);
-
 
207
			arbreLocalites.getNodeById(idPereFiltre).appendChild(child);
-
 
208
 
-
 
209
			// et on ajoute le nouveau noeud à son père
-
 
210
			copierFilsNoeud(nd, child);
-
 
211
		}
-
 
212
 
-
 
213
		// si on reçoit une string
-
 
214
		if (nouvelleDonnees instanceof String) {
-
 
215
			String idSupp = (String) nouvelleDonnees + "_filtre";
237
			if (!estInstancie) {
-
 
238
				// on signale que oui
-
 
239
				estInstancie = true;
-
 
240
			}
Line 216... Line 241...
216
			// c'est une suppression et si le noeud existe bien
241
 
217
			if (arbreLocalites.getTree().getNodeById(idSupp) != null) {
242
			// l'état du filtre est réinitialisé
218
				// on le supprime
243
			filtreModifie = false;
219
				arbreLocalites.getTree().getNodeById(idSupp).remove();
244
			show() ;
220
			}
245
	}
221
		}
246
	
222
 
247
 
223
	}
248
	
Line 224... Line 249...
224
 
249
 
225
 
250
 
226
	/**
251
	/**
Line 247... Line 272...
247
	 */
272
	 */
248
	public String[] renvoyerValeursAFiltrer() {
273
	public String[] renvoyerValeursAFiltrer() {
Line 249... Line 274...
249
 
274
 
Line 250... Line 275...
250
		valider();
275
		valider();
Line 251... Line 276...
251
 
276
 
252
		String[] valeursFiltrees = { "localites", localitesEncours };
277
		String[] valeursFiltrees = { "localites", entitesGeographiquesEncours };
Line 253... Line 278...
253
 
278
 
Line 269... Line 294...
269
 
294
 
Line 270... Line 295...
270
			for (int i = 0; i < ndNodeFils.length; i++) {
295
			for (int i = 0; i < ndNodeFils.length; i++) {
271
 
296
 
272
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
297
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
273
				TreeNode child = new TreeNode(usObj[0]);
298
				TreeNode child = new TreeNode(usObj[0]);
274
				child.setId(usObj[1] + "_filtre");
299
				child.setId(usObj[0] + "_filtre");
275
				child.setChecked(false);
300
				child.setChecked(false);
Line 276... Line 301...
276
				child.setUserObject(usObj);
301
				child.setUserObject(usObj);
Line 293... Line 318...
293
	}
318
	}
Line 294... Line 319...
294
 
319
 
295
	public void valider() {
320
	public void valider() {
296
		if (estInstancie) {
321
		if (estInstancie) {
297
			// on vide les mots clés en cours
322
			// on vide les mots clés en cours
298
			localitesEncours = "";
323
			entitesGeographiquesEncours = "";
299
			// pour chaque noeud à partir de la racine
324
			// pour chaque noeud à partir de la racine
300
			getArbreMotsCles().getRootNode().cascade(
325
			getArbreMotsCles().getRootNode().cascade(
Line 301... Line 326...
301
					new NodeTraversalCallback() {
326
					new NodeTraversalCallback() {
Line 307... Line 332...
307
							// infos
332
							// infos
308
							TreeNode tn = getArbreMotsCles().getNodeById(
333
							TreeNode tn = getArbreMotsCles().getNodeById(
309
									node.getId());
334
									node.getId());
Line 310... Line 335...
310
 
335
 
311
							String[] usObject = (String[]) tn.getUserObject();
336
							String[] usObject = (String[]) tn.getUserObject();
312
							//observationMediateur.mettreAjourLocalites(usObject[0],
337
							//observationMediateur.mettreAjourEntitesGeographiques(usObject[0],
Line 313... Line 338...
313
								//	usObject[1]);
338
								//	usObject[1]);
314
 
339
 
315
							if (tn.getUI().isChecked()) {
340
							if (tn.getUI().isChecked()) {
316
								// et les concatène à la string des mots clés en
341
								// et les concatène à la string des mots clés en
317
								// cours
342
								// cours
Line 318... Line 343...
318
								localitesEncours += usObject[1] + ",";
343
								entitesGeographiquesEncours += usObject[1] + ",";
319
							}
344
							}