Subversion Repositories eFlore/Applications.coel

Rev

Rev 831 | Rev 839 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
806 jpm 1
package org.tela_botanica.client.vues;
2
 
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.List;
6
 
7
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.images.Images;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
831 jpm 10
import org.tela_botanica.client.modeles.InterneValeur;
11
import org.tela_botanica.client.modeles.UniteBase;
806 jpm 12
import org.tela_botanica.client.modeles.UniteRangement;
13
import org.tela_botanica.client.modeles.Valeur;
14
import org.tela_botanica.client.modeles.ValeurListe;
15
 
831 jpm 16
import com.extjs.gxt.ui.client.event.ButtonEvent;
806 jpm 17
import com.extjs.gxt.ui.client.event.Listener;
831 jpm 18
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
19
import com.extjs.gxt.ui.client.event.SelectionListener;
806 jpm 20
import com.extjs.gxt.ui.client.store.ListStore;
21
import com.extjs.gxt.ui.client.widget.ContentPanel;
831 jpm 22
import com.extjs.gxt.ui.client.widget.Info;
23
import com.extjs.gxt.ui.client.widget.LayoutContainer;
24
import com.extjs.gxt.ui.client.widget.MessageBox;
25
import com.extjs.gxt.ui.client.widget.button.Button;
26
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
27
import com.extjs.gxt.ui.client.widget.form.ComboBox;
28
import com.extjs.gxt.ui.client.widget.form.NumberField;
29
import com.extjs.gxt.ui.client.widget.form.TextField;
30
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
31
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
32
import com.extjs.gxt.ui.client.widget.grid.AggregationRowConfig;
33
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
806 jpm 34
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
35
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
831 jpm 36
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
806 jpm 37
import com.extjs.gxt.ui.client.widget.grid.Grid;
38
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
831 jpm 39
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
40
import com.extjs.gxt.ui.client.widget.grid.SummaryType;
806 jpm 41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
831 jpm 42
import com.extjs.gxt.ui.client.widget.layout.FormData;
43
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
44
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
45
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
806 jpm 46
import com.google.gwt.core.client.GWT;
831 jpm 47
import com.google.gwt.i18n.client.NumberFormat;
806 jpm 48
 
49
public class CollectionFormDescription extends FormulaireOnglet implements Rafraichissable {
50
 
51
	private Grid<UniteRangement> uniteRangementGrille = null;
831 jpm 52
	private ComboBox<Valeur> etatUniteRangementCombo = null;
53
	private Grid<UniteBase> uniteBaseGrille = null;
54
	private CheckBoxGroup typePapierConservationCacGrpChp = null;
55
	private LayoutContainer typePapierConservationCp;
56
	private TextField<String> typePapierConservationAutreChp;
57
 
806 jpm 58
	public CollectionFormDescription(Formulaire formulaireCourrant) {
59
		initialiserOnglet(formulaireCourrant);
60
		setId("description");
61
		setText(Mediateur.i18nC.collectionDescription());
831 jpm 62
 
63
		FormLayout formulaireLayout = (FormLayout) this.getLayout();
64
		formulaireLayout.setLabelAlign(LabelAlign.LEFT);
65
		formulaireLayout.setLabelWidth(300);
66
		layout();
806 jpm 67
 
831 jpm 68
		creerUniteRangement();
69
		creerUniteBase();
70
 
71
		typePapierConservationCacGrpChp = new CheckBoxGroup();
72
		typePapierConservationCacGrpChp.setFieldLabel("Quel est le type du papier de conservation ?");
73
		typePapierConservationCp = Formulaire.creerChoixMultipleCp();
74
		add(typePapierConservationCp);
75
		mediateur.obtenirListeValeurEtRafraichir(this, "typePapier");
806 jpm 76
	}
77
 
78
 
831 jpm 79
	private void creerUniteRangement() {
80
		ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteRangementTitre());
81
		uniteRangementGrille  = creerGrilleUniteRangement();
806 jpm 82
		panneauGrille.add(uniteRangementGrille);
831 jpm 83
		ToolBar barreOutils = creerBarreOutilsGrilleUniteRangement();
84
		panneauGrille.setTopComponent(barreOutils);
806 jpm 85
		add(panneauGrille);
831 jpm 86
 
87
		ListStore<Valeur> etatUniteRangementStore = new ListStore<Valeur>();
88
		etatUniteRangementCombo  = new ComboBox<Valeur>();
89
		etatUniteRangementCombo.setFieldLabel(i18nC.collectionUniteRangementEtatGeneral());
90
		etatUniteRangementCombo.setToolTip(i18nC.collectionUniteRangementEtatGeneralInfo());
91
		etatUniteRangementCombo.setForceSelection(true);
92
		etatUniteRangementCombo.setTriggerAction(TriggerAction.ALL);
93
		etatUniteRangementCombo.setDisplayField("nom");
94
 
95
		etatUniteRangementCombo.setStore(etatUniteRangementStore);
96
		etatUniteRangementCombo.setEditable(false);
97
		add(etatUniteRangementCombo, new FormData(300, 0));
98
		mediateur.obtenirListeValeurEtRafraichir(this, "etatUniteRangement");
806 jpm 99
	}
831 jpm 100
 
101
	private ContentPanel creerPanneauContenantGrille(String titre) {
806 jpm 102
		ContentPanel panneau = new ContentPanel();
831 jpm 103
		panneau.setHeading(titre);
806 jpm 104
		panneau.setIcon(Images.ICONES.table());
105
		panneau.setLayout(new FitLayout());
106
		panneau.setFrame(true);
107
 
108
		return panneau;
109
	}
110
 
831 jpm 111
	private Grid<UniteRangement> creerGrilleUniteRangement() {
806 jpm 112
		ListStore<UniteRangement> storeGrille = new ListStore<UniteRangement>();
113
 
114
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
831 jpm 115
		colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
806 jpm 116
 
831 jpm 117
		NumberField champNombre = new NumberField();
118
		champNombre.setFormat(NumberFormat.getFormat("#"));
119
		CellEditor editeurNombre = new CellEditor(champNombre);
120
 
121
		ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
122
		nombreColonne.setEditor(editeurNombre);
123
		colonnes.add(nombreColonne);
124
 
125
		ListStore<InterneValeur> precisionStore = new ListStore<InterneValeur>();
126
		precisionStore.add(new InterneValeur(UniteRangement.COMPTE_APPROXIMATIF, i18nC.precisionApproximatif()));
127
		precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, i18nC.precisionExact()));
128
 
129
		final ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>();
130
		precisionCombo.setForceSelection(true);
131
		precisionCombo.setTriggerAction(TriggerAction.ALL);
132
		precisionCombo.setDisplayField("nom");
133
		precisionCombo.setStore(precisionStore);
134
		precisionCombo.setEditable(false);
135
 
136
		CellEditor editeurPrecision = new CellEditor(precisionCombo) {
137
			@Override
138
			public Object preProcessValue(Object valeur) {
139
				InterneValeur retour = null;
140
				if (valeur != null ) {
141
					if (precisionCombo.getStore().findModel("nom", valeur.toString()) != null) {
142
						retour = precisionCombo.getStore().findModel("nom", valeur.toString());
143
					} else if (precisionCombo.getStore().findModel("abr", valeur.toString()) != null) {
144
						retour = precisionCombo.getStore().findModel("abr", valeur.toString());
145
					}
146
				}
147
				return retour;
148
			}
149
 
150
			@Override
151
			public Object postProcessValue(Object valeur) {
152
				String retour = null;
153
				if (valeur != null ) {
154
					if (valeur instanceof InterneValeur) {
155
						InterneValeur valeurInterne = (InterneValeur) valeur;
156
						retour = valeurInterne.getNom();
157
					}
158
				}
159
				return retour;
160
			}
161
		};
162
 
163
		ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
164
		precisionColonne.setEditor(editeurPrecision);
165
		colonnes.add(precisionColonne);
166
 
167
		TextField<String> formatChp = new TextField<String>();
168
		formatChp.setAllowBlank(false);
169
 
170
		ColumnConfig formatColonne =  new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
171
		formatColonne.setEditor(new CellEditor(formatChp));
172
		colonnes.add(formatColonne);
173
 
806 jpm 174
		GridSelectionModel<UniteRangement> modeleDeSelection = new GridSelectionModel<UniteRangement>();
175
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
176
 
831 jpm 177
		EditorGrid<UniteRangement> grilleUniteRangement = new EditorGrid<UniteRangement>(storeGrille, modeleDeColonnes);
806 jpm 178
		grilleUniteRangement.setHeight(300);
179
		grilleUniteRangement.setBorders(true);
180
		grilleUniteRangement.setSelectionModel(modeleDeSelection);
181
		grilleUniteRangement.getView().setForceFit(true);
182
		grilleUniteRangement.getView().setAutoFill(true);
183
		grilleUniteRangement.setAutoExpandColumn("type");
184
		grilleUniteRangement.setStripeRows(true);
185
		grilleUniteRangement.setTrackMouseOver(true);
186
 
187
		mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteRangement");
188
 
189
		return grilleUniteRangement;
190
	}
191
 
831 jpm 192
	private ToolBar creerBarreOutilsGrilleUniteRangement() {
193
		ToolBar barreOutils = new ToolBar();
194
 
195
		Button ajouterBouton = creerBoutonAjouterUniteRangement();
196
		barreOutils.add(ajouterBouton);
197
 
198
		barreOutils.add(new SeparatorToolItem());
199
 
200
		Button supprimerBouton = creerBoutonSupprimerUniteRangement();
201
		barreOutils.add(supprimerBouton);
202
 
203
		return barreOutils;
204
	}
205
 
206
	private Button creerBoutonAjouterUniteRangement() {
207
		Button bouton = new Button(i18nC.ajouter());
208
		bouton.setIcon(Images.ICONES.ajouter());
209
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
210
			@Override
211
			public void componentSelected(ButtonEvent ce) {
212
				final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteRangementSaisirType());
213
					box.addCallback(new Listener<MessageBoxEvent>() {
214
					public void handleEvent(MessageBoxEvent be) {
215
						final UniteRangement unite = new UniteRangement();
216
						unite.setType(be.getValue());
217
						unite.setTypeAutre(true);
218
						uniteRangementGrille.getStore().add(unite);
219
					}
220
				});
221
			}
222
		});
223
		return bouton;
224
	}
225
 
226
	private Button creerBoutonSupprimerUniteRangement() {
227
		Button bouton = new Button(i18nC.supprimer());
228
		bouton.setIcon(Images.ICONES.supprimer());
229
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
230
			@Override
231
			public void componentSelected(ButtonEvent ce) {
232
				UniteRangement uniteRangementSelectionnee = uniteRangementGrille.getSelectionModel().getSelectedItem();
233
				if (uniteRangementSelectionnee == null) {
234
					Info.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteRangement()));
235
				} else if (uniteRangementSelectionnee.getTypeAutre() == false) {
236
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteRangementAjoute());
237
				} else {
238
					uniteRangementGrille.getStore().remove(uniteRangementSelectionnee);
239
				}
240
			}
241
		});
242
		return bouton;
243
	}
244
 
245
	private void creerUniteBase() {
246
		ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteBaseTitre());
247
		uniteBaseGrille  = creerGrilleUniteBase();
248
		panneauGrille.add(uniteBaseGrille);
249
		ToolBar barreOutils = creerBarreOutilsGrilleUniteBase();
250
		panneauGrille.setTopComponent(barreOutils);
251
		add(panneauGrille);
252
	}
253
 
254
	private Grid<UniteBase> creerGrilleUniteBase() {
255
		ListStore<UniteBase> storeGrille = new ListStore<UniteBase>();
256
 
257
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
258
		colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
259
 
260
		NumberField champNombre = new NumberField();
261
		champNombre.setFormat(NumberFormat.getFormat("#"));
262
		CellEditor editeurNombre = new CellEditor(champNombre);
263
 
264
		ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
265
		nombreColonne.setEditor(editeurNombre);
266
		colonnes.add(nombreColonne);
267
 
268
		ListStore<InterneValeur> precisionStore = new ListStore<InterneValeur>();
269
		precisionStore.add(new InterneValeur(UniteRangement.COMPTE_APPROXIMATIF, i18nC.precisionApproximatif()));
270
		precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, i18nC.precisionExact()));
271
 
272
		final ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>();
273
		precisionCombo.setForceSelection(true);
274
		precisionCombo.setTriggerAction(TriggerAction.ALL);
275
		precisionCombo.setDisplayField("nom");
276
		precisionCombo.setStore(precisionStore);
277
		precisionCombo.setEditable(false);
278
 
279
		CellEditor editeurPrecision = new CellEditor(precisionCombo) {
280
			@Override
281
			public Object preProcessValue(Object valeur) {
282
				InterneValeur retour = null;
283
				if (valeur != null ) {
284
					if (precisionCombo.getStore().findModel("nom", valeur.toString()) != null) {
285
						retour = precisionCombo.getStore().findModel("nom", valeur.toString());
286
					} else if (precisionCombo.getStore().findModel("abr", valeur.toString()) != null) {
287
						retour = precisionCombo.getStore().findModel("abr", valeur.toString());
288
					}
289
				}
290
				return retour;
291
			}
292
 
293
			@Override
294
			public Object postProcessValue(Object valeur) {
295
				String retour = null;
296
				if (valeur != null ) {
297
					if (valeur instanceof InterneValeur) {
298
						InterneValeur valeurInterne = (InterneValeur) valeur;
299
						retour = valeurInterne.getNom();
300
					}
301
				}
302
				return retour;
303
			}
304
		};
305
 
306
		ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
307
		precisionColonne.setEditor(editeurPrecision);
308
		colonnes.add(precisionColonne);
309
 
310
		TextField<String> formatChp = new TextField<String>();
311
		formatChp.setAllowBlank(false);
312
 
313
		ColumnConfig formatColonne =  new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
314
		formatColonne.setEditor(new CellEditor(formatChp));
315
		colonnes.add(formatColonne);
316
 
317
		ColumnConfig partNombreColonne = new ColumnConfig("nombre_part", i18nC.collectionUniteNbre(), 50);
318
		partNombreColonne.setEditor(editeurNombre);
319
		colonnes.add(partNombreColonne);
320
 
321
		ColumnConfig partPrecisionColonne = new ColumnConfig("precision_part", i18nC.collectionUnitePrecision(), 50);
322
		partPrecisionColonne.setEditor(editeurPrecision);
323
		colonnes.add(partPrecisionColonne);
324
 
325
		ColumnConfig spNombreColonne = new ColumnConfig("nombre_sp", i18nC.collectionUniteNbre(), 50);
326
		spNombreColonne.setEditor(editeurNombre);
327
		colonnes.add(spNombreColonne);
328
 
329
		ColumnConfig spPrecisionColonne = new ColumnConfig("precision_sp", i18nC.collectionUnitePrecision(), 50);
330
		spPrecisionColonne.setEditor(editeurPrecision);
331
		colonnes.add(spPrecisionColonne);
332
 
333
		GridSelectionModel<UniteBase> modeleDeSelection = new GridSelectionModel<UniteBase>();
334
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
335
		modeleDeColonnes.addHeaderGroup(0, 0, new HeaderGroupConfig(i18nC.collectionUniteBase(), 1, 4));
336
		modeleDeColonnes.addHeaderGroup(0, 4, new HeaderGroupConfig(i18nC.collectionUniteBasePart(), 1, 2));
337
		modeleDeColonnes.addHeaderGroup(0, 6, new HeaderGroupConfig(i18nC.collectionUniteBaseSp(), 1, 2));
338
 
339
		AggregationRowConfig<UniteBase> total = new AggregationRowConfig<UniteBase>();
340
		total.setHtml("type", "TOTAL");
341
		total.setSummaryType("nombre", SummaryType.SUM);
342
		total.setSummaryFormat("nombre", NumberFormat.getFormat("#"));
343
		total.setSummaryType("nombre_part", SummaryType.SUM);
344
		total.setSummaryFormat("nombre_part", NumberFormat.getFormat("#"));
345
		total.setSummaryType("nombre_sp", SummaryType.SUM);
346
		total.setSummaryFormat("nombre_sp", NumberFormat.getFormat("#"));
347
		modeleDeColonnes.addAggregationRow(total);
348
 
349
		EditorGrid<UniteBase> grilleUniteBase = new EditorGrid<UniteBase>(storeGrille, modeleDeColonnes);
350
		grilleUniteBase.setHeight(200);
351
		grilleUniteBase.setBorders(true);
352
		grilleUniteBase.setSelectionModel(modeleDeSelection);
353
		grilleUniteBase.getView().setForceFit(true);
354
		grilleUniteBase.getView().setAutoFill(true);
355
		grilleUniteBase.setAutoExpandColumn("type");
356
		grilleUniteBase.setStripeRows(true);
357
		grilleUniteBase.setTrackMouseOver(true);
358
 
359
		mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteBase");
360
 
361
		return grilleUniteBase;
362
	}
363
 
364
	private ToolBar creerBarreOutilsGrilleUniteBase() {
365
		ToolBar barreOutils = new ToolBar();
366
 
367
		Button ajouterBouton = creerBoutonAjouterUniteBase();
368
		barreOutils.add(ajouterBouton);
369
 
370
		barreOutils.add(new SeparatorToolItem());
371
 
372
		Button supprimerBouton = creerBoutonSupprimerUniteBase();
373
		barreOutils.add(supprimerBouton);
374
 
375
		return barreOutils;
376
	}
377
 
378
	private Button creerBoutonAjouterUniteBase() {
379
		Button bouton = new Button(i18nC.ajouter());
380
		bouton.setIcon(Images.ICONES.ajouter());
381
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
382
			@Override
383
			public void componentSelected(ButtonEvent ce) {
384
				final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteBaseSaisirType());
385
					box.addCallback(new Listener<MessageBoxEvent>() {
386
					public void handleEvent(MessageBoxEvent be) {
387
						final UniteBase unite = new UniteBase();
388
						unite.setType(be.getValue());
389
						unite.setTypeAutre(true);
390
						uniteBaseGrille.getStore().add(unite);
391
					}
392
				});
393
			}
394
		});
395
		return bouton;
396
	}
397
 
398
	private Button creerBoutonSupprimerUniteBase() {
399
		Button bouton = new Button(i18nC.supprimer());
400
		bouton.setIcon(Images.ICONES.supprimer());
401
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
402
			@Override
403
			public void componentSelected(ButtonEvent ce) {
404
				UniteBase uniteBaseSelectionnee = uniteBaseGrille.getSelectionModel().getSelectedItem();
405
				if (uniteBaseSelectionnee == null) {
406
					Info.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteBase()));
407
				} else if (uniteBaseSelectionnee.getTypeAutre() == false) {
408
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteBaseAjoute());
409
				} else {
410
					uniteBaseGrille.getStore().remove(uniteBaseSelectionnee);
411
				}
412
			}
413
		});
414
		return bouton;
415
	}
416
 
806 jpm 417
	public void rafraichir(Object nouvellesDonnees) {
418
		if (nouvellesDonnees instanceof ValeurListe) {
419
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
420
			rafraichirValeurListe(listeValeurs);
421
		} else {
422
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
423
		}
424
	}
425
 
426
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
427
		if (listeValeurs.getId().equals(config.getListeId("typeUniteRangement"))) {
428
			Iterator<String> it = listeValeurs.keySet().iterator();
429
			while (it.hasNext()) {
430
				Valeur valeur = listeValeurs.get(it.next());
431
				UniteRangement unite = new UniteRangement();
432
				unite.setType(valeur.getNom());
831 jpm 433
				unite.setTypeAutre(false);
806 jpm 434
				uniteRangementGrille.getStore().add(unite);
435
			}
831 jpm 436
		} else if (listeValeurs.getId().equals(config.getListeId("typeUniteBase"))) {
437
			Iterator<String> it = listeValeurs.keySet().iterator();
438
			while (it.hasNext()) {
439
				Valeur valeur = listeValeurs.get(it.next());
440
				UniteBase unite = new UniteBase();
441
				unite.setType(valeur.getNom());
442
				unite.setTypeAutre(false);
443
				uniteBaseGrille.getStore().add(unite);
444
			}
445
		} else if (listeValeurs.getId().equals(config.getListeId("etatUniteRangement"))) {
446
			Formulaire.rafraichirComboBox(listeValeurs, etatUniteRangementCombo, "id_valeur");
447
		} else if (listeValeurs.getId().equals(config.getListeId("typePapier"))) {
448
			typePapierConservationAutreChp = new TextField<String>();
449
			Formulaire.creerChoixMultipleCac(typePapierConservationCp, typePapierConservationCacGrpChp, listeValeurs, typePapierConservationAutreChp);
806 jpm 450
		} else {
451
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
452
		}
453
	}
454
}