Subversion Repositories eFlore/Applications.cel

Rev

Rev 2 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 5
Line 15... Line 15...
15
import com.gwtext.client.widgets.tree.TreePanel;
15
import com.gwtext.client.widgets.tree.TreePanel;
Line 16... Line 16...
16
 
16
 
17
/**
17
/**
18
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton 
18
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton
-
 
19
 * cliquable
19
 * cliquable
20
 * 
20
 * @author aurelien
21
 * @author aurelien
21
 *
22
 * 
22
 */
23
 */
-
 
24
public class ArbreMotsClesFiltreVue extends Panel implements Rafraichissable,
Line 23... Line 25...
23
public class ArbreMotsClesFiltreVue extends Panel implements Rafraichissable, Filtrable {
25
		Filtrable {
24
 
26
 
25
	/**
27
	/**
26
	 * Le médiateur associé à la vue
28
	 * Le médiateur associé à la vue
Line 48... Line 50...
48
	
50
 
49
	/**
51
	/**
50
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
52
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
51
	 */
53
	 */
52
	@SuppressWarnings("unused")
54
	@SuppressWarnings("unused")
53
	private ArbreMotsClesFiltreVue()
-
 
54
	{
55
	private ArbreMotsClesFiltreVue() {
55
		super() ;
56
		super();
Line 56... Line 57...
56
	}
57
	}
57
	
58
 
-
 
59
	/**
-
 
60
	 * Constructeur avec paramètres
58
	/**
61
	 * 
59
	 * Constructeur avec paramètres
62
	 * @param im
60
	 * @param im le médiateur à associer
63
	 *            le médiateur à associer
61
	 */
-
 
Line 62... Line 64...
62
	public ArbreMotsClesFiltreVue(ImageMediateur im)
64
	 */
63
	{
65
	public ArbreMotsClesFiltreVue(ImageMediateur im) {
64
		
66
 
65
		// on crée le panel
67
		// on crée le panel
Line 85... Line 87...
85
	}
87
	}
Line 86... Line 88...
86
	
88
 
87
	/**
89
	/**
88
	 * Ajoute les listeners pour le rendu du panel
90
	 * Ajoute les listeners pour le rendu du panel
89
	 */
91
	 */
90
	private void ajouterListenersPanel()
-
 
91
	{
92
	private void ajouterListenersPanel() {
Line 92... Line 93...
92
		this.addListener(new PanelListenerAdapter() {
93
		this.addListener(new PanelListenerAdapter() {
-
 
94
 
93
 
95
			// on instancie réellement les composants au moment du rendu pour
94
			// on instancie réellement les composants au moment du rendu pour accélérer l'affichage
96
			// accélérer l'affichage
Line 95... Line 97...
95
			// et éviter des bugs
97
			// et éviter des bugs
96
			public void onRender(Component component) {
98
			public void onRender(Component component) {
Line 110... Line 112...
110
				
112
 
111
				arbreMotsCles.setRootNode(root) ;
113
				arbreMotsCles.setRootNode(root);
112
				arbreMotsCles.setRootVisible(true) ;
114
				arbreMotsCles.setRootVisible(true);
Line 113... Line -...
113
				arbreMotsCles.setBorder(false) ;
-
 
114
				
115
				arbreMotsCles.setBorder(false);
115
				
116
 
Line 116... Line 117...
116
				// on met en forme le layout
117
				// on met en forme le layout
117
				((Panel)component).add(arbreMotsCles) ;
118
				((Panel) component).add(arbreMotsCles);
Line 118... Line 119...
118
				
119
 
-
 
120
				// on ajoute les listeners d'évenements
-
 
121
				ajouterListeners();
119
				// on ajoute les listeners d'évenements
122
 
-
 
123
				// et on demande l'arbre des mots clés
Line 120... Line 124...
120
				ajouterListeners() ;
124
				getIMediateur()
121
				
125
						.obtenirArbreMotsCles(
Line 122... Line 126...
122
				// et on demande l'arbre des mots clés
126
								getIMediateur().getPanneauFiltres()
Line 131... Line 135...
131
	}
135
	}
Line 132... Line 136...
132
		
136
 
133
	/**
137
	/**
134
	 * ajoute les listeners pour les boutons et le cochage des mots clés
138
	 * ajoute les listeners pour les boutons et le cochage des mots clés
135
	 */  
139
	 */
136
	private void ajouterListeners()
-
 
Line 137... Line 140...
137
	{
140
	private void ajouterListeners() {
Line 138... Line 141...
138
 
141
 
139
	}
142
	}
140
	
143
 
141
	/**
144
	/**
142
	 * Méthode héritée de l'interface rafraichissable
145
	 * Méthode héritée de l'interface rafraichissable
Line 143... Line 146...
143
	 */
146
	 */
144
	public void rafraichir(Object nouvelleDonnees,
147
	public void rafraichir(Object nouvelleDonnees,
145
			boolean repandreRaffraichissement) {
-
 
146
		
148
			boolean repandreRaffraichissement) {
Line 147... Line 149...
147
		// si on a reçu un arbre
149
 
148
		if(nouvelleDonnees instanceof Tree)
150
		// si on a reçu un arbre
Line 156... Line 158...
156
						
158
 
157
						node.remove() ;
159
					node.remove();
158
						return true ;
160
					return true;
Line 159... Line -...
159
					}
-
 
160
					
161
				}
Line 161... Line 162...
161
					
162
 
162
				}) ;
163
			});
-
 
164
 
Line 163... Line 165...
163
				
165
			// et on recopie le nouvel arbre
164
				// et on recopie le nouvel arbre
166
			copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles
165
				copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ;
-
 
166
					
167
					.getRootNode());
167
					// si l'arbre n'était pas encore considéré comme instancié
168
 
168
					if(!estInstancie)
169
			// si l'arbre n'était pas encore considéré comme instancié
Line 169... Line 170...
169
					{
170
			if (!estInstancie) {
170
						// on signale que oui
171
				// on signale que oui
Line 171... Line 172...
171
						estInstancie = true ;
172
				estInstancie = true;
172
					}
173
			}
Line 173... Line 174...
173
					
174
 
174
					// l'état du filtre est réinitialisé 
-
 
175
					filtreModifie = false ;
175
			// l'état du filtre est réinitialisé
Line 176... Line 176...
176
					
176
			filtreModifie = false;
177
					show() ;
177
 
178
		}
-
 
179
		
178
			show();
180
		if(nouvelleDonnees instanceof TreeNode)
179
		}
181
		{
180
 
182
			TreeNode nd = (TreeNode)nouvelleDonnees ;
181
		if (nouvelleDonnees instanceof TreeNode) {
183
			
-
 
184
			// si le noeud n'existe pas déjà c'est un ajout
182
			TreeNode nd = (TreeNode) nouvelleDonnees;
185
			if(arbreMotsCles.getTree().getNodeById(nd.getId()+"_filtre") == null)
183
 
-
 
184
			// si le noeud n'existe pas déjà c'est un ajout
186
			{
185
			if (arbreMotsCles.getTree().getNodeById(nd.getId() + "_filtre") == null) {
Line 187... Line 186...
187
				// donc on ne fait rien de spécial
186
				// donc on ne fait rien de spécial
188
			}
187
			}
189
			// si le noeud existe déjà c'est un déplacement
188
			// si le noeud existe déjà c'est un déplacement
Line 207... Line 206...
207
			// et on ajoute le nouveau noeud à son père
206
			// et on ajoute le nouveau noeud à son père
208
			copierFilsNoeud(nd, child) ;
207
			copierFilsNoeud(nd, child);
209
		}
208
		}
Line 210... Line 209...
210
		
209
 
211
		// si on reçoit une string
210
		// si on reçoit une string
212
		if(nouvelleDonnees instanceof String)
-
 
213
		{
211
		if (nouvelleDonnees instanceof String) {
214
			String idSupp = (String)nouvelleDonnees+"_filtre" ;
212
			String idSupp = (String) nouvelleDonnees + "_filtre";
215
			// c'est une suppression et si le noeud existe bien
213
			// c'est une suppression et si le noeud existe bien
216
			if(arbreMotsCles.getTree().getNodeById(idSupp) != null)
-
 
217
			{
214
			if (arbreMotsCles.getTree().getNodeById(idSupp) != null) {
218
				// on le supprime
215
				// on le supprime
219
				arbreMotsCles.getTree().getNodeById(idSupp).remove() ;
216
				arbreMotsCles.getTree().getNodeById(idSupp).remove();
220
			}
217
			}
Line 221... Line 218...
221
		}
218
		}
Line 222... Line 219...
222
		
219
 
223
	}
220
	}
