Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 38 Rev 41
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
 
3
 
4
import org.tela_botanica.client.observation.ObservationMediateur;
4
import org.tela_botanica.client.observation.ObservationMediateur;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.VueListable;
6
import org.tela_botanica.client.interfaces.VueListable;
7
import org.tela_botanica.client.vues.BarrePaginationObservationVue;
7
import org.tela_botanica.client.vues.BarrePaginationObservationVue;
-
 
8
 
8
 
9
import com.gwtext.client.core.EventObject;
9
import com.gwtext.client.core.Ext;
10
import com.gwtext.client.core.Ext;
10
import com.gwtext.client.core.ExtElement;
11
import com.gwtext.client.core.ExtElement;
11
import com.gwtext.client.data.FieldDef;
12
import com.gwtext.client.data.FieldDef;
12
import com.gwtext.client.data.Record;
13
import com.gwtext.client.data.Record;
13
import com.gwtext.client.data.RecordDef;
14
import com.gwtext.client.data.RecordDef;
14
import com.gwtext.client.data.Store;
15
import com.gwtext.client.data.Store;
15
import com.gwtext.client.data.StringFieldDef;
16
import com.gwtext.client.data.StringFieldDef;
16
import com.gwtext.client.widgets.Component;
17
import com.gwtext.client.widgets.Component;
17
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
18
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
-
 
19
import com.gwtext.client.widgets.grid.CellMetadata;
18
import com.gwtext.client.widgets.grid.ColumnConfig;
20
import com.gwtext.client.widgets.grid.ColumnConfig;
19
import com.gwtext.client.widgets.grid.ColumnModel;
21
import com.gwtext.client.widgets.grid.ColumnModel;
20
import com.gwtext.client.widgets.grid.GridPanel;
22
import com.gwtext.client.widgets.grid.GridPanel;
-
 
23
import com.gwtext.client.widgets.grid.Renderer;
21
import com.gwtext.client.widgets.grid.RowSelectionModel;
24
import com.gwtext.client.widgets.grid.RowSelectionModel;
-
 
25
import com.gwtext.client.widgets.grid.event.GridRowListenerAdapter;
22
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
26
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
23
 
27
 
24
/**
28
/**
25
 * Liste d'observation composée de ligne d'observation
29
 * Liste d'observation composée de ligne d'observation
26
 * l'interface rafraichissable et l'interface vueListable
30
 * l'interface rafraichissable et l'interface vueListable
27
 * 
31
 * 
28
 * @author David Delon 2008
32
 * @author David Delon 2008
29
 */
33
 */
30
public class ListeObservationVue extends GridPanel implements Rafraichissable,
34
public class ListeObservationVue extends GridPanel implements Rafraichissable,
31
		VueListable {
35
		VueListable {
32
 
36
 
33
	/**
37
	/**
34
	 * Le médiateur associé à la vue
38
	 * Le médiateur associé à la vue
35
	 */
39
	 */
36
	private ObservationMediateur	observationMediateur		= null;
40
	private ObservationMediateur	observationMediateur		= null;
37
 
41
 
38
 
42
 
39
	/**
43
	/**
40
	 * Config de colonne
44
	 * Config de colonne
41
	 */
45
	 */
42
	private ColumnConfig	etatObservation;
46
	private ColumnConfig	etatObservation;
43
	/**
47
	/**
44
	 * Config de colonne
48
	 * Config de colonne
45
	 */
49
	 */
46
	private ColumnConfig	nomSaisiObservation;
50
	private ColumnConfig	nomSaisiObservation;
47
	/**
51
	/**
48
	 * Config de colonne
52
	 * Config de colonne
49
	 */
53
	 */
50
	private ColumnConfig	nomRetenuObservation;
54
	private ColumnConfig	nomRetenuObservation;
51
	/**
55
	/**
52
	 * Config de colonne
56
	 * Config de colonne
53
	 */
57
	 */
54
	private ColumnConfig	lieuObservation;
58
	private ColumnConfig	lieuObservation;
55
	/**
59
	/**
56
	 * Config de colonne
60
	 * Config de colonne
57
	 */
61
	 */
58
	private ColumnConfig	dateObservation;
62
	private ColumnConfig	dateObservation;
59
	/**
63
	/**
60
	 * Config de colonne
64
	 * Config de colonne
61
	 */
65
	 */
62
	private ColumnConfig	ordreObservation;
66
	private ColumnConfig	ordreObservation;
63
	/**
67
	/**
64
	 * Modele de colonnes
68
	 * Modele de colonnes
65
	 */
69
	 */
66
	private ColumnModel		modeleColonnes;
70
	private ColumnModel		modeleColonnes;
67
 
71
 
68
	/**
72
	/**
69
	 * Store qui contient les données à afficher
73
	 * Store qui contient les données à afficher
70
	 */
74
	 */
71
	private Store			st				= null;
75
	private Store			st				= null;
72
	
76
	
73
	
77
	
74
	/**
78
	/**
75
	 * Barre de pagination
79
	 * Barre de pagination
76
	 */
80
	 */
77
	private BarrePaginationObservationVue bt = null ;
81
	private BarrePaginationObservationVue bt = null ;
78
 
82
 
79
	/**
83
	/**
80
	 * Constructeur sans arguments (privé car ne doit pas être utilisé)
84
	 * Constructeur sans arguments (privé car ne doit pas être utilisé)
81
	 */
85
	 */
82
	private ListeObservationVue()
86
	private ListeObservationVue()
83
	{
87
	{
84
		super() ;
88
		super() ;
85
	}
89
	}
86
	
90
	
87
	/**
91
	/**
88
	 * Constructeur avec argument
92
	 * Constructeur avec argument
89
	 * @param im le médiateur à associer
93
	 * @param im le médiateur à associer
90
	 */
94
	 */
91
	public ListeObservationVue(ObservationMediateur obs) {		
95
	public ListeObservationVue(ObservationMediateur obs) {		
92
		
96
		
93
		this.observationMediateur = obs;
97
		this.observationMediateur = obs;
94
		
98
		
95
		setHeader(true);
99
		setHeader(true);
96
		setTitle("Observations");
100
		setTitle("Observations");
97
        
101
        
98
		// on place la barre de pagination
102
		// on place la barre de pagination
99
		bt = new BarrePaginationObservationVue(observationMediateur);		
103
		bt = new BarrePaginationObservationVue(observationMediateur);		
100
		this.setBottomToolbar(bt) ;
104
		this.setBottomToolbar(bt) ;
101
 
105
 
102
		// on construit le modèle de colonnes
106
		// on construit le modèle de colonnes
103
 
107
 
104
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir) 
108
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir) 
-
 
109
				
-
 
110
		Renderer colRend = new Renderer() {
-
 
111
 
-
 
112
			public String render(Object value, CellMetadata cellMetadata,
-
 
113
					Record record, int rowIndex, int colNum, Store store) {
-
 
114
				
-
 
115
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
-
 
116
				
-
 
117
					return "" ;
-
 
118
				}	
-
 
119
				else
-
 
120
				{
-
 
121
					
-
 
122
				}
-
 
123
				
-
 
124
				return value.toString() ;
-
 
125
			}
-
 
126
			
105
				
127
		} ;
-
 
128
		
-
 
129
		etatObservation = new ColumnConfig("Transmis", "etat_observation", 50, true, new Renderer() {
-
 
130
 
-
 
131
			public String render(Object value, CellMetadata cellMetadata,
-
 
132
					Record record, int rowIndex, int colNum, Store store) {
-
 
133
				if(value.equals("1"))
-
 
134
				{
-
 
135
					return "<input type=\"checkbox\" checked =\"checked\" disabled=\"disabled\" />" ;
-
 
136
				}
-
 
137
				else
-
 
138
				{
-
 
139
					return "" ;
-
 
140
				}
-
 
141
			}
106
		
142
			
107
		etatObservation = new ColumnConfig("Transmis", "etat_observation", 50);		
143
		});		
108
		nomSaisiObservation = new ColumnConfig("Nom saisi", "nomSaisi_observation", 200);
144
		nomSaisiObservation = new ColumnConfig("Nom saisi", "nomSaisi_observation", 200, true, colRend);
109
		nomRetenuObservation = new ColumnConfig("Nom retenu", "nomRetenu_observation", 200);
145
		nomRetenuObservation = new ColumnConfig("Nom retenu", "nomRetenu_observation", 200, true, colRend);
110
		lieuObservation = new ColumnConfig("Lieu", "lieu_observation", 200);
146
		lieuObservation = new ColumnConfig("Lieu", "lieu_observation", 200, true, colRend);
111
		dateObservation = new ColumnConfig("Date", "date_observation", 70);
147
		dateObservation = new ColumnConfig("Date", "date_observation", 70, true, colRend);
112
		ordreObservation = new ColumnConfig("Ordre", "ordre_observation", 50);
148
		ordreObservation = new ColumnConfig("Ordre", "ordre_observation", 50, true, colRend);
113
		
149
		
114
		
150
		
115
	
151
	
116
		// on associe le modèle de colonnes
152
		// on associe le modèle de colonnes
117
		
153
		
118
		ColumnConfig[] cm = {etatObservation, nomSaisiObservation, nomRetenuObservation, lieuObservation, dateObservation, ordreObservation};
154
		ColumnConfig[] cm = {etatObservation, nomSaisiObservation, nomRetenuObservation, lieuObservation, dateObservation, ordreObservation};
119
		
155
		
120
		modeleColonnes = new ColumnModel(cm);
156
		modeleColonnes = new ColumnModel(cm);
121
		
157
		
122
		this.setColumnModel(modeleColonnes);
158
		this.setColumnModel(modeleColonnes);
123
		
159
		
124
		this.setAutoScroll(true);
160
		this.setAutoScroll(true);
125
		this.setAutoWidth(true);
161
		this.setAutoWidth(true);
-
 
162
		this.setAutoHeight(true) ;
126
		this.setEnableColumnResize(true);
163
		this.setEnableColumnResize(true);
127
 
164
 
128
	    // FIXME: ca ne devrait pas ête obligatoire de fixer la taille 
165
	    // FIXME: ca ne devrait pas ête obligatoire de fixer la taille 
129
		 
166
		 
130
		//this.setSize(800,400);
167
		//this.setSize(800,400);
131
		
168
		
132
		// creation du store
169
		// creation du store
133
		FieldDef defEtatObservation = new StringFieldDef("etat_observation");
170
		FieldDef defEtatObservation = new StringFieldDef("etat_observation");
134
		FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
171
		FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
135
		FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
172
		FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
136
		FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
173
		FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
137
		FieldDef defDateObservation = new StringFieldDef("date_observation");
174
		FieldDef defDateObservation = new StringFieldDef("date_observation");
138
		FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
175
		FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
139
		
176
		
140
		
177
		
141
		FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
178
		FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
142
				defLieuObservation, defDateObservation, defOrdreObservation };
179
				defLieuObservation, defDateObservation, defOrdreObservation };
143
		
180
		
144
		RecordDef rd = new RecordDef(defTab);
181
		RecordDef rd = new RecordDef(defTab);
145
		st = new Store(rd);
182
		st = new Store(rd);
146
		
183
		
147
		// on associe le store
184
		// on associe le store
148
		
185
		
149
		this.setStore(st);
186
		this.setStore(st);
150
		this.getView().setAutoFill(true);
187
		this.getView().setAutoFill(true);
151
		
188
		
152
		// on crée un masque de chargement qui s'affichera lors des mises à jour
189
		// on crée un masque de chargement qui s'affichera lors des mises à jour
153
		this.setLoadMask("Chargement");
190
		this.setLoadMask("Chargement");
154
	
191
	
155
		// on ajoute les listeners
192
		// on ajoute les listeners
156
		ajouterListeners();
193
		ajouterListeners();
157
		
194
		
158
		
195
		
159
	}
196
	}
160
 
197
 
161
 
198
 
162
	/**
199
	/**
163
	 * Ajoute les listeners pour la gestion des évènements
200
	 * Ajoute les listeners pour la gestion des évènements
164
	 */
201
	 */
165
	private void ajouterListeners() {
202
	private void ajouterListeners() {
166
		this.addListener(new ContainerListenerAdapter() {
203
		this.addListener(new ContainerListenerAdapter() {
167
 
204
 
168
			
205
			
169
			public void onHide(Component component) {
206
			public void onHide(Component component) {
170
 
207
 
171
			}
208
			}
172
 
209
 
173
			
210
			
174
			public void onRender(Component component) {
211
			public void onRender(Component component) {
175
				
212
				
176
			}
213
			}
177
 
214
 
178
			
215
			
179
			public void onShow(Component component) {
216
			public void onShow(Component component) {
180
 
217
 
181
			}
218
			}
182
 
219
 
183
		});
220
		});
184
 
221
 
185
/*		
222
		
186
		this.addGridRowListener(new GridRowListener() {
223
		this.addGridRowListener(new GridRowListenerAdapter() {
187
			
224
			
188
			// gestion du clic sur une ligne
-
 
-
 
225
			// gestion du clic sur une ligne
189
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
226
			public void onRowClick(GridPanel grid, int rowIndex,
190
 
227
					EventObject e) {
-
 
228
				// on notifie le médiateur et on lui passe le nuémro de ligne
191
				// on notifie le médiateur et on lui passe le nuémro de ligne
229
				getObservationMediateur().clicListeObservation(rowIndex);
192
				getobservationMediateur().clicListeImage(rowIndex);
230
				
193
			}
231
			}
194
			
232
 
195
			// gestion du clic droit
233
			// gestion du clic droit
196
			public void onRowContextMenu(GridPanel grid, int rowIndex,
234
			public void onRowContextMenu(GridPanel grid, int rowIndex,
197
					EventObject e) {
235
					EventObject e) {
198
				// on stoppe l'évenement pour empecher le navigateur d'afficher son propre menu
236
				// on stoppe l'évenement pour empecher le navigateur d'afficher son propre menu
199
				e.stopEvent() ;
237
				e.stopEvent() ;
200
				// on notifie le médiateur en lui passant l'évenement
238
				// on notifie le médiateur en lui passant l'évenement
201
				getobservationMediateur().montrerContextMenu(e);
239
				getObservationMediateur().montrerContextMenu(e);
202
			}
240
			}
203
 
241
 
204
			// gestion du double clic
242
			// gestion du double clic
205
			public void onRowDblClick(GridPanel grid, int rowIndex,
243
			public void onRowDblClick(GridPanel grid, int rowIndex,
206
					EventObject e) {
244
					EventObject e) {
207
				// on notifie le médiateur en lui passant le numéro de ligne
245
				// on notifie le médiateur en lui passant le numéro de ligne
208
				getobservationMediateur().doubleClicListeImage(rowIndex);
246
				getObservationMediateur().doubleClicListeObservation(rowIndex);
209
			}
247
			}
-
 
248
			
210
		});
249
		});
211
		
250
		
212
	*/
251
	
213
		this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
252
		/*this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
214
 
253
 
215
			// gestion de la sélection
254
			// gestion de la sélection
216
			
255
			
217
			public void onSelectionChange(RowSelectionModel sm) {
256
			public void onSelectionChange(RowSelectionModel sm) {
218
 
257
 
219
				// si on a rien de sélectionné
258
				// si on a rien de sélectionné
220
				if (sm.getCount() <= 0) {
259
				if (sm.getCount() <= 0) {
221
					// on notifie le médiateur (qui désactive notamment l'accès à certaines infos)
260
					// on notifie le médiateur (qui désactive notamment l'accès à certaines infos)
222
		//			getobservationMediateur().aucuneSelection();
261
		//			getobservationMediateur().aucuneSelection();
223
				} else {
262
				} else {
224
					// sinon on notifie le médiateur
263
					// sinon on notifie le médiateur
225
			//		getobservationMediateur().selection();
264
			//		getobservationMediateur().selection();
226
					// et on lui demande de synchroniser la selection avec les autres vues
265
					// et on lui demande de synchroniser la selection avec les autres vues
227
				//	getobservationMediateur().synchroniserSelection("liste");
266
				//	getobservationMediateur().synchroniserSelection("liste");
228
				}
267
				}
229
			}
268
			}
230
		});
269
		});*/
231
	}
270
	}
232
 
271
 
233
	/**
272
	/**
234
	 * Méthode héritée de l'interface VueListable
273
	 * Méthode héritée de l'interface VueListable
235
	 * Sélectionne les observations  dans la liste suivant les identifiants donnés en paramètres
274
	 * Sélectionne les observations  dans la liste suivant les identifiants donnés en paramètres
236
	 */
275
	 */
237
	
276
	
238
	public String[] getIdSelectionnees() {
277
	public String[] getIdSelectionnees() {
239
		
278
		
240
		Record[] selection = this.getSelectionModel().getSelections();
279
		Record[] selection = this.getSelectionModel().getSelections();
241
		int taille = selection.length;
280
		int taille = selection.length;
242
		String id_selection[] = new String[taille];
281
		String id_selection[] = new String[taille];
243
 
282
 
244
		for (int i = 0; i < selection.length; i++) {
283
		for (int i = 0; i < selection.length; i++) {
245
 
284
 
246
			id_selection[i] = selection[i].getAsString("ordre_observation");
285
			id_selection[i] = selection[i].getAsString("ordre_observation");
247
		}
286
		}
248
 
287
 
249
		return id_selection;
288
		return id_selection;
250
	}
289
	}
251
	
290
	
252
	/**
291
	/**
253
	 * Méthode héritée de l'interface rafraichissable
292
	 * Méthode héritée de l'interface rafraichissable
254
	 * @param nouvelleDonnees les nouvelles données
293
	 * @param nouvelleDonnees les nouvelles données
255
	 * @param repandreRafraichissement le booleen de notification du rafraichissement
294
	 * @param repandreRafraichissement le booleen de notification du rafraichissement
256
	 */
295
	 */
257
	
296
	
258
	public void rafraichir(Object nouvelleDonnees,
297
	public void rafraichir(Object nouvelleDonnees,
259
			boolean repandreRafraichissement) {
298
			boolean repandreRafraichissement) {
260
 
299
 
261
		// si on reçoit un store
300
		// si on reçoit un store
262
		if (nouvelleDonnees instanceof Store) {
301
		if (nouvelleDonnees instanceof Store) {
263
		
302
		
264
			
303
			
265
			// on affecte celui-ci comme gestionnaire de données
304
			// on affecte celui-ci comme gestionnaire de données
266
			st = (Store) nouvelleDonnees;
305
			st = (Store) nouvelleDonnees;
267
			st.load();
306
			st.load();
268
			// et on reconfigure et rafraichit la vue
307
			// et on reconfigure et rafraichit la vue
269
			this.reconfigure(st, this.getColumnModel());
308
			this.reconfigure(st, this.getColumnModel());
270
			
309
			
271
			demasquerChargement();
310
			demasquerChargement();
272
			
311
			
273
						
312
						
274
		}
313
		}
275
 
314
 
276
	}
315
	}
277
 
316
 
278
	
317
	
279
	/**
318
	/**
280
	 * Sélectionne des enregistrements donné 
319
	 * Sélectionne des enregistrements donné 
281
	 * @param sel un tableau d'enregistrement à selectionner
320
	 * @param sel un tableau d'enregistrement à selectionner
282
	 */
321
	 */
283
	public void selectionnerEnregistrements(Record[] sel) {
322
	public void selectionnerEnregistrements(Record[] sel) {
284
 
323
 
285
			getSelectionModel().clearSelections();
324
			getSelectionModel().clearSelections();
286
			getSelectionModel().selectRecords(sel);
325
			getSelectionModel().selectRecords(sel);
287
		
326
		
288
	}
327
	}
289
	
328
	
290
	/**
329
	/**
291
	 * Accesseur pour la toolbar de pagination
330
	 * Accesseur pour la toolbar de pagination
292
	 * @return la toolbar de pagination
331
	 * @return la toolbar de pagination
293
	 */
332
	 */
294
	
333
	
295
	public BarrePaginationObservationVue getToolBarVue()
334
	public BarrePaginationObservationVue getToolBarVue()
296
	{
335
	{
297
		return bt ;
336
		return bt ;
298
	}
337
	}
299
 
338
 
300
 
339
 
301
	/**
340
	/**
302
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
341
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
303
	 */
342
	 */
304
	public void masquerChargement()
343
	public void masquerChargement()
305
	{
344
	{
306
			ExtElement masked = Ext.get(getId()) ;
345
			ExtElement masked = Ext.get(getId()) ;
307
 
346
 
308
			// FIXME: parfois null sans raison !
347
			// FIXME: parfois null sans raison !
309
			if (masked!=null) {
348
			if (masked!=null) {
310
				masked.mask("Chargement") ;
349
				masked.mask("Chargement") ;
311
			}
350
			}
312
 
351
 
313
	}
352
	}
314
	
353
	
315
	/**
354
	/**
316
	 * Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
355
	 * Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
317
	 */
356
	 */
318
	public void demasquerChargement()
357
	public void demasquerChargement()
319
	{
358
	{
320
			ExtElement masked = Ext.get(getId()) ;
359
			ExtElement masked = Ext.get(getId()) ;
321
			
360
			
322
//			 FIXME: parfois null sans raison !
361
//			 FIXME: parfois null sans raison !
323
			if (masked!=null) {
362
			if (masked!=null) {
324
				
363
				
325
				if(masked.isMasked())
364
				if(masked.isMasked())
326
				{
365
				{
327
					masked.unmask() ;
366
					masked.unmask() ;
328
				}
367
				}
329
			}
368
			}
330
	}
369
	}
-
 
370
	
331
	
371
	private ObservationMediateur getObservationMediateur() {
-
 
372
		
-
 
373
		return observationMediateur ;
332
 
374
	}
333
 
375
 
334
 
376
 
335
}
377
}