Subversion Repositories eFlore/Applications.coel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
703 jp_milcent 1
package org.tela_botanica.client.vues;
2
 
3
import java.util.ArrayList;
4
import java.util.List;
5
 
6
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.images.Images;
8
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.modeles.Information;
10
import org.tela_botanica.client.modeles.Personne;
11
import org.tela_botanica.client.modeles.PersonneListe;
12
import org.tela_botanica.client.modeles.ValeurListe;
13
 
14
import com.extjs.gxt.ui.client.event.ButtonEvent;
15
import com.extjs.gxt.ui.client.event.ComponentEvent;
16
import com.extjs.gxt.ui.client.event.Events;
17
import com.extjs.gxt.ui.client.event.GridEvent;
18
import com.extjs.gxt.ui.client.event.KeyListener;
19
import com.extjs.gxt.ui.client.event.Listener;
20
import com.extjs.gxt.ui.client.event.SelectionListener;
21
import com.extjs.gxt.ui.client.store.ListStore;
22
import com.extjs.gxt.ui.client.store.Store;
23
import com.extjs.gxt.ui.client.store.StoreEvent;
24
import com.extjs.gxt.ui.client.widget.ContentPanel;
25
import com.extjs.gxt.ui.client.widget.Info;
26
import com.extjs.gxt.ui.client.widget.MessageBox;
27
import com.extjs.gxt.ui.client.widget.button.Button;
28
import com.extjs.gxt.ui.client.widget.form.ComboBox;
29
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
30
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
31
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
32
import com.extjs.gxt.ui.client.widget.grid.Grid;
33
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
34
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
35
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
36
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
37
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
38
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
39
import com.google.gwt.core.client.GWT;
40
 
41
public class CollectionFormAuteur extends FormulaireOnglet implements Rafraichissable {
42
 
43
	private ContentPanel panneauPrincipal = null;
44
	private ToolBar barreOutils = null;
45
	private Grid<Personne> grille;
46
 
47
	private PersonneListe auteurs = null;
48
	private PersonneListe auteursAjoutes = null;
49
	private PersonneListe auteursSupprimes = null;
50
	private ComboBox<Personne> auteursSaisisComboBox = null;
51
	private Button auteursBoutonSupprimer = null;
52
	private Button auteursBoutonModifier = null;
53
 
54
	private static final String ETAT_AJOUTE = "A";
55
	private static final String ETAT_SUPPRIME = "S";
56
 
57
	public CollectionFormAuteur(Formulaire formulaireCourrant) {
58
		initialiserOnglet(formulaireCourrant);
59
		setId("auteur");
60
		setText(Mediateur.i18nC.collectionAuteur());
61
		setStyleAttribute("padding", "0");
62
 
63
		panneauPrincipal = creerPanneauContenantGrille();
64
		barreOutils = creerBarreOutilsGrille();
65
		panneauPrincipal.setTopComponent(barreOutils);
66
		grille = creerGrille();
67
  		panneauPrincipal.add(grille);
68
		add(panneauPrincipal);
69
 
70
		initialiser();
71
	}
72
 
73
	private void initialiser() {
74
		// Remise à zéro des modification dans la liste des auteurs
75
		auteursAjoutes = new PersonneListe();
76
		auteursSupprimes = new PersonneListe();
77
 
78
		// Actualisation de l'état des boutons de la barre d'outils
79
		actualiserEtatBoutonsBarreOutils();
80
	}
81
 
82
	private ContentPanel creerPanneauContenantGrille() {
83
		ContentPanel panneau = new ContentPanel();
84
 
85
		panneau.setHeading(i18nC.collectionAuteurTitre());
86
		panneau.setIcon(Images.ICONES.table());
87
		panneau.setLayout(new FitLayout());
88
		panneau.setFrame(true);
89
 
90
		return panneau;
91
	}
92
 
93
	private ToolBar creerBarreOutilsGrille() {
94
		ToolBar barreOutils = new ToolBar();
95
 
96
		Button ajouterPersonneBouton = creerBoutonAjouter();
97
		barreOutils.add(ajouterPersonneBouton);
98
 
99
		barreOutils.add(new SeparatorToolItem());
100
 
101
		auteursBoutonModifier = creerBoutonModifier();
102
		barreOutils.add(auteursBoutonModifier);
103
 
104
		barreOutils.add(new SeparatorToolItem());
105
 
106
		auteursBoutonSupprimer = creerBoutonSupprimer();
107
		barreOutils.add(auteursBoutonSupprimer);
108
 
109
		barreOutils.add(new SeparatorToolItem());
110
 
111
		Button rafraichirPersonneBouton = creerBoutonRafraichir();
112
		barreOutils.add(rafraichirPersonneBouton);
113
 
114
		barreOutils.add(new SeparatorToolItem());
115
 
116
		auteursSaisisComboBox = creerComboBoxAuteursSaisis();
117
		barreOutils.add(auteursSaisisComboBox);
118
 
119
		Button ajouterAuteurSaisiBouton = creerBoutonAjouterAuteurSaisi();
120
		barreOutils.add(ajouterAuteurSaisiBouton);
121
 
122
		return barreOutils;
123
	}
124
 
125
	private Button creerBoutonAjouter() {
126
		Button bouton = new Button(i18nC.ajouter());
127
		bouton.setIcon(Images.ICONES.vcardAjouter());
128
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
129
			@Override
130
			public void componentSelected(ButtonEvent ce) {
131
				PersonneForm formulairePersonne = new PersonneForm(Formulaire.MODE_AJOUTER);
132
				formulairePersonne.setHeaderVisible(false);
133
				formulairePersonne.setTopComponent(null);
134
				// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale
135
				//formulairePersonne.setBottomComponent(null);
136
 
137
				final FenetreForm fenetre = new FenetreForm(i18nC.personneModeAjout());
138
				fenetre.add(formulairePersonne);
139
				fenetre.show();
140
			}
141
		});
142
		return bouton;
143
	}
144
 
145
	private Button creerBoutonModifier() {
146
		Button bouton = new Button(i18nC.modifier());
147
		bouton.setIcon(Images.ICONES.vcardModifier());
148
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
149
			@Override
150
			public void componentSelected(ButtonEvent ce) {
151
				Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
152
 
153
				if (auteurSaisiSelectionne == null) {
154
					Info.display("Info", "Veuillez selectionner un auteur");
155
				} else {
156
					PersonneForm formulairePersonne = new PersonneForm(Formulaire.MODE_MODIFIER);
157
					formulairePersonne.setHeaderVisible(false);
158
					formulairePersonne.setTopComponent(null);
159
					// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale
160
					//formulairePersonne.setBottomComponent(null);
161
					// TODO : simplifier la gestion de l'ajout des données d'une Personne au form pour la modification... (pas besoin de passer par une liste).
162
					Information info = new Information("liste_personne");
163
					PersonneListe personnes = new PersonneListe();
164
					personnes.put(auteurSaisiSelectionne.getId(), auteurSaisiSelectionne);
165
					info.setDonnee(0, personnes);
166
					formulairePersonne.rafraichir(info);
167
 
168
					final FenetreForm fenetre = new FenetreForm(i18nC.personneModeModifier());
169
					fenetre.add(formulairePersonne);
170
					fenetre.show();
171
				}
172
			}
173
		});
174
		return bouton;
175
	}
176
 
177
	private Button creerBoutonSupprimer() {
178
		Button bouton = new Button(i18nC.supprimer());
179
		bouton.setIcon(Images.ICONES.vcardSupprimer());
180
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
181
			@Override
182
			public void componentSelected(ButtonEvent ce) {
183
				Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
184
				if (auteurSaisiSelectionne == null) {
185
					Info.display("Info", "Veuillez selectionner un auteur");
186
				} else {
187
					supprimerAuteurDansGrille(auteurSaisiSelectionne);
188
				}
189
			}
190
		});
191
		return bouton;
192
	}
193
 
194
	private Button creerBoutonRafraichir() {
195
		Button bouton = new Button(i18nC.rafraichir());
196
		bouton.setIcon(Images.ICONES.rafraichir());
197
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
198
			@Override
199
			public void componentSelected(ButtonEvent ce) {
200
				// TODO : mettre en place le rafraichissement de la liste
201
			}
202
		});
203
		return bouton;
204
	}
205
 
206
	private ComboBox<Personne> creerComboBoxAuteursSaisis() {
207
		ListStore<Personne> personneExistanteStore = new ListStore<Personne>();
208
		personneExistanteStore.add(new ArrayList<Personne>());
209
 
210
		ComboBox<Personne> comboBox = new ComboBox<Personne>();
211
		comboBox.setWidth(200);
212
		comboBox.setEmptyText("Chercher une personne existante...");
213
		comboBox.setTriggerAction(TriggerAction.ALL);
214
		comboBox.setEditable(true);
215
		comboBox.setDisplayField("fmt_nom_complet");
216
		comboBox.setStore(personneExistanteStore);
217
		comboBox.addKeyListener(new KeyListener() {
218
			public void componentKeyUp(ComponentEvent ce) {
219
				ComboBox<Personne> comboBox = (ComboBox<Personne>) ce.getComponent();
220
				if (!ce.isNavKeyPress() && comboBox.getRawValue() != null && comboBox.getRawValue().length() > 0) {
221
					obtenirAuteursSaisis(comboBox.getRawValue());
222
				}
223
			}
224
 
225
		});
226
		return comboBox;
227
	}
228
 
229
	private Button creerBoutonAjouterAuteurSaisi() {
230
		Button bouton = new Button("Ajouter");
231
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
232
			@Override
233
			public void componentSelected(ButtonEvent ce) {
234
				Personne auteurSaisiSelectionne = auteursSaisisComboBox.getValue();
235
				ajouterAuteurDansGrille(auteurSaisiSelectionne);
236
			}
237
		});
238
		return bouton;
239
	}
240
 
241
	private void ajouterAuteurDansGrille(Personne auteur) {
242
		if (auteur != null) {
243
			// Ajout de la personne ajoutée à la liste
244
			if (auteur.getId() != null && !auteur.getId().equals("")) {
245
				auteursAjoutes.put(auteur.getId(), auteur);
246
			}
247
 
248
			// Définition de l'état
249
			auteur.set("etat", ETAT_AJOUTE);
250
 
251
			// Ajout à la grille
252
			grille.getStore().insert(auteur, 0);
253
		}
254
	}
255
 
256
	private void supprimerAuteurDansGrille(Personne auteur) {
257
		if (auteur != null) {
258
			// Ajout de la personne supprimée à la liste
259
			if ((auteur.get("etat") == null || !auteur.get("etat").equals(ETAT_AJOUTE)) && auteur.getId() != null && !auteur.getId().equals("")) {
260
				auteursSupprimes.put(auteur.getId(), auteur);
261
			}
262
 
263
			// Suppression de l'enregistrement de la grille
264
			grille.getStore().remove(auteur);
265
		}
266
	}
267
 
268
	private Grid<Personne> creerGrille() {
269
		ListStore<Personne> storeGrille = new ListStore<Personne>();
270
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<Personne>>() {
271
			public void handleEvent(StoreEvent<Personne> ce) {
272
				actualiserEtatBoutonsBarreOutils();
273
			}
274
		});
275
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Personne>>() {
276
			public void handleEvent(StoreEvent<Personne> ce) {
277
				actualiserEtatBoutonsBarreOutils();
278
			}
279
		});
280
 
281
		RowNumberer pluginLigneNumero = new RowNumberer();
282
 
283
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
284
		colonnes.add(pluginLigneNumero);
285
		colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150));
286
		colonnes.add(new ColumnConfig("nom", i18nC.personneNom(), 75));
287
		colonnes.add(new ColumnConfig("prenom", i18nC.personnePrenom(), 75));
288
		colonnes.add(new ColumnConfig("prefixe", i18nC.personnePrefixe(), 50));
289
		//colonnes.add(new ColumnConfig("truk_nom_autre", i18nC.personneNomAutre(), 200));
290
		colonnes.add(new ColumnConfig("naissance_date", i18nC.date(), 75));
291
		colonnes.add(new ColumnConfig("naissance_lieu", i18nC.lieu(), 100));
292
		colonnes.add(new ColumnConfig("ce_deces", i18nC.personneDecedeeInterogation(), 50));
293
		colonnes.add(new ColumnConfig("deces_date", i18nC.date(), 75));
294
		colonnes.add(new ColumnConfig("deces_lieu", i18nC.lieu(), 100));
295
 
296
		GridSelectionModel<Personne> modeleDeSelection = new GridSelectionModel<Personne>();
297
 
298
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
299
		modeleDeColonnes.addHeaderGroup(0, 1, new HeaderGroupConfig(i18nC.personneIdentite(), 1, 4));
300
		modeleDeColonnes.addHeaderGroup(0, 5, new HeaderGroupConfig(i18nC.personneNaissance(), 1, 2));
301
		modeleDeColonnes.addHeaderGroup(0, 7, new HeaderGroupConfig(i18nC.personneDeces(), 1, 3));
302
 
303
		Grid<Personne> grillePersonne = new Grid<Personne>(storeGrille, modeleDeColonnes);
304
		grillePersonne.setHeight("100%");
305
		grillePersonne.setBorders(true);
306
		grillePersonne.setSelectionModel(modeleDeSelection);
307
		grillePersonne.addPlugin(pluginLigneNumero);
308
		grillePersonne.getView().setForceFit(true);
309
		grillePersonne.setAutoExpandColumn("fmt_nom_complet");
310
		grillePersonne.setStripeRows(true);
311
		grillePersonne.setTrackMouseOver(true);
312
 
313
		return grillePersonne;
314
	}
315
 
316
	public void actualiserEtatBoutonsBarreOutils() {
317
		// Activation des boutons si la grille contient un élément
318
		if (grille.getStore().getCount() > 0) {
319
			auteursBoutonSupprimer.enable();
320
			auteursBoutonModifier.enable();
321
		}
322
		// Désactivation des boutons si la grille ne contient plus d'élément
323
		if (grille.getStore().getCount() == 0) {
324
			auteursBoutonSupprimer.disable();
325
			auteursBoutonModifier.disable();
326
		}
327
	}
328
 
329
	public void rafraichir(Object nouvellesDonnees) {
330
		if (nouvellesDonnees instanceof Information) {
331
			Information info = (Information) nouvellesDonnees;
332
			rafraichirInformation(info);
333
		} else if (nouvellesDonnees instanceof ValeurListe) {
334
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
335
			rafraichirValeurListe(listeValeurs);
336
		} else {
337
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
338
		}
339
	}
340
 
341
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
342
		if (listeValeurs.getId().equals(config.getListeId(""))) {
343
			Formulaire.rafraichirComboBox(listeValeurs, null, null);
344
		} else {
345
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
346
		}
347
	}
348
 
349
	public void rafraichirInformation(Information info) {
350
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
351
			GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
352
		}
353
		String type = info.getType();
354
		if (type.equals("liste_personne")) {
355
			if (info.getDonnee(0) != null) {
356
				PersonneListe personnes = (PersonneListe) info.getDonnee(0);
357
				List<Personne> liste = personnes.toList();
358
 
359
				auteursSaisisComboBox.getStore().removeAll();
360
				auteursSaisisComboBox.getStore().add(liste);
361
				auteursSaisisComboBox.expand();
362
			}
363
		} else if (type.equals("liste_collection_a_personne")) {
364
			if (info.getDonnee(0) != null) {
365
				initialiser();
366
				// TODO : passer à la méthode peupler un objet CollectionAPersonneListe et modifier le type de auteurs
367
				//auteurs = (CollectionAPersonneListe) info.getDonnee(0);
368
				peupler();
369
			}
370
		}
371
	}
372
 
373
	private void peupler() {
374
		layout();
375
		Info.display("Chargement des Auteurs", "ok");
376
	}
377
 
378
	private void obtenirAuteursSaisis(String nom) {
379
		mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%");
380
	}
381
}