Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 40 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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