-
 
221
 
224
	
222
	/**
225
	/**
223
	 * Accesseur pour le médiateur
226
	 * Accesseur pour le médiateur
224
	 * 
227
	 * @return le médiateur associé
-
 
228
	 */
225
	 * @return le médiateur associé
229
	public ImageMediateur getIMediateur()
226
	 */
Line 230... Line 227...
230
	{
227
	public ImageMediateur getIMediateur() {
231
		return iMediateur ;
228
		return iMediateur;
-
 
229
	}
232
	}
230
 
233
	
231
	/**
234
	/**
232
	 * Accesseur pour le panneau contenant l'arbre
235
	 * Accesseur pour le panneau contenant l'arbre
-
 
236
	 * @return le panneau de l'arbre des mots clés
233
	 * 
237
	 */
234
	 * @return le panneau de l'arbre des mots clés
Line 238... Line 235...
238
	public TreePanel getArbreMotsCles()
235
	 */
239
	{
236
	public TreePanel getArbreMotsCles() {
240
		return arbreMotsCles ;
-
 
241
	}
237
		return arbreMotsCles;
242
	
238
	}
Line 243... Line 239...
243
	/**
239
 
244
	 * Méthode héritée de Filtrable
240
	/**
Line 245... Line 241...
245
	 * renvoie le nom du filtre
241
	 * Méthode héritée de Filtrable renvoie le nom du filtre
246
	 */
