Subversion Repositories eFlore/Applications.coel

Rev

Rev 703 | Rev 775 | Go to most recent revision | Details | Compare with Previous | 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) {
720 jp_milcent 185
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerAuteur());
703 jp_milcent 186
				} else {
720 jp_milcent 187
					supprimerDansGrille(auteurSaisiSelectionne);
703 jp_milcent 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() {
720 jp_milcent 207
		ListStore<Personne> personnesSaisiesStore = new ListStore<Personne>();
208
		personnesSaisiesStore.add(new ArrayList<Personne>());
703 jp_milcent 209
 
210
		ComboBox<Personne> comboBox = new ComboBox<Personne>();
211
		comboBox.setWidth(200);
720 jp_milcent 212
		comboBox.setEmptyText(i18nC.chercherAuteurSaisi());
703 jp_milcent 213
		comboBox.setTriggerAction(TriggerAction.ALL);
214
		comboBox.setEditable(true);
215
		comboBox.setDisplayField("fmt_nom_complet");
720 jp_milcent 216
		comboBox.setStore(personnesSaisiesStore);
703 jp_milcent 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
		return comboBox;
226
	}
227
 
228
	private Button creerBoutonAjouterAuteurSaisi() {
720 jp_milcent 229
		Button bouton = new Button(i18nC.ajouter());
703 jp_milcent 230
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
231
			@Override
232
			public void componentSelected(ButtonEvent ce) {
233
				Personne auteurSaisiSelectionne = auteursSaisisComboBox.getValue();
720 jp_milcent 234
				ajouterDansGrille(auteurSaisiSelectionne);
703 jp_milcent 235
			}
236
		});
237
		return bouton;
238
	}
239
 
720 jp_milcent 240
	private void ajouterDansGrille(Personne auteur) {
703 jp_milcent 241
		if (auteur != null) {
242
			// Ajout de la personne ajoutée à la liste
243
			if (auteur.getId() != null && !auteur.getId().equals("")) {
244
				auteursAjoutes.put(auteur.getId(), auteur);
245
			}
246
 
247
			// Définition de l'état
248
			auteur.set("etat", ETAT_AJOUTE);
249
 
250
			// Ajout à la grille
251
			grille.getStore().insert(auteur, 0);
252
		}
253
	}
254
 
720 jp_milcent 255
	private void supprimerDansGrille(Personne auteur) {
703 jp_milcent 256
		if (auteur != null) {
257
			// Ajout de la personne supprimée à la liste
258
			if ((auteur.get("etat") == null || !auteur.get("etat").equals(ETAT_AJOUTE)) && auteur.getId() != null && !auteur.getId().equals("")) {
259
				auteursSupprimes.put(auteur.getId(), auteur);
260
			}
261
 
262
			// Suppression de l'enregistrement de la grille
263
			grille.getStore().remove(auteur);
264
		}
265
	}
266
 
267
	private Grid<Personne> creerGrille() {
268
		ListStore<Personne> storeGrille = new ListStore<Personne>();
269
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<Personne>>() {
270
			public void handleEvent(StoreEvent<Personne> ce) {
271
				actualiserEtatBoutonsBarreOutils();
272
			}
273
		});
274
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Personne>>() {
275
			public void handleEvent(StoreEvent<Personne> ce) {
276
				actualiserEtatBoutonsBarreOutils();
277
			}
278
		});
279
 
280
		RowNumberer pluginLigneNumero = new RowNumberer();
720 jp_milcent 281
 
703 jp_milcent 282
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
283
		colonnes.add(pluginLigneNumero);
284
		colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150));
285
		colonnes.add(new ColumnConfig("nom", i18nC.personneNom(), 75));
286
		colonnes.add(new ColumnConfig("prenom", i18nC.personnePrenom(), 75));
287
		colonnes.add(new ColumnConfig("prefixe", i18nC.personnePrefixe(), 50));
288
		//colonnes.add(new ColumnConfig("truk_nom_autre", i18nC.personneNomAutre(), 200));
289
		colonnes.add(new ColumnConfig("naissance_date", i18nC.date(), 75));
290
		colonnes.add(new ColumnConfig("naissance_lieu", i18nC.lieu(), 100));
291
		colonnes.add(new ColumnConfig("ce_deces", i18nC.personneDecedeeInterogation(), 50));
292
		colonnes.add(new ColumnConfig("deces_date", i18nC.date(), 75));
293
		colonnes.add(new ColumnConfig("deces_lieu", i18nC.lieu(), 100));
294
 
295
		GridSelectionModel<Personne> modeleDeSelection = new GridSelectionModel<Personne>();
296
 
297
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
298
		modeleDeColonnes.addHeaderGroup(0, 1, new HeaderGroupConfig(i18nC.personneIdentite(), 1, 4));
299
		modeleDeColonnes.addHeaderGroup(0, 5, new HeaderGroupConfig(i18nC.personneNaissance(), 1, 2));
300
		modeleDeColonnes.addHeaderGroup(0, 7, new HeaderGroupConfig(i18nC.personneDeces(), 1, 3));
301
 
302
		Grid<Personne> grillePersonne = new Grid<Personne>(storeGrille, modeleDeColonnes);
303
		grillePersonne.setHeight("100%");
304
		grillePersonne.setBorders(true);
305
		grillePersonne.setSelectionModel(modeleDeSelection);
306
		grillePersonne.addPlugin(pluginLigneNumero);
307
		grillePersonne.getView().setForceFit(true);
308
		grillePersonne.setAutoExpandColumn("fmt_nom_complet");
309
		grillePersonne.setStripeRows(true);
310
		grillePersonne.setTrackMouseOver(true);
311
 
312
		return grillePersonne;
313
	}
314
 
315
	public void actualiserEtatBoutonsBarreOutils() {
316
		// Activation des boutons si la grille contient un élément
317
		if (grille.getStore().getCount() > 0) {
318
			auteursBoutonSupprimer.enable();
319
			auteursBoutonModifier.enable();
320
		}
321
		// Désactivation des boutons si la grille ne contient plus d'élément
322
		if (grille.getStore().getCount() == 0) {
323
			auteursBoutonSupprimer.disable();
324
			auteursBoutonModifier.disable();
325
		}
326
	}
327
 
328
	public void rafraichir(Object nouvellesDonnees) {
329
		if (nouvellesDonnees instanceof Information) {
330
			Information info = (Information) nouvellesDonnees;
331
			rafraichirInformation(info);
332
		} else if (nouvellesDonnees instanceof ValeurListe) {
333
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
334
			rafraichirValeurListe(listeValeurs);
335
		} else {
336
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
337
		}
338
	}
339
 
340
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
341
		if (listeValeurs.getId().equals(config.getListeId(""))) {
342
			Formulaire.rafraichirComboBox(listeValeurs, null, null);
343
		} else {
344
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
345
		}
346
	}
347
 
348
	public void rafraichirInformation(Information info) {
349
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
350
			GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
351
		}
352
		String type = info.getType();
353
		if (type.equals("liste_personne")) {
354
			if (info.getDonnee(0) != null) {
355
				PersonneListe personnes = (PersonneListe) info.getDonnee(0);
356
				List<Personne> liste = personnes.toList();
357
 
358
				auteursSaisisComboBox.getStore().removeAll();
359
				auteursSaisisComboBox.getStore().add(liste);
360
				auteursSaisisComboBox.expand();
361
			}
362
		} else if (type.equals("liste_collection_a_personne")) {
363
			if (info.getDonnee(0) != null) {
364
				initialiser();
365
				// TODO : passer à la méthode peupler un objet CollectionAPersonneListe et modifier le type de auteurs
366
				//auteurs = (CollectionAPersonneListe) info.getDonnee(0);
367
				peupler();
368
			}
369
		}
370
	}
371
 
372
	private void peupler() {
373
		layout();
720 jp_milcent 374
		Info.display(i18nC.chargementAuteur(), i18nC.ok());
703 jp_milcent 375
	}
376
 
377
	private void obtenirAuteursSaisis(String nom) {
378
		mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%");
379
	}
380
}