Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2 Rev 5
Line 13... Line 13...
13
import com.gwtext.client.widgets.event.PanelListenerAdapter;
13
import com.gwtext.client.widgets.event.PanelListenerAdapter;
14
import com.gwtext.client.widgets.tree.TreeNode;
14
import com.gwtext.client.widgets.tree.TreeNode;
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
27
	 */
29
	 */
28
	private ImageMediateur iMediateur = null ;
30
	private ImageMediateur iMediateur = null;
29
	/**
31
	/**
30
	 * Les mots clés en cours
32
	 * Les mots clés en cours
31
	 */
33
	 */
32
	private String motsClesEncours = "" ;
34
	private String motsClesEncours = "";
33
	
35
 
34
	/**
36
	/**
35
	 * Le treepanel qui affiche l'arbre
37
	 * Le treepanel qui affiche l'arbre
36
	 */
38
	 */
37
	private TreePanel arbreMotsCles = null ;
39
	private TreePanel arbreMotsCles = null;
38
	
40
 
39
	/**
41
	/**
40
	 * booléen d'initialisation
42
	 * booléen d'initialisation
41
	 */
43
	 */
42
	private boolean estInstancie = false ;
44
	private boolean estInstancie = false;
43
	
45
 
44
	/**
46
	/**
45
	 * booléen d'etat
47
	 * booléen d'etat
46
	 */
48
	 */
47
	private boolean filtreModifie = false ;
49
	private boolean filtreModifie = false;
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")
-
 
53
	private ArbreMotsClesFiltreVue()
54
	@SuppressWarnings("unused")
54
	{
55
	private ArbreMotsClesFiltreVue() {
55
		super() ;
56
		super();
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
	 */
-
 
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
66
		super() ;
68
		super();
67
		//this.setLayout(new VerticalLayout());
69
		// this.setLayout(new VerticalLayout());
68
		iMediateur = im ;
70
		iMediateur = im;
69
		
71
 
70
		// on crée le conteneur de l'arbre
72
		// on crée le conteneur de l'arbre
71
		Label labelRecherche = new Label("Mots clés :") ;
73
		Label labelRecherche = new Label("Mots clés :");
72
		arbreMotsCles = new TreePanel() ;
74
		arbreMotsCles = new TreePanel();
73
		
75
 
74
		this.setPaddings(5) ;
76
		this.setPaddings(5);
75
		
77
 
76
		this.setBorder(false) ;
78
		this.setBorder(false);
77
		this.setCollapsible(true) ;
79
		this.setCollapsible(true);
78
		this.setAutoWidth(true) ;
80
		this.setAutoWidth(true);
79
		
81
 
80
		add(labelRecherche) ;
82
		add(labelRecherche);
81
		
83
 
82
		// on ajoute les listeners
84
		// on ajoute les listeners
83
		ajouterListenersPanel() ;
85
		ajouterListenersPanel();
84
		estInstancie = false ;
86
		estInstancie = false;
85
	}
87
	}
86
	
88
 
87
	/**
89
	/**
88
	 * Ajoute les listeners pour le rendu du panel
90
	 * Ajoute les listeners pour le rendu du panel
89
	 */
-
 
90
	private void ajouterListenersPanel()
91
	 */
Line 91... Line 92...
91
	{
92
	private void ajouterListenersPanel() {
-
 
93
		this.addListener(new PanelListenerAdapter() {
92
		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
95
			// et éviter des bugs
97
			// et éviter des bugs
96
			public void onRender(Component component) {
98
			public void onRender(Component component) {
97
				
99
 
98
				// on interdit le drag and drop dans l'arbre
100
				// on interdit le drag and drop dans l'arbre
99
				arbreMotsCles.setEnableDD(false) ;
101
				arbreMotsCles.setEnableDD(false);
100
				arbreMotsCles.setId("x-view-tree-filter") ;
102
				arbreMotsCles.setId("x-view-tree-filter");
101
				arbreMotsCles.setAutoWidth(false) ;
103
				arbreMotsCles.setAutoWidth(false);
102
				arbreMotsCles.setAutoScroll(true) ;
104
				arbreMotsCles.setAutoScroll(true);
103
				arbreMotsCles.setBorder(false) ;
105
				arbreMotsCles.setBorder(false);
104
				
106
 
105
				// on crée une racine pour l'arbre
107
				// on crée une racine pour l'arbre
106
				TreeNode root = new TreeNode("Tags") ;
108
				TreeNode root = new TreeNode("Tags");
107
				root.setId("racine_filtre") ;
109
				root.setId("racine_filtre");
108
				String[] usObject = {"Mots clés" , "racine" } ;
110
				String[] usObject = { "Mots clés", "racine" };
109
				root.setUserObject(usObject) ;
111
				root.setUserObject(usObject);
110
				
112
 
111
				arbreMotsCles.setRootNode(root) ;
-
 
112
				arbreMotsCles.setRootVisible(true) ;
113
				arbreMotsCles.setRootNode(root);
113
				arbreMotsCles.setBorder(false) ;
114
				arbreMotsCles.setRootVisible(true);
114
				
115
				arbreMotsCles.setBorder(false);
115
				
116
 
116
				// on met en forme le layout
117
				// on met en forme le layout
117
				((Panel)component).add(arbreMotsCles) ;
118
				((Panel) component).add(arbreMotsCles);
118
				
119
 
119
				// on ajoute les listeners d'évenements
120
				// on ajoute les listeners d'évenements
-
 
121
				ajouterListeners();
-
 
122
 
120
				ajouterListeners() ;
123
				// et on demande l'arbre des mots clés
-
 
124
				getIMediateur()
121
				
125
						.obtenirArbreMotsCles(
122
				// et on demande l'arbre des mots clés
126
								getIMediateur().getPanneauFiltres()
123
				getIMediateur().obtenirArbreMotsCles(getIMediateur().getPanneauFiltres().getMotsClesFiltre()) ;
127
										.getMotsClesFiltre());
124
				
128
 
125
				// enfin on considère le composant comme instancié
129
				// enfin on considère le composant comme instancié
126
				estInstancie = true ;
130
				estInstancie = true;
127
				
131
 
128
			}
132
			}
129
			
133
 
130
		}) ;
134
		});
131
	}
135
	}
132
		
136
 
133
	/**
137
	/**
134
	 * ajoute les listeners pour les boutons et le cochage des mots clés
-
 
Line 135... Line 138...
135
	 */  
138
	 * ajoute les listeners pour les boutons et le cochage des mots clés
136
	private void ajouterListeners()
139
	 */
137
	{
140
	private void ajouterListeners() {
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
143
	 */
146
	 */
144
	public void rafraichir(Object nouvelleDonnees,
147
	public void rafraichir(Object nouvelleDonnees,
145
			boolean repandreRaffraichissement) {
-
 
146
		
148
			boolean repandreRaffraichissement) {
147
		// si on a reçu un arbre
149
 
148
		if(nouvelleDonnees instanceof Tree)
150
		// si on a reçu un arbre
149
		{
151
		if (nouvelleDonnees instanceof Tree) {
150
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
152
			Tree nouvelArbre = (Tree) nouvelleDonnees;
151
				
153
 
152
				// on vide tous les noeuds
154
			// on vide tous les noeuds
153
				arbreMotsCles.getRootNode().eachChild(new NodeTraversalCallback() {
155
			arbreMotsCles.getRootNode().eachChild(new NodeTraversalCallback() {
154
					
156
 
155
					public boolean execute(Node node) {
157
				public boolean execute(Node node) {
156
						
-
 
157
						node.remove() ;
158
 
158
						return true ;
159
					node.remove();
159
					}
160
					return true;
160
					
161
				}
161
					
162
 
-
 
163
			});
162
				}) ;
164
 
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é
169
					{
170
			if (!estInstancie) {
170
						// on signale que oui
171
				// on signale que oui
171
						estInstancie = true ;
172
				estInstancie = true;
172
					}
173
			}
173
					
174
 
174
					// l'état du filtre est réinitialisé 
175
			// l'état du filtre est réinitialisé
175
					filtreModifie = false ;
176
			filtreModifie = false;
176
					
177
 
177
					show() ;
-
 
178
		}
178
			show();
179
		
179
		}
180
		if(nouvelleDonnees instanceof TreeNode)
180
 
181
		{
181
		if (nouvelleDonnees instanceof TreeNode) {
182
			TreeNode nd = (TreeNode)nouvelleDonnees ;
-
 
183
			
182
			TreeNode nd = (TreeNode) nouvelleDonnees;
184
			// si le noeud n'existe pas déjà c'est un ajout
183
 
185
			if(arbreMotsCles.getTree().getNodeById(nd.getId()+"_filtre") == null)
184
			// si le noeud n'existe pas déjà c'est un ajout
186
			{
185
			if (arbreMotsCles.getTree().getNodeById(nd.getId() + "_filtre") == null) {
187
				// donc on ne fait rien de spécial
-
 
188
			}
186
				// donc on ne fait rien de spécial
189
			// si le noeud existe déjà c'est un déplacement
187
			}
-
 
188
			// si le noeud existe déjà c'est un déplacement
190
			else
189
			else {
191
			{
190
				// alors on supprime d'abord le noeud concerné
192
				// alors on supprime d'abord le noeud concerné
191
				arbreMotsCles.getTree().getNodeById(nd.getId() + "_filtre")
193
				arbreMotsCles.getTree().getNodeById(nd.getId()+"_filtre").remove() ;
192
						.remove();
194
			}
193
			}
195
			
194
 
196
			// on cherche le père du nouveau noeud
195
			// on cherche le père du nouveau noeud
197
			Node ndPereOriginal = nd.getParentNode() ;
196
			Node ndPereOriginal = nd.getParentNode();
198
			String idPereFiltre = ndPereOriginal.getId()+"_filtre" ;
197
			String idPereFiltre = ndPereOriginal.getId() + "_filtre";
199
			
198
 
200
			String[] usObj = (String[])nd.getUserObject() ;
199
			String[] usObj = (String[]) nd.getUserObject();
201
			TreeNode child = new TreeNode(usObj[0]) ;
200
			TreeNode child = new TreeNode(usObj[0]);
202
			child.setId(usObj[1]+"_filtre") ;
201
			child.setId(usObj[1] + "_filtre");
203
			child.setChecked(false);
202
			child.setChecked(false);
204
			child.setUserObject(usObj) ;
203
			child.setUserObject(usObj);
205
			arbreMotsCles.getNodeById(idPereFiltre).appendChild(child) ;
204
			arbreMotsCles.getNodeById(idPereFiltre).appendChild(child);
206
			
205
 
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
		}
-
 
210
		
208
		}
211
		// si on reçoit une string
209
 
212
		if(nouvelleDonnees instanceof String)
210
		// si on reçoit une string
213
		{
-
 
214
			String idSupp = (String)nouvelleDonnees+"_filtre" ;
211
		if (nouvelleDonnees instanceof String) {
215
			// c'est une suppression et si le noeud existe bien
212
			String idSupp = (String) nouvelleDonnees + "_filtre";
216
			if(arbreMotsCles.getTree().getNodeById(idSupp) != null)
213
			// c'est une suppression et si le noeud existe bien
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
			}
221
		}
218
		}
222
		
219
 
-
 
220
	}
223
	}
221
 
224
	
222
	/**
225
	/**
223
	 * Accesseur pour le médiateur
226
	 * Accesseur pour le médiateur
-
 
227
	 * @return le médiateur associé
224
	 * 
228
	 */
225
	 * @return le médiateur associé
229
	public ImageMediateur getIMediateur()
226
	 */
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
238
	public TreePanel getArbreMotsCles()
235
	 */
239
	{
236
	public TreePanel getArbreMotsCles() {
240
		return arbreMotsCles ;
237
		return arbreMotsCles;
241
	}
-
 
242
	
238
	}
243
	/**
239
 
244
	 * Méthode héritée de Filtrable
240
	/**
245
	 * renvoie le nom du filtre
241
	 * Méthode héritée de Filtrable renvoie le nom du filtre
246
	 */
242
	 */
247
	public String renvoyerNomFiltre() {
243
	public String renvoyerNomFiltre() {
248
		
244
 
249
		return "mots clés" ;
245
		return "mots clés";
-
 
246
	}
250
	}
247
 
251
	
248
	/**
252
	/**
249
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
253
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
250
	 * 
254
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
251
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
255
	 */
252
	 */
256
	public String[] renvoyerValeursAFiltrer() {
253
	public String[] renvoyerValeursAFiltrer() {
257
		
254
 
258
		valider() ;
255
		valider();
259
		
256
 
260
		String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ;
257
		String[] valeursFiltrees = { "ci_meta_mots_cles", motsClesEncours };
261
		
258
 
262
		return valeursFiltrees ;
259
		return valeursFiltrees;
263
	}
260
	}
-
 
261
 
-
 
262
	/**
264
	
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
265
	/**
265
	 * 
266
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un copie du sous arbre du premier
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
-
 
269
	 * @param ndPereCopie le père qui va recevoir les copies
268
	 * @param ndPereCopie
270
	 */
-
 
271
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
269
	 *            le père qui va recevoir les copies
272
	{
270
	 */
273
		if(ndPereCopie != null && ndPereOriginal != null)
271
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
274
		{
272
		if (ndPereCopie != null && ndPereOriginal != null) {
275
			Node[] ndNodeFils = ndPereOriginal.getChildNodes() ;
273
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
276
			
274
 
277
			for (int i = 0; i < ndNodeFils.length; i++) {
275
			for (int i = 0; i < ndNodeFils.length; i++) {
278
				
276
 
279
				String[] usObj = (String[])ndNodeFils[i].getUserObject() ;
277
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
280
				TreeNode child = new TreeNode(usObj[0]) ;
278
				TreeNode child = new TreeNode(usObj[0]);
281
				child.setId(usObj[1]+"_filtre") ;
279
				child.setId(usObj[1] + "_filtre");
282
				child.setChecked(false);
280
				child.setChecked(false);
283
				child.setUserObject(usObj) ;
-
 
284
				ndPereCopie.appendChild(child) ;
281
				child.setUserObject(usObj);
285
				
282
				ndPereCopie.appendChild(child);
286
				if(! ndNodeFils[i].isLeaf())
283
 
287
				{
284
				if (!ndNodeFils[i].isLeaf()) {
288
					copierFilsNoeud(ndNodeFils[i],child) ;
285
					copierFilsNoeud(ndNodeFils[i], child);
289
				}
286
				}
Line 290... Line 287...
290
				
287
 
291
			}
-
 
292
		}
288
			}
293
	}
289
		}
294
 
290
	}
295
	/**
291
 
296
	 * Méthode héritée de Filtrable
292
	/**
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
	 */
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) {
307
		{
302
			// on vide les mots clés en cours
308
			// on vide les mots clés en cours
303
			motsClesEncours = "";
309
			motsClesEncours = "" ;
304
			// pour chaque noeud à partir de la racine
310
			// pour chaque noeud à partir de la racine
305
			getArbreMotsCles().getRootNode().cascade(
311
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
306
					new NodeTraversalCallback() {
-
 
307
 
312
			
308
						// on éxécute une fonction
-
 
309
						public boolean execute(Node node) {
313
			// on éxécute une fonction
310
 
314
			public boolean execute(Node node) {
311
							// on récupère le mot clé associé au noeud et ses
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
 
318
	
-
 
319
						String[] usObject =  (String[])tn.getUserObject() ;
316
							String[] usObject = (String[]) tn.getUserObject();
-
 
317
							getIMediateur().mettreAjourMotsClesId(usObject[0],
320
						getIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
318
									usObject[1]);
321
							
319
 
322
							if(tn.getUI().isChecked())
320
							if (tn.getUI().isChecked()) {
323
							{
321
								// et les concatène à la string des mots clés en
324
								// et les concatène à la string des mots clés en cours
322
								// cours
325
								motsClesEncours += usObject[1]+"," ;
323
								motsClesEncours += usObject[1] + ",";
326
							}
324
							}
327
					
325
 
328
					return true ;
326
							return true;
329
				}
327
						}
330
					
328
 
331
			});
329
					});
Line 332... Line 330...
332
			
330