242
	 */
-
 
243
	public String renvoyerNomFiltre() {
247
	public String renvoyerNomFiltre() {
244
 
248
		
245
		return "mots clés";
249
		return "mots clés" ;
246
	}
Line 250... Line 247...
250
	}
247
 
Line 261... Line 258...
261
		
258
 
262
		return valeursFiltrees ;
259
		return valeursFiltrees;
Line 263... Line 260...
263
	}
260
	}
264
	
261
 
265
	/**
262
	/**
-
 
263
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
-
 
264
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
266
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un copie du sous arbre du premier
265
	 * 
-
 
266
	 * @param ndPereOriginal
267
	 * noeud, qu'elle concatène au deuxième 
267
	 *            le père des noeuds de l'arbre original
268
	 * @param ndPereOriginal le père des noeuds de l'arbre original
268
	 * @param ndPereCopie
269
	 * @param ndPereCopie le père qui va recevoir les copies
269
	 *            le père qui va recevoir les copies
270
	 */
-
 
271
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
270
	 */
272
	{
-
 
273
		if(ndPereCopie != null && ndPereOriginal != null)
271
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
Line 274... Line 272...
274
		{
272
		if (ndPereCopie != null && ndPereOriginal != null) {
Line 275... Line 273...
275
			Node[] ndNodeFils = ndPereOriginal.getChildNodes() ;
273
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
Line 281... Line 279...
281
				child.setId(usObj[1]+"_filtre") ;
279
				child.setId(usObj[1] + "_filtre");
282
				child.setChecked(false);
280
				child.setChecked(false);
283
				child.setUserObject(usObj) ;
281
				child.setUserObject(usObj);
284
				ndPereCopie.appendChild(child) ;
282
				ndPereCopie.appendChild(child);
Line 285... Line 283...
285
				
283
 
286
				if(! ndNodeFils[i].isLeaf())
-
 
287
				{
284
				if (!ndNodeFils[i].isLeaf()) {
288
					copierFilsNoeud(ndNodeFils[i],child) ;
285
					copierFilsNoeud(ndNodeFils[i], child);
Line 289... Line 286...
289
				}
286
				}
290
				
287
 
291
			}
288
			}
Line 292... Line 289...
292
		}
289
		}
293
	}
-
 
294
 
290
	}
295
	/**
291
 
296
	 * Méthode héritée de Filtrable
292
	/**
Line 297... Line 293...
297
	 * Renvoie l'état du filtre (modifié ou non)
293
	 * Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
298
	 */
294
	 */
Line 299... Line 295...
299
	public boolean renvoyerEtatFiltre() {
295
	public boolean renvoyerEtatFiltre() {
300
		
-
 
301
		return filtreModifie ;
296
 
302
	}
-
 
303
	
297
		return filtreModifie;
304
	public void valider()
298
	}
305
	{
299
 
306
		if(estInstancie)
300
	public void valider() {
-
 
301
		if (estInstancie) {
Line 307... Line 302...
307
		{
302
			// on vide les mots clés en cours
308
			// on vide les mots clés en cours
303
			motsClesEncours = "";
Line 309... Line 304...
309
			motsClesEncours = "" ;
304
			// pour chaque noeud à partir de la racine
-
 
305
			getArbreMotsCles().getRootNode().cascade(
310
			// pour chaque noeud à partir de la racine
306
					new NodeTraversalCallback() {
-
 
307
 
Line 311... Line 308...
311
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
308
						// on éxécute une fonction
312
			
309
						public boolean execute(Node node) {
-
 
310
 
Line 313... Line 311...
313
			// on éxécute une fonction
311
							// on récupère le mot clé associé au noeud et ses
314
			public boolean execute(Node node) {
-
 
315
			
312
							// infos
-
 
313
							TreeNode tn = getArbreMotsCles().getNodeById(
316
					// on récupère le mot clé associé au noeud et ses infos
314
									node.getId());
317
					TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
315
 
Line 318... Line 316...
318
	
316
							String[] usObject = (String[]) tn.getUserObject();
319
						String[] usObject =  (String[])tn.getUserObject() ;
317
							getIMediateur().mettreAjourMotsClesId(usObject[0],