Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 43 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 43 Rev 47
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Filtrable;
4
import org.tela_botanica.client.interfaces.Filtrable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
6
 
7
import com.google.gwt.core.client.JavaScriptObject;
7
import com.gwtext.client.core.EventObject;
8
import com.gwtext.client.data.Node;
8
import com.gwtext.client.data.Node;
9
import com.gwtext.client.data.NodeTraversalCallback;
9
import com.gwtext.client.data.NodeTraversalCallback;
10
import com.gwtext.client.data.Tree;
10
import com.gwtext.client.data.Tree;
11
import com.gwtext.client.core.EventObject;
-
 
12
import com.gwtext.client.core.JsObject;
-
 
13
import com.gwtext.client.widgets.Button;
11
import com.gwtext.client.widgets.Button;
14
import com.gwtext.client.widgets.Component;
-
 
15
import com.gwtext.client.widgets.Panel;
12
import com.gwtext.client.widgets.Panel;
16
import com.gwtext.client.widgets.Window;
13
import com.gwtext.client.widgets.Window;
17
import com.gwtext.client.widgets.event.ButtonListener;
-
 
18
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
14
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
19
import com.gwtext.client.widgets.event.ContainerListener;
-
 
20
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
-
 
21
import com.gwtext.client.widgets.event.WindowListenerAdapter;
15
import com.gwtext.client.widgets.event.WindowListenerAdapter;
22
import com.gwtext.client.widgets.form.TextField;
-
 
23
import com.gwtext.client.widgets.layout.RowLayout;
16
import com.gwtext.client.widgets.layout.RowLayout;
24
import com.gwtext.client.widgets.layout.RowLayoutData;
17
import com.gwtext.client.widgets.layout.RowLayoutData;
25
import com.gwtext.client.widgets.menu.Menu;
-
 
26
import com.gwtext.client.widgets.tree.TreeEditor;
-
 
27
import com.gwtext.client.widgets.tree.TreeNode;
18
import com.gwtext.client.widgets.tree.TreeNode;
28
import com.gwtext.client.widgets.tree.TreePanel;
19
import com.gwtext.client.widgets.tree.TreePanel;
29
 
20
 
30
/**
21
/**
31
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton 
22
 * fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton 
32
 * cliquable
23
 * cliquable
33
 * @author aurelien
24
 * @author aurelien
34
 *
25
 *
35
 */
26
 */
36
public class ArbreMotsClesFiltreVue extends Window implements Rafraichissable, Filtrable {
27
public class ArbreMotsClesFiltreVue extends Window implements Rafraichissable, Filtrable {
37
 
28
 
38
	/**
29
	/**
39
	 * Le médiateur associé à la vue
30
	 * Le médiateur associé à la vue
40
	 */
31
	 */
41
	private ImageMediateur iMediateur = null ;
32
	private ImageMediateur iMediateur = null ;
42
	/**
33
	/**
43
	 * Les mots clés en cours
34
	 * Les mots clés en cours
44
	 */
35
	 */
45
	private String motsClesEncours = "" ;
36
	private String motsClesEncours = "" ;
46
	
37
	
47
	/**
38
	/**
48
	 * Le treepanel qui affiche l'arbre
39
	 * Le treepanel qui affiche l'arbre
49
	 */
40
	 */
50
	private TreePanel arbreMotsCles = null ;
41
	private TreePanel arbreMotsCles = null ;
51
	
42
	
52
	/**
43
	/**
53
	 * Bouton rechercher
44
	 * Bouton rechercher
54
	 */
45
	 */
55
	private Button rechercher = null ;
46
	private Button rechercher = null ;
56
	
47
	
57
	/**
48
	/**
58
	 * booléen d'initialisation
49
	 * booléen d'initialisation
59
	 */
50
	 */
60
	private boolean estInstancie = false ;
51
	private boolean estInstancie = false ;
61
	
52
	
62
	/**
53
	/**
63
	 * booléen d'etat
54
	 * booléen d'etat
64
	 */
55
	 */
65
	private boolean filtreModifie = false ;
56
	private boolean filtreModifie = false ;
66
	
57
	
67
	/**
58
	/**
68
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
59
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
69
	 */
60
	 */
70
	private ArbreMotsClesFiltreVue()
61
	private ArbreMotsClesFiltreVue()
71
	{
62
	{
72
		super() ;
63
		super() ;
73
	}
64
	}
74
	
65
	
75
	/**
66
	/**
76
	 * Constructeur avec paramètres
67
	 * Constructeur avec paramètres
77
	 * @param im le médiateur à associer
68
	 * @param im le médiateur à associer
78
	 */
69
	 */
79
	public ArbreMotsClesFiltreVue(ImageMediateur im)
70
	public ArbreMotsClesFiltreVue(ImageMediateur im)
80
	{
71
	{
81
		
72
		
82
		// on crée le panel
73
		// on crée le panel
83
		super("Mots clés") ;
74
		super("Mots clés") ;
84
		this.setLayout(new RowLayout());
75
		this.setLayout(new RowLayout());
85
		iMediateur = im ;
76
		iMediateur = im ;
86
		
77
		
87
		// on crée le conteneur de l'arbre
78
		// on crée le conteneur de l'arbre
88
		arbreMotsCles = new TreePanel() ;
79
		arbreMotsCles = new TreePanel() ;
89
		// on permet le drag and drop dans l'arbre
80
		// on permet le drag and drop dans l'arbre
90
		arbreMotsCles.setEnableDD(true) ;
81
		arbreMotsCles.setEnableDD(true) ;
91
		arbreMotsCles.setId("x-view-tree-filter") ;
82
		arbreMotsCles.setId("x-view-tree-filter") ;
92
		arbreMotsCles.setAutoWidth(true) ;
83
		arbreMotsCles.setAutoWidth(true) ;
93
		//arbreMotsCles.setAutoScroll(true) ;
84
		//arbreMotsCles.setAutoScroll(true) ;
94
		arbreMotsCles.setBorder(false) ;
85
		arbreMotsCles.setBorder(false) ;
95
		
86
		
96
		// on crée une racine pour l'arbre
87
		// on crée une racine pour l'arbre
97
		TreeNode root = new TreeNode("Tags") ;
88
		TreeNode root = new TreeNode("Tags") ;
98
		root.setId("racine_filtre") ;
89
		root.setId("racine_filtre") ;
99
		String[] usObject = {"Mots clés" , "racine" } ;
90
		String[] usObject = {"Mots clés" , "racine" } ;
100
		root.setUserObject(usObject) ;
91
		root.setUserObject(usObject) ;
101
		
92
		
102
		arbreMotsCles.setRootNode(root) ;
93
		arbreMotsCles.setRootNode(root) ;
103
		arbreMotsCles.setRootVisible(false) ;
94
		arbreMotsCles.setRootVisible(false) ;
104
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
95
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
105
		arbreMotsCles.setBorder(false) ;
96
		arbreMotsCles.setBorder(false) ;
106
		
97
		
107
		rechercher = new Button("Rechercher") ;
98
		rechercher = new Button("Rechercher") ;
108
		
99
		
109
		// on met en forme le layout
100
		// on met en forme le layout
110
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
101
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
111
		this.add(rechercher,new RowLayoutData("10%")) ;
102
		this.add(rechercher,new RowLayoutData("10%")) ;
112
		
103
		
113
		this.setBorder(false) ;
104
		this.setBorder(false) ;
114
		this.setCollapsible(true) ;
105
		this.setCollapsible(true) ;
115
		this.setCloseAction(HIDE) ;
106
		this.setCloseAction(HIDE) ;
116
		
107
		
117
		// on ajoute les listeners
108
		// on ajoute les listeners
118
		ajouterListeners() ;
109
		ajouterListeners() ;
119
		estInstancie = true ;
110
		estInstancie = true ;
120
	}
111
	}
121
	
112
	
122
	/**
113
	/**
123
	 * Ajoute les listeners
114
	 * Ajoute les listeners
124
	 */
115
	 */
125
	private void ajouterListeners()
116
	private void ajouterListeners()
126
	{
117
	{
127
		// gestion de la validation
118
		// gestion de la validation
128
		rechercher.addListener(new ButtonListenerAdapter() {
119
		rechercher.addListener(new ButtonListenerAdapter() {
-
 
120
 
129
 
121
			
130
			public void onClick(Button button, EventObject e) {
122
			public void onClick(Button button, EventObject e) {
131
				
123
				
132
				// on vide les mots clés en cours
124
				// on vide les mots clés en cours
133
				motsClesEncours = "" ;
125
				motsClesEncours = "" ;
134
				// pour chaque noeud à partir de la racine
126
				// pour chaque noeud à partir de la racine
135
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
127
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
136
				
128
				
137
				// on éxécute une fonction
129
				// on éxécute une fonction
138
				public boolean execute(Node node) {
130
				public boolean execute(Node node) {
139
				
131
				
140
						// on récupère le mot clé associé au noeud et ses infos
132
						// on récupère le mot clé associé au noeud et ses infos
141
						TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
133
						TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
142
 
134
 
143
							String[] usObject =  (String[])tn.getUserObject() ;
135
							String[] usObject =  (String[])tn.getUserObject() ;
144
							getIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
136
							getIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
145
								
137
								
146
								if(tn.getUI().isChecked())
138
								if(tn.getUI().isChecked())
147
								{
139
								{
148
									// et les concatène à la string des mots clés en cours
140
									// et les concatène à la string des mots clés en cours
149
									motsClesEncours += usObject[1]+"," ;
141
									motsClesEncours += usObject[1]+"," ;
150
								}
142
								}
151
						
143
						
152
						return true ;
144
						return true ;
153
					}
145
					}
154
						
146
						
155
				});
147
				});
156
				
148
				
157
				// on suppose que le filtre a change
149
				// on suppose que le filtre a change
158
				filtreModifie = true ;
150
				filtreModifie = true ;
159
				// enfin on notifie le médiateur et on lui passe l'arbre et la liste des mots clés ainsi obtenue
151
				// enfin on notifie le médiateur et on lui passe l'arbre et la liste des mots clés ainsi obtenue
160
				getIMediateur().obtenirPhotoGalerie(getIMediateur().getFiltreMotsCles()) ;	
152
				getIMediateur().obtenirPhotoGalerie(getIMediateur().getFiltreMotsCles()) ;	
161
			}
153
			}
162
 
154
 
163
		}) ;
155
		}) ;
164
		
156
		
165
		// gestion de la fermeture du panneau
157
		// gestion de la fermeture du panneau
166
		this.addListener(new WindowListenerAdapter() {
158
		this.addListener(new WindowListenerAdapter() {
-
 
159
			
167
			
160
			
168
			public void onClose(Panel panel) {
161
			public void onClose(Panel panel) {
169
				
162
				
170
				arbreMotsCles.getRootNode().destroy() ;
163
				arbreMotsCles.getRootNode().destroy() ;
171
				
164
				
172
				// on crée une racine pour l'arbre
165
				// on crée une racine pour l'arbre
173
				TreeNode root = new TreeNode("Tags") ;
166
				TreeNode root = new TreeNode("Tags") ;
174
				root.setId("racine_filtre") ;
167
				root.setId("racine_filtre") ;
175
				String[] usObject = {"Mots clés" , "racine" } ;
168
				String[] usObject = {"Mots clés" , "racine" } ;
176
				root.setUserObject(usObject) ;
169
				root.setUserObject(usObject) ;
177
				arbreMotsCles.setRootNode(root) ;
170
				arbreMotsCles.setRootNode(root) ;
178
			}
171
			}
179
		}) ;
172
		}) ;
180
	}
173
	}
181
	
174
	
182
	/**
175
	/**
183
	 * Méthode héritée de l'interface rafraichissable
176
	 * Méthode héritée de l'interface rafraichissable
184
	 */
177
	 */
185
	public void rafraichir(Object nouvelleDonnees,
178
	public void rafraichir(Object nouvelleDonnees,
186
			boolean repandreRaffraichissement) {
179
			boolean repandreRaffraichissement) {
187
		
180
		
188
		// si on a reçu un arbre
181
		// si on a reçu un arbre
189
		if(nouvelleDonnees instanceof Tree)
182
		if(nouvelleDonnees instanceof Tree)
190
		{
183
		{
191
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
184
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
192
				
185
				
193
				arbreMotsCles.getRootNode().eachChild(new NodeTraversalCallback() {
186
				arbreMotsCles.getRootNode().eachChild(new NodeTraversalCallback() {
194
 
187
 
195
 
188
 
196
					public boolean execute(Node node) {
189
					public boolean execute(Node node) {
197
						
190
						
198
						node.remove() ;
191
						node.remove() ;
199
						return true ;
192
						return true ;
200
					}
193
					}
201
					
194
					
202
					
195
					
203
				}) ;
196
				}) ;
204
				
197
				
205
				copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ;
198
				copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ;
206
				
199
				
207
					getArbreMotsCles().expandAll() ;
200
					getArbreMotsCles().expandAll() ;
208
					
201
					
209
					// si l'arbre n'était pas encore considéré comme instancié
202
					// si l'arbre n'était pas encore considéré comme instancié
210
					if(!estInstancie)
203
					if(!estInstancie)
211
					{
204
					{
212
						// on signale que oui
205
						// on signale que oui
213
						estInstancie = true ;
206
						estInstancie = true ;
214
					}
207
					}
215
					
208
					
216
					filtreModifie = false ;
209
					filtreModifie = false ;
217
					
210
					
218
					setSize(200, 300) ;
211
					setSize(200, 300) ;
219
					show() ;
212
					show() ;
220
		}
213
		}
221
		
214
		
222
	}
215
	}
223
	
216
	
224
	/**
217
	/**
225
	 * Accesseur pour le médiateur
218
	 * Accesseur pour le médiateur
226
	 * @return le médiateur associé
219
	 * @return le médiateur associé
227
	 */
220
	 */
228
	public ImageMediateur getIMediateur()
221
	public ImageMediateur getIMediateur()
229
	{
222
	{
230
		return iMediateur ;
223
		return iMediateur ;
231
	}
224
	}
232
	
225
	
233
	/**
226
	/**
234
	 * Accesseur pour le panneau contenant l'arbre
227
	 * Accesseur pour le panneau contenant l'arbre
235
	 * @return le panneau de l'arbre des mots clés
228
	 * @return le panneau de l'arbre des mots clés
236
	 */
229
	 */
237
	public TreePanel getArbreMotsCles()
230
	public TreePanel getArbreMotsCles()
238
	{
231
	{
239
		return arbreMotsCles ;
232
		return arbreMotsCles ;
240
	}
233
	}
241
	
234
	
242
	/**
235
	/**
243
	 * Méthode héritée de Filtrable
236
	 * Méthode héritée de Filtrable
244
	 * renvoie le nom du filtre
237
	 * renvoie le nom du filtre
245
	 */
238
	 */
246
	public String renvoyerNomFiltre() {
239
	public String renvoyerNomFiltre() {
247
		
240
		
248
		return "mots clés" ;
241
		return "mots clés" ;
249
	}
242
	}
250
	
243
	
251
	/**
244
	/**
252
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
245
	 * Renvoie un tableau contenant le nom du champ à filtrer et la valeur
253
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
246
	 * @return un tableau contenant le nom du champ à filtrer et sa valeur
254
	 */
247
	 */
255
	public String[] renvoyerValeursAFiltrer() {
248
	public String[] renvoyerValeursAFiltrer() {
256
		
249
		
257
		String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ;
250
		String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ;
258
		
251
		
259
		return valeursFiltrees ;
252
		return valeursFiltrees ;
260
	}
253
	}
261
	
254
	
262
	/**
255
	/**
263
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un copie du sous arbre du premier
256
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un copie du sous arbre du premier
264
	 * noeud, qu'elle concatène au deuxième 
257
	 * noeud, qu'elle concatène au deuxième 
265
	 * @param ndPereOriginal le père des noeuds de l'arbre original
258
	 * @param ndPereOriginal le père des noeuds de l'arbre original
266
	 * @param ndPereCopie le père qui va recevoir les copies
259
	 * @param ndPereCopie le père qui va recevoir les copies
267
	 */
260
	 */
268
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
261
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
269
	{
262
	{
270
		Node[] ndNodeFils = ndPereOriginal.getChildNodes() ;
263
		Node[] ndNodeFils = ndPereOriginal.getChildNodes() ;
271
		
264
		
272
		for (int i = 0; i < ndNodeFils.length; i++) {
265
		for (int i = 0; i < ndNodeFils.length; i++) {
273
			
266
			
274
			String[] usObj = (String[])ndNodeFils[i].getUserObject() ;
267
			String[] usObj = (String[])ndNodeFils[i].getUserObject() ;
275
			TreeNode child = new TreeNode(usObj[0]) ;
268
			TreeNode child = new TreeNode(usObj[0]) ;
276
			child.setIcon("tela.png") ;
269
			child.setIcon("tela.png") ;
277
			child.setChecked(false);
270
			child.setChecked(false);
278
			child.setUserObject(usObj) ;
271
			child.setUserObject(usObj) ;
279
			ndPereCopie.appendChild(child) ;
272
			ndPereCopie.appendChild(child) ;
280
			
273
			
281
			if(! ndNodeFils[i].isLeaf())
274
			if(! ndNodeFils[i].isLeaf())
282
			{
275
			{
283
				copierFilsNoeud(ndNodeFils[i],child) ;
276
				copierFilsNoeud(ndNodeFils[i],child) ;
284
			}
277
			}
285
			
278
			
286
		}
279
		}
287
	}
280
	}
288
 
281
 
289
	/**
282
	/**
290
	 * Méthode héritée de Filtrable
283
	 * Méthode héritée de Filtrable
291
	 * Renvoie l'état du filtre modifié ou nom)
284
	 * Renvoie l'état du filtre modifié ou nom)
292
	 */
285
	 */
293
	public boolean renvoyerEtatFiltre() {
286
	public boolean renvoyerEtatFiltre() {
294
		
287
		
295
		return filtreModifie ;
288
		return filtreModifie ;
296
	}
289
	}
297
 
290
 
298
}
291
}