Subversion Repositories eFlore/Applications.coel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
719 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.Publication;
13
import org.tela_botanica.client.modeles.PublicationListe;
14
import org.tela_botanica.client.modeles.ValeurListe;
15
 
16
import com.extjs.gxt.ui.client.event.ButtonEvent;
17
import com.extjs.gxt.ui.client.event.ComponentEvent;
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.InfoConfig;
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.ColumnData;
32
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
33
import com.extjs.gxt.ui.client.widget.grid.Grid;
34
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
35
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
36
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
37
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
38
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
39
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
40
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
41
import com.google.gwt.core.client.GWT;
42
 
43
public class CollectionFormPublication extends FormulaireOnglet implements Rafraichissable {
44
	private ContentPanel panneauPrincipal = null;
45
	private ToolBar barreOutils = null;
46
	private Grid<Publication> grille;
47
 
48
	private PublicationListe publications = null;
49
	private PublicationListe publicationsAjoutees = null;
50
	private PublicationListe publicationsSupprimees = null;
51
	private ComboBox<Publication> publicationsSaisiesComboBox = null;
52
	private Button publicationsBoutonSupprimer = null;
53
	private Button publicationsBoutonModifier = null;
54
 
55
	private static final String ETAT_AJOUTE = "A";
56
	private static final String ETAT_SUPPRIME = "S";
57
 
58
	public CollectionFormPublication(Formulaire formulaireCourrant) {
59
		initialiserOnglet(formulaireCourrant);
60
		setId("publication");
61
		setText(Mediateur.i18nC.collectionPublication());
62
		setStyleAttribute("padding", "0");
63
 
64
		panneauPrincipal = creerPanneauContenantGrille();
65
		barreOutils = creerBarreOutilsGrille();
66
		panneauPrincipal.setTopComponent(barreOutils);
67
		grille = creerGrille();
68
  		panneauPrincipal.add(grille);
69
		add(panneauPrincipal);
70
 
71
		initialiser();
72
	}
73
 
74
	private void initialiser() {
75
		// Remise à zéro des modification dans la liste des auteurs
76
		publicationsAjoutees = new PublicationListe();
77
		publicationsSupprimees = new PublicationListe();
78
 
79
		// Actualisation de l'état des boutons de la barre d'outils
80
		actualiserEtatBoutonsBarreOutils();
81
	}
82
 
83
	private ContentPanel creerPanneauContenantGrille() {
84
		ContentPanel panneau = new ContentPanel();
85
 
86
		panneau.setHeading(i18nC.collectionPublicationTitre());
87
		panneau.setIcon(Images.ICONES.table());
88
		panneau.setLayout(new FitLayout());
89
		panneau.setFrame(true);
90
 
91
		return panneau;
92
	}
93
 
94
	private ToolBar creerBarreOutilsGrille() {
95
		ToolBar barreOutils = new ToolBar();
96
 
97
		Button ajouterBouton = creerBoutonAjouter();
98
		barreOutils.add(ajouterBouton);
99
 
100
		barreOutils.add(new SeparatorToolItem());
101
 
102
		publicationsBoutonModifier = creerBoutonModifier();
103
		barreOutils.add(publicationsBoutonModifier);
104
 
105
		barreOutils.add(new SeparatorToolItem());
106
 
107
		publicationsBoutonSupprimer = creerBoutonSupprimer();
108
		barreOutils.add(publicationsBoutonSupprimer);
109
 
110
		barreOutils.add(new SeparatorToolItem());
111
 
112
		Button rafraichirBouton = creerBoutonRafraichir();
113
		barreOutils.add(rafraichirBouton);
114
 
115
		barreOutils.add(new SeparatorToolItem());
116
 
117
		publicationsSaisiesComboBox = creerComboBoxPublicationsSaisis();
118
		barreOutils.add(publicationsSaisiesComboBox);
119
 
120
		Button ajouterPublicationSaisieBouton = creerBoutonAjouterPublicationSaisi();
121
		barreOutils.add(ajouterPublicationSaisieBouton);
122
 
123
		return barreOutils;
124
	}
125
 
126
	private Button creerBoutonAjouter() {
127
		Button bouton = new Button(i18nC.ajouter());
128
		bouton.setIcon(Images.ICONES.vcardAjouter());
129
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
130
			@Override
131
			public void componentSelected(ButtonEvent ce) {
132
				PublicationForm formulairePublication = new PublicationForm();
133
				//formulairePersonne.setHeaderVisible(false);
134
				//formulairePersonne.setTopComponent(null);
135
				// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale
136
				//formulairePersonne.setBottomComponent(null);
137
 
138
				final FenetreForm fenetre = new FenetreForm(i18nC.publicationTitreFormAjout());
139
				fenetre.add(formulairePublication);
140
				fenetre.show();
141
			}
142
		});
143
		return bouton;
144
	}
145
 
146
	private Button creerBoutonModifier() {
147
		Button bouton = new Button(i18nC.modifier());
148
		bouton.setIcon(Images.ICONES.vcardModifier());
149
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
150
			@Override
151
			public void componentSelected(ButtonEvent ce) {
152
				Publication publicationSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
153
 
154
				if (publicationSaisieSelectionnee == null) {
155
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
156
				} else {
157
					PublicationForm formulairePublication = new PublicationForm();
158
					//formulairePublication.setHeaderVisible(false);
159
					//formulairePublication.setTopComponent(null);
160
					// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale
161
					//formulairePersonne.setBottomComponent(null);
162
					formulairePublication.rafraichir(publicationSaisieSelectionnee);
163
 
164
					final FenetreForm fenetre = new FenetreForm(i18nC.publicationTitreFormModif());
165
					fenetre.add(formulairePublication);
166
					fenetre.show();
167
				}
168
			}
169
		});
170
		return bouton;
171
	}
172
 
173
	private Button creerBoutonSupprimer() {
174
		Button bouton = new Button(i18nC.supprimer());
175
		bouton.setIcon(Images.ICONES.vcardSupprimer());
176
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
177
			@Override
178
			public void componentSelected(ButtonEvent ce) {
179
				Publication publicationSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
180
				if (publicationSaisieSelectionnee == null) {
181
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
182
				} else {
183
					supprimerDansGrille(publicationSaisieSelectionnee);
184
				}
185
			}
186
		});
187
		return bouton;
188
	}
189
 
190
	private Button creerBoutonRafraichir() {
191
		Button bouton = new Button(i18nC.rafraichir());
192
		bouton.setIcon(Images.ICONES.rafraichir());
193
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
194
			@Override
195
			public void componentSelected(ButtonEvent ce) {
196
				// TODO : mettre en place le rafraichissement de la liste
197
			}
198
		});
199
		return bouton;
200
	}
201
 
202
	private ComboBox<Publication> creerComboBoxPublicationsSaisis() {
203
		ListStore<Publication> publicationsSaisiesStore = new ListStore<Publication>();
204
 
205
		ComboBox<Publication> comboBox = new ComboBox<Publication>();
206
		comboBox.setWidth(400);
207
		comboBox.setEmptyText(i18nC.chercherPublicationSaisi());
208
		comboBox.setTriggerAction(TriggerAction.ALL);
209
		comboBox.setEditable(true);
210
		comboBox.setDisplayField("fmt_nom_complet");
211
		comboBox.setStore(publicationsSaisiesStore);
212
		comboBox.addKeyListener(new KeyListener() {
213
			public void componentKeyUp(ComponentEvent ce) {
214
				ComboBox<Publication> comboBox = (ComboBox<Publication>) ce.getComponent();
215
				if (!ce.isNavKeyPress() && comboBox.getRawValue() != null && comboBox.getRawValue().length() > 0) {
216
					obtenirPublicationsSaisies(comboBox.getRawValue());
217
				}
218
			}
219
		});
220
		return comboBox;
221
	}
222
 
223
	private Button creerBoutonAjouterPublicationSaisi() {
224
		Button bouton = new Button(i18nC.ajouter());
225
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
226
			@Override
227
			public void componentSelected(ButtonEvent ce) {
228
				Publication publicationSaisieSelectionne = publicationsSaisiesComboBox.getValue();
229
				ajouterDansGrille(publicationSaisieSelectionne);
230
			}
231
		});
232
		return bouton;
233
	}
234
 
235
	private void ajouterDansGrille(Publication publication) {
236
		if (publication != null) {
237
			// Ajout de la personne ajoutée à la liste
238
			if (publication.getId() != null && !publication.getId().equals("")) {
239
				publicationsAjoutees.put(publication.getId(), publication);
240
			}
241
 
242
			// Définition de l'état
243
			publication.set("etat", ETAT_AJOUTE);
244
 
245
			// Ajout à la grille
246
			grille.getStore().insert(publication, 0);
247
		}
248
	}
249
 
250
	private void supprimerDansGrille(Publication publication) {
251
		if (publication != null) {
252
			// Ajout de la personne supprimée à la liste
253
			if ((publication.get("etat") == null || !publication.get("etat").equals(ETAT_AJOUTE)) && publication.getId() != null && !publication.getId().equals("")) {
254
				publicationsSupprimees.put(publication.getId(), publication);
255
			}
256
 
257
			// Suppression de l'enregistrement de la grille
258
			grille.getStore().remove(publication);
259
		}
260
	}
261
 
262
	private Grid<Publication> creerGrille() {
263
		ListStore<Publication> storeGrille = new ListStore<Publication>();
264
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<Publication>>() {
265
			public void handleEvent(StoreEvent<Publication> ce) {
266
				actualiserEtatBoutonsBarreOutils();
267
			}
268
		});
269
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Publication>>() {
270
			public void handleEvent(StoreEvent<Publication> ce) {
271
				actualiserEtatBoutonsBarreOutils();
272
			}
273
		});
274
 
275
		RowNumberer pluginLigneNumero = new RowNumberer();
276
 
277
		GridCellRenderer<Publication> infoBulle = new GridCellRenderer<Publication>() {
278
			@Override
279
			public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {
280
				String valeur = (String) model.get(property);
281
				return "<span title='"+valeur+"'>" + valeur + "</span>";
282
			}
283
		};
284
 
285
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
286
		colonnes.add(pluginLigneNumero);
287
		ColumnConfig fmtAuteurColonne = new ColumnConfig("fmt_auteur", i18nC.publicationAuteurs(), 150);
288
		fmtAuteurColonne.setRenderer(infoBulle);
289
		colonnes.add(fmtAuteurColonne);
290
		ColumnConfig titreColonne = new ColumnConfig("titre", i18nC.publicationTitre(), 150);
291
		titreColonne.setRenderer(infoBulle);
292
		colonnes.add(titreColonne);
293
		colonnes.add(new ColumnConfig("collection", i18nC.publicationRevueCollection(), 75));
294
		colonnes.add(new ColumnConfig("editeur", i18nC.publicationEditeur(), 75));
295
		colonnes.add(new ColumnConfig("date_parution", i18nC.publicationDateParution(), 75));
296
		colonnes.add(new ColumnConfig("indication_nvt", i18nC.publicationNvt(), 75));
297
		colonnes.add(new ColumnConfig("fascicule", i18nC.publicationFascicule(), 75));
298
		colonnes.add(new ColumnConfig("truk_pages", i18nC.publicationPage(), 50));
299
 
300
		GridSelectionModel<Publication> modeleDeSelection = new GridSelectionModel<Publication>();
301
 
302
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
303
 
304
		Grid<Publication> grillePublications = new Grid<Publication>(storeGrille, modeleDeColonnes);
305
		grillePublications.setHeight("100%");
306
		grillePublications.setBorders(true);
307
		grillePublications.setSelectionModel(modeleDeSelection);
308
		grillePublications.addPlugin(pluginLigneNumero);
309
		grillePublications.getView().setForceFit(true);
310
		grillePublications.setAutoExpandColumn("titre");
311
		grillePublications.setStripeRows(true);
312
		grillePublications.setTrackMouseOver(true);
313
 
314
		return grillePublications;
315
	}
316
 
317
	public void actualiserEtatBoutonsBarreOutils() {
318
		// Activation des boutons si la grille contient un élément
319
		if (grille.getStore().getCount() > 0) {
320
			publicationsBoutonSupprimer.enable();
321
			publicationsBoutonModifier.enable();
322
		}
323
		// Désactivation des boutons si la grille ne contient plus d'élément
324
		if (grille.getStore().getCount() == 0) {
325
			publicationsBoutonSupprimer.disable();
326
			publicationsBoutonModifier.disable();
327
		}
328
	}
329
 
330
	public void rafraichir(Object nouvellesDonnees) {
331
		if (nouvellesDonnees instanceof Information) {
332
			Information info = (Information) nouvellesDonnees;
333
			rafraichirInformation(info);
334
		} else if (nouvellesDonnees instanceof PublicationListe) {
335
			PublicationListe listePublications = (PublicationListe) nouvellesDonnees;
336
			rafraichirPublicationListe(listePublications);
337
		} else if (nouvellesDonnees instanceof ValeurListe) {
338
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
339
			rafraichirValeurListe(listeValeurs);
340
		} else {
341
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
342
		}
343
	}
344
 
345
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
346
		if (listeValeurs.getId().equals(config.getListeId(""))) {
347
			Formulaire.rafraichirComboBox(listeValeurs, null, null);
348
		} else {
349
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
350
		}
351
	}
352
 
353
	private void rafraichirPublicationListe(PublicationListe listePublications) {
354
		List<Publication> liste = listePublications.toList();
355
 
356
		publicationsSaisiesComboBox.getStore().removeAll();
357
		publicationsSaisiesComboBox.getStore().add(liste);
358
		publicationsSaisiesComboBox.expand();
359
	}
360
 
361
	public void rafraichirInformation(Information info) {
362
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
363
			GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
364
		}
365
		String type = info.getType();
366
		if (type.equals("liste_collection_a_publication")) {
367
			if (info.getDonnee(0) != null) {
368
				initialiser();
369
				// TODO : passer à la méthode peupler un objet CollectionAPublicationListe et modifier le type de publications
370
				//publications = (CollectionAPublicationListe) info.getDonnee(0);
371
				peupler();
372
			}
373
		}
374
	}
375
 
376
	private void peupler() {
377
		layout();
378
		Info.display(i18nC.chargementPublication(), i18nC.ok());
379
	}
380
 
381
	private void obtenirPublicationsSaisies(String nom) {
382
		mediateur.selectionnerPublicationParNomComplet(this, null, nom+"%");
383
	}
384
}