Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
934 jpm 1
package org.tela_botanica.client.vues.collection;
806 jpm 2
 
3
import java.util.ArrayList;
948 jpm 4
import java.util.HashMap;
806 jpm 5
import java.util.Iterator;
6
import java.util.List;
7
 
8
import org.tela_botanica.client.Mediateur;
839 jpm 9
import org.tela_botanica.client.composants.ChampCaseACocher;
854 jpm 10
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;
857 jpm 11
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypes;
858 jpm 12
import org.tela_botanica.client.composants.ChampSliderPourcentage;
806 jpm 13
import org.tela_botanica.client.images.Images;
14
import org.tela_botanica.client.interfaces.Rafraichissable;
831 jpm 15
import org.tela_botanica.client.modeles.InterneValeur;
806 jpm 16
import org.tela_botanica.client.modeles.Valeur;
17
import org.tela_botanica.client.modeles.ValeurListe;
948 jpm 18
import org.tela_botanica.client.modeles.aDonnee;
19
import org.tela_botanica.client.modeles.collection.Collection;
20
import org.tela_botanica.client.modeles.collection.CollectionBotanique;
949 jpm 21
import org.tela_botanica.client.modeles.collection.UniteBase;
22
import org.tela_botanica.client.modeles.collection.UniteRangement;
948 jpm 23
import org.tela_botanica.client.util.Debug;
24
import org.tela_botanica.client.util.Pattern;
25
import org.tela_botanica.client.util.UtilNombre;
26
import org.tela_botanica.client.util.UtilString;
934 jpm 27
import org.tela_botanica.client.vues.Formulaire;
28
import org.tela_botanica.client.vues.FormulaireOnglet;
806 jpm 29
 
859 jpm 30
import com.extjs.gxt.ui.client.Style.Scroll;
831 jpm 31
import com.extjs.gxt.ui.client.event.ButtonEvent;
806 jpm 32
import com.extjs.gxt.ui.client.event.Listener;
831 jpm 33
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
34
import com.extjs.gxt.ui.client.event.SelectionListener;
806 jpm 35
import com.extjs.gxt.ui.client.store.ListStore;
36
import com.extjs.gxt.ui.client.widget.ContentPanel;
831 jpm 37
import com.extjs.gxt.ui.client.widget.Info;
38
import com.extjs.gxt.ui.client.widget.MessageBox;
839 jpm 39
import com.extjs.gxt.ui.client.widget.Text;
831 jpm 40
import com.extjs.gxt.ui.client.widget.button.Button;
41
import com.extjs.gxt.ui.client.widget.form.ComboBox;
862 jpm 42
import com.extjs.gxt.ui.client.widget.form.FieldSet;
831 jpm 43
import com.extjs.gxt.ui.client.widget.form.NumberField;
44
import com.extjs.gxt.ui.client.widget.form.TextField;
45
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
46
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
47
import com.extjs.gxt.ui.client.widget.grid.AggregationRowConfig;
48
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
806 jpm 49
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
50
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
831 jpm 51
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
806 jpm 52
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
831 jpm 53
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
54
import com.extjs.gxt.ui.client.widget.grid.SummaryType;
806 jpm 55
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
831 jpm 56
import com.extjs.gxt.ui.client.widget.layout.FormData;
57
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
58
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
59
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
806 jpm 60
import com.google.gwt.core.client.GWT;
831 jpm 61
import com.google.gwt.i18n.client.NumberFormat;
806 jpm 62
 
63
public class CollectionFormDescription extends FormulaireOnglet implements Rafraichissable {
64
 
948 jpm 65
	private Collection collection = null;
66
	private CollectionBotanique collectionBotanique = null;
67
	private Collection collectionCollectee = null;
68
	private CollectionBotanique collectionBotaniqueCollectee = null;
69
 
949 jpm 70
	private ListStore<InterneValeur> precisionStore = null;
858 jpm 71
	private ChampComboBoxListeValeurs typesCollectionBotaCombo = null;
72
	private NumberField nbreEchantillonChp = null;
948 jpm 73
	private EditorGrid<UniteRangement> uniteRangementGrille = null;
854 jpm 74
	private ChampComboBoxListeValeurs etatUniteRangementCombo = null;
948 jpm 75
	private EditorGrid<UniteBase> uniteBaseGrille = null;
839 jpm 76
	private ChampCaseACocher typePapierConservationChp = null;
77
	private ChampCaseACocher methodeConservationChp = null;
858 jpm 78
	private ChampSliderPourcentage specimenFixationPourcentChp = null;
79
	private ChampSliderPourcentage etiquetteFixationPourcentChp = null;
854 jpm 80
	private ChampCaseACocher specimentMethodeFixationChp = null;
81
	private ChampCaseACocher etiquetteMethodeFixationSurSupportChp = null;
82
	private ChampCaseACocher etiquetteMethodeFixationSurSpecimenChp = null;
83
	private ChampCaseACocher typeEcritureChp = null;
84
	private ChampComboBoxListeValeurs traitementCombo = null;
85
	private ChampCaseACocher poisonTraitementChp = null;
86
	private ChampCaseACocher insecteTraitementChp = null;
87
	private ChampComboBoxListeValeurs etatGeneralCombo = null;
88
	private ChampComboBoxListeValeurs determinationCombo = null;
857 jpm 89
	private ChampMultiValeursMultiTypes specimenDegradationChp = null;
90
	private ChampMultiValeursMultiTypes presentationDegradationChp = null;
831 jpm 91
 
949 jpm 92
 
806 jpm 93
	public CollectionFormDescription(Formulaire formulaireCourrant) {
94
		initialiserOnglet(formulaireCourrant);
95
		setId("description");
96
		setText(Mediateur.i18nC.collectionDescription());
831 jpm 97
 
98
		FormLayout formulaireLayout = (FormLayout) this.getLayout();
99
		formulaireLayout.setLabelAlign(LabelAlign.LEFT);
100
		formulaireLayout.setLabelWidth(300);
806 jpm 101
 
862 jpm 102
		creerFieldsetPrecision();
949 jpm 103
		creerStorePrecision();
862 jpm 104
		creerUniteRangement();
105
		creerUniteBase();
106
		creerFieldsetConservation();
107
		creerFieldsetEtiquette();
108
		creerFieldsetTraitement();
109
		creerFieldsetEtat();
110
 
111
		layout();
112
	}
113
 
114
	private void creerFieldsetPrecision() {
115
		FieldSet precisionFieldSet = new FieldSet();
116
		precisionFieldSet.setHeading("Précision");
117
		precisionFieldSet.setCollapsible(true);
118
		precisionFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
119
 
858 jpm 120
		typesCollectionBotaCombo = new ChampComboBoxListeValeurs(i18nC.typeCollectionBotanique(), "typeCollectionBota");
121
		typesCollectionBotaCombo.setTabIndex(tabIndex++);
862 jpm 122
		precisionFieldSet.add(typesCollectionBotaCombo, new FormData(250, 0));
858 jpm 123
 
124
		nbreEchantillonChp = new NumberField();
125
		nbreEchantillonChp.setFieldLabel(i18nC.nbreEchantillon());
126
		nbreEchantillonChp.setToolTip(i18nC.nbreEchantillonInfo());
127
		nbreEchantillonChp.setFormat(NumberFormat.getFormat("#"));
862 jpm 128
		precisionFieldSet.add(nbreEchantillonChp);
858 jpm 129
 
862 jpm 130
		this.add(precisionFieldSet);
806 jpm 131
	}
132
 
949 jpm 133
	private void creerStorePrecision() {
134
		precisionStore = new ListStore<InterneValeur>();
135
		precisionStore.add(new InterneValeur(UniteRangement.COMPTE_APPROXIMATIF, i18nC.precisionApproximatif()));
136
		precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, i18nC.precisionExact()));
137
	}
138
 
139
	private String getPrecisionNom(String precisionAbr) {
140
		String precision = "";
141
		InterneValeur precisionValeur = precisionStore.findModel("abr", precisionAbr);
142
		if (precisionValeur != null) {
143
			precision = precisionValeur.getNom();
144
		}
145
		return precision;
146
	}
147
 
148
	private String getPrecisionAbr(String precisionNom) {
149
		String precision = "";
150
		InterneValeur precisionValeur = precisionStore.findModel("nom", precisionNom);
151
		if (precisionValeur != null) {
152
			precision = precisionValeur.getAbr();
153
		}
154
		return precision;
155
	}
156
 
157
	private ComboBox<InterneValeur> getChampPrecision() {
158
		ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>();
159
		precisionCombo.setForceSelection(true);
160
		precisionCombo.setTriggerAction(TriggerAction.ALL);
161
		precisionCombo.setDisplayField("nom");
162
		precisionCombo.setStore(precisionStore);
163
		precisionCombo.setEditable(false);
164
		return precisionCombo;
165
	}
166
 
831 jpm 167
	private void creerUniteRangement() {
168
		ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteRangementTitre());
862 jpm 169
 
831 jpm 170
		uniteRangementGrille  = creerGrilleUniteRangement();
858 jpm 171
		mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteRangement");
806 jpm 172
		panneauGrille.add(uniteRangementGrille);
862 jpm 173
 
831 jpm 174
		ToolBar barreOutils = creerBarreOutilsGrilleUniteRangement();
175
		panneauGrille.setTopComponent(barreOutils);
862 jpm 176
 
806 jpm 177
		add(panneauGrille);
178
	}
831 jpm 179
 
180
	private ContentPanel creerPanneauContenantGrille(String titre) {
806 jpm 181
		ContentPanel panneau = new ContentPanel();
831 jpm 182
		panneau.setHeading(titre);
806 jpm 183
		panneau.setIcon(Images.ICONES.table());
184
		panneau.setLayout(new FitLayout());
185
		panneau.setFrame(true);
859 jpm 186
		panneau.setScrollMode(Scroll.AUTO);
862 jpm 187
		panneau.setCollapsible(true);
188
		panneau.setStyleAttribute("margin", "5px 0");
806 jpm 189
 
190
		return panneau;
191
	}
192
 
948 jpm 193
	private EditorGrid<UniteRangement> creerGrilleUniteRangement() {
806 jpm 194
		ListStore<UniteRangement> storeGrille = new ListStore<UniteRangement>();
195
 
196
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
831 jpm 197
		colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
806 jpm 198
 
831 jpm 199
		NumberField champNombre = new NumberField();
200
		champNombre.setFormat(NumberFormat.getFormat("#"));
201
 
202
		ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
948 jpm 203
		nombreColonne.setEditor(new CellEditor(champNombre));
204
		nombreColonne.setNumberFormat(NumberFormat.getFormat("#"));
831 jpm 205
		colonnes.add(nombreColonne);
949 jpm 206
 
207
		CellEditor editeurPrecision = new CellEditor(getChampPrecision()) {
831 jpm 208
			@Override
209
			public Object preProcessValue(Object valeur) {
210
				InterneValeur retour = null;
211
				if (valeur != null ) {
949 jpm 212
					if (precisionStore.findModel("nom", valeur.toString()) != null) {
213
						retour = precisionStore.findModel("nom", valeur.toString());
214
					} else if (precisionStore.findModel("abr", valeur.toString()) != null) {
215
						retour = precisionStore.findModel("abr", valeur.toString());
831 jpm 216
					}
217
				}
218
				return retour;
219
			}
220
 
221
			@Override
222
			public Object postProcessValue(Object valeur) {
223
				String retour = null;
224
				if (valeur != null ) {
225
					if (valeur instanceof InterneValeur) {
226
						InterneValeur valeurInterne = (InterneValeur) valeur;
227
						retour = valeurInterne.getNom();
228
					}
229
				}
230
				return retour;
948 jpm 231
			}
831 jpm 232
		};
233
 
234
		ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
235
		precisionColonne.setEditor(editeurPrecision);
236
		colonnes.add(precisionColonne);
237
 
238
		TextField<String> formatChp = new TextField<String>();
239
		formatChp.setAllowBlank(false);
240
 
241
		ColumnConfig formatColonne =  new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
242
		formatColonne.setEditor(new CellEditor(formatChp));
243
		colonnes.add(formatColonne);
244
 
806 jpm 245
		GridSelectionModel<UniteRangement> modeleDeSelection = new GridSelectionModel<UniteRangement>();
246
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
247
 
948 jpm 248
		AggregationRowConfig<UniteBase> total = new AggregationRowConfig<UniteBase>();
249
		total.setHtml("type", "TOTAL");
250
		total.setSummaryType("nombre", SummaryType.SUM);
251
		total.setSummaryFormat("nombre", NumberFormat.getFormat("#"));
252
		modeleDeColonnes.addAggregationRow(total);
253
 
831 jpm 254
		EditorGrid<UniteRangement> grilleUniteRangement = new EditorGrid<UniteRangement>(storeGrille, modeleDeColonnes);
806 jpm 255
		grilleUniteRangement.setHeight(300);
256
		grilleUniteRangement.setBorders(true);
257
		grilleUniteRangement.setSelectionModel(modeleDeSelection);
258
		grilleUniteRangement.getView().setForceFit(true);
259
		grilleUniteRangement.getView().setAutoFill(true);
260
		grilleUniteRangement.setAutoExpandColumn("type");
261
		grilleUniteRangement.setStripeRows(true);
262
		grilleUniteRangement.setTrackMouseOver(true);
263
 
264
		return grilleUniteRangement;
265
	}
266
 
948 jpm 267
	private String collecterGrilleUniteRangement() {
268
		String truk = "";
269
		int nbreUnite = uniteRangementGrille.getStore().getCount();
270
		for (int i = 0; i < nbreUnite; i++) {
271
			UniteRangement unite = uniteRangementGrille.getStore().getAt(i);
272
			truk += unite.getId()+aDonnee.SEPARATEUR_TYPE_VALEUR;
273
			truk += UtilNombre.formaterEnEntier(unite.getNombre())+aDonnee.SEPARATEUR_DONNEES;
949 jpm 274
			truk += getPrecisionAbr(unite.getPrecision())+aDonnee.SEPARATEUR_DONNEES;
948 jpm 275
			truk += unite.getFormat();
276
			truk += (i == (nbreUnite - 1)) ? "" : aDonnee.SEPARATEUR_VALEURS;
277
		}
278
		return truk;
279
	}
280
 
281
	private void peuplerGrilleUniteRangement(String valeurTruk) {
282
		if (!UtilString.isEmpty(valeurTruk)) {
283
			HashMap<String,UniteRangement> unitesEnregistrees = new HashMap<String,UniteRangement>();
284
			String[] unites = valeurTruk.split(Pattern.quote(aDonnee.SEPARATEUR_VALEURS));
285
			for (int i = 0; i < unites.length; i++) {
286
				String[] uniteTypeIdDonnees = unites[i].split(Pattern.quote(aDonnee.SEPARATEUR_TYPE_VALEUR));
287
				String uniteChaineDonnees = uniteTypeIdDonnees[1];
288
				String[] uniteDonnees = uniteChaineDonnees.split(Pattern.quote(aDonnee.SEPARATEUR_DONNEES));
289
 
290
				UniteRangement uniteRangement = new UniteRangement();
291
				uniteRangement.setId(uniteTypeIdDonnees[0]);
292
				if (uniteDonnees.length > 0) {
949 jpm 293
					uniteRangement.setNombre(UtilString.formaterEnEntier(uniteDonnees[0]));
948 jpm 294
				}
295
				if (uniteDonnees.length > 1) {
949 jpm 296
					uniteRangement.setPrecision(getPrecisionNom(uniteDonnees[1]));
948 jpm 297
				}
298
				if (uniteDonnees.length > 2) {
299
					uniteRangement.setFormat(uniteDonnees[2]);
300
					Debug.log(uniteTypeIdDonnees[0]+"/"+uniteTypeIdDonnees[1]+"/"+uniteDonnees[0]+"-"+uniteDonnees[1]+"-"+uniteDonnees[2]);
301
				}
302
				unitesEnregistrees.put(uniteTypeIdDonnees[0], uniteRangement);
303
			}
304
 
305
			ArrayList<UniteRangement> listeUniteMaj = new ArrayList<UniteRangement>();
306
			int nbreUnite = uniteRangementGrille.getStore().getCount();
307
			for (int i = 0; i < nbreUnite; i++) {
308
				UniteRangement uniteDansGrille = uniteRangementGrille.getStore().getAt(i);
309
				UniteRangement uniteEnregistree = unitesEnregistrees.get(uniteDansGrille.getId());
310
				if (uniteEnregistree != null) {
949 jpm 311
					uniteEnregistree.setType(uniteDansGrille.getType());
948 jpm 312
					listeUniteMaj.add(uniteEnregistree);
313
				} else {
314
					listeUniteMaj.add(uniteDansGrille);
315
				}
316
			}
317
			uniteRangementGrille.getStore().removeAll();
318
			uniteRangementGrille.getStore().add(listeUniteMaj);
319
			layout();
320
		}
321
	}
322
 
831 jpm 323
	private ToolBar creerBarreOutilsGrilleUniteRangement() {
324
		ToolBar barreOutils = new ToolBar();
325
 
326
		Button ajouterBouton = creerBoutonAjouterUniteRangement();
327
		barreOutils.add(ajouterBouton);
328
 
329
		barreOutils.add(new SeparatorToolItem());
330
 
331
		Button supprimerBouton = creerBoutonSupprimerUniteRangement();
862 jpm 332
		barreOutils.add(supprimerBouton);
831 jpm 333
 
862 jpm 334
		barreOutils.add(new SeparatorToolItem());
335
		barreOutils.add(new Text(i18nC.collectionUniteRangementEtatGeneralLabel()));
336
		etatUniteRangementCombo = new ChampComboBoxListeValeurs("", "etat");
337
		etatUniteRangementCombo.setEmptyText(i18nC.collectionUniteRangementEtatGeneral());
338
		etatUniteRangementCombo.setToolTip(i18nC.collectionUniteRangementEtatGeneralInfo());
339
		etatUniteRangementCombo.setTrie("id_valeur");
340
		etatUniteRangementCombo.setWidth(300);
341
		barreOutils.add(etatUniteRangementCombo);
342
 
831 jpm 343
		return barreOutils;
344
	}
345
 
346
	private Button creerBoutonAjouterUniteRangement() {
347
		Button bouton = new Button(i18nC.ajouter());
348
		bouton.setIcon(Images.ICONES.ajouter());
349
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
350
			@Override
351
			public void componentSelected(ButtonEvent ce) {
352
				final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteRangementSaisirType());
353
					box.addCallback(new Listener<MessageBoxEvent>() {
354
					public void handleEvent(MessageBoxEvent be) {
355
						final UniteRangement unite = new UniteRangement();
356
						unite.setType(be.getValue());
357
						unite.setTypeAutre(true);
358
						uniteRangementGrille.getStore().add(unite);
359
					}
360
				});
361
			}
362
		});
363
		return bouton;
364
	}
365
 
366
	private Button creerBoutonSupprimerUniteRangement() {
367
		Button bouton = new Button(i18nC.supprimer());
368
		bouton.setIcon(Images.ICONES.supprimer());
369
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
370
			@Override
371
			public void componentSelected(ButtonEvent ce) {
372
				UniteRangement uniteRangementSelectionnee = uniteRangementGrille.getSelectionModel().getSelectedItem();
373
				if (uniteRangementSelectionnee == null) {
374
					Info.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteRangement()));
375
				} else if (uniteRangementSelectionnee.getTypeAutre() == false) {
376
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteRangementAjoute());
377
				} else {
378
					uniteRangementGrille.getStore().remove(uniteRangementSelectionnee);
379
				}
380
			}
381
		});
382
		return bouton;
383
	}
384
 
385
	private void creerUniteBase() {
386
		ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteBaseTitre());
862 jpm 387
 
831 jpm 388
		uniteBaseGrille  = creerGrilleUniteBase();
858 jpm 389
		mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteBase");
831 jpm 390
		panneauGrille.add(uniteBaseGrille);
862 jpm 391
 
831 jpm 392
		ToolBar barreOutils = creerBarreOutilsGrilleUniteBase();
393
		panneauGrille.setTopComponent(barreOutils);
862 jpm 394
 
831 jpm 395
		add(panneauGrille);
396
	}
949 jpm 397
 
948 jpm 398
	private EditorGrid<UniteBase> creerGrilleUniteBase() {
831 jpm 399
		ListStore<UniteBase> storeGrille = new ListStore<UniteBase>();
400
 
401
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
402
		colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
403
 
404
		NumberField champNombre = new NumberField();
405
		champNombre.setFormat(NumberFormat.getFormat("#"));
406
		CellEditor editeurNombre = new CellEditor(champNombre);
407
 
408
		ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
409
		nombreColonne.setEditor(editeurNombre);
948 jpm 410
		nombreColonne.setNumberFormat(NumberFormat.getFormat("#"));
831 jpm 411
		colonnes.add(nombreColonne);
412
 
949 jpm 413
		CellEditor editeurPrecision = new CellEditor(getChampPrecision()) {
831 jpm 414
			@Override
415
			public Object preProcessValue(Object valeur) {
416
				InterneValeur retour = null;
417
				if (valeur != null ) {
949 jpm 418
					if (precisionStore.findModel("nom", valeur.toString()) != null) {
419
						retour = precisionStore.findModel("nom", valeur.toString());
420
					} else if (precisionStore.findModel("abr", valeur.toString()) != null) {
421
						retour = precisionStore.findModel("abr", valeur.toString());
831 jpm 422
					}
423
				}
424
				return retour;
425
			}
426
 
427
			@Override
428
			public Object postProcessValue(Object valeur) {
429
				String retour = null;
430
				if (valeur != null ) {
431
					if (valeur instanceof InterneValeur) {
432
						InterneValeur valeurInterne = (InterneValeur) valeur;
433
						retour = valeurInterne.getNom();
434
					}
435
				}
436
				return retour;
437
			}
438
		};
439
 
440
		ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
441
		precisionColonne.setEditor(editeurPrecision);
442
		colonnes.add(precisionColonne);
443
 
444
		TextField<String> formatChp = new TextField<String>();
445
		formatChp.setAllowBlank(false);
446
 
447
		ColumnConfig formatColonne =  new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
448
		formatColonne.setEditor(new CellEditor(formatChp));
449
		colonnes.add(formatColonne);
450
 
451
		ColumnConfig partNombreColonne = new ColumnConfig("nombre_part", i18nC.collectionUniteNbre(), 50);
452
		partNombreColonne.setEditor(editeurNombre);
948 jpm 453
		partNombreColonne.setNumberFormat(NumberFormat.getFormat("#"));
831 jpm 454
		colonnes.add(partNombreColonne);
455
 
456
		ColumnConfig partPrecisionColonne = new ColumnConfig("precision_part", i18nC.collectionUnitePrecision(), 50);
457
		partPrecisionColonne.setEditor(editeurPrecision);
458
		colonnes.add(partPrecisionColonne);
459
 
460
		ColumnConfig spNombreColonne = new ColumnConfig("nombre_sp", i18nC.collectionUniteNbre(), 50);
461
		spNombreColonne.setEditor(editeurNombre);
948 jpm 462
		spNombreColonne.setNumberFormat(NumberFormat.getFormat("#"));
831 jpm 463
		colonnes.add(spNombreColonne);
464
 
465
		ColumnConfig spPrecisionColonne = new ColumnConfig("precision_sp", i18nC.collectionUnitePrecision(), 50);
466
		spPrecisionColonne.setEditor(editeurPrecision);
467
		colonnes.add(spPrecisionColonne);
468
 
469
		GridSelectionModel<UniteBase> modeleDeSelection = new GridSelectionModel<UniteBase>();
470
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
471
		modeleDeColonnes.addHeaderGroup(0, 0, new HeaderGroupConfig(i18nC.collectionUniteBase(), 1, 4));
472
		modeleDeColonnes.addHeaderGroup(0, 4, new HeaderGroupConfig(i18nC.collectionUniteBasePart(), 1, 2));
473
		modeleDeColonnes.addHeaderGroup(0, 6, new HeaderGroupConfig(i18nC.collectionUniteBaseSp(), 1, 2));
474
 
475
		AggregationRowConfig<UniteBase> total = new AggregationRowConfig<UniteBase>();
476
		total.setHtml("type", "TOTAL");
477
		total.setSummaryType("nombre", SummaryType.SUM);
478
		total.setSummaryFormat("nombre", NumberFormat.getFormat("#"));
479
		total.setSummaryType("nombre_part", SummaryType.SUM);
480
		total.setSummaryFormat("nombre_part", NumberFormat.getFormat("#"));
481
		total.setSummaryType("nombre_sp", SummaryType.SUM);
482
		total.setSummaryFormat("nombre_sp", NumberFormat.getFormat("#"));
483
		modeleDeColonnes.addAggregationRow(total);
484
 
485
		EditorGrid<UniteBase> grilleUniteBase = new EditorGrid<UniteBase>(storeGrille, modeleDeColonnes);
486
		grilleUniteBase.setHeight(200);
487
		grilleUniteBase.setBorders(true);
488
		grilleUniteBase.setSelectionModel(modeleDeSelection);
489
		grilleUniteBase.getView().setForceFit(true);
490
		grilleUniteBase.getView().setAutoFill(true);
491
		grilleUniteBase.setAutoExpandColumn("type");
492
		grilleUniteBase.setStripeRows(true);
493
		grilleUniteBase.setTrackMouseOver(true);
494
 
495
		return grilleUniteBase;
496
	}
497
 
949 jpm 498
	private String collecterGrilleUniteBase() {
499
		String truk = "";
500
		int nbreUnite = uniteBaseGrille.getStore().getCount();
501
		for (int i = 0; i < nbreUnite; i++) {
502
			UniteBase unite = uniteBaseGrille.getStore().getAt(i);
503
			truk += unite.getId()+aDonnee.SEPARATEUR_TYPE_VALEUR;
504
			truk += UtilNombre.formaterEnEntier(unite.getNombre())+aDonnee.SEPARATEUR_DONNEES;
505
			truk += getPrecisionAbr(unite.getPrecision())+aDonnee.SEPARATEUR_DONNEES;
506
			truk += unite.getFormat()+aDonnee.SEPARATEUR_DONNEES;
507
			truk += UtilNombre.formaterEnEntier(unite.getNombrePart())+aDonnee.SEPARATEUR_DONNEES;
508
			truk += getPrecisionAbr(unite.getPrecisionPart())+aDonnee.SEPARATEUR_DONNEES;
509
			truk += UtilNombre.formaterEnEntier(unite.getNombreSp())+aDonnee.SEPARATEUR_DONNEES;
510
			truk += getPrecisionAbr(unite.getPrecisionSp());
511
			truk += (i == (nbreUnite - 1)) ? "" : aDonnee.SEPARATEUR_VALEURS;
512
		}
513
		return truk;
514
	}
515
 
516
	private void peuplerGrilleUniteBase(String valeurTruk) {
517
		if (!UtilString.isEmpty(valeurTruk)) {
518
			HashMap<String,UniteBase> unitesEnregistrees = new HashMap<String,UniteBase>();
519
			String[] unites = valeurTruk.split(Pattern.quote(aDonnee.SEPARATEUR_VALEURS));
520
			for (int i = 0; i < unites.length; i++) {
521
				String[] uniteTypeIdDonnees = unites[i].split(Pattern.quote(aDonnee.SEPARATEUR_TYPE_VALEUR));
522
				String uniteChaineDonnees = uniteTypeIdDonnees[1];
523
				String[] uniteDonnees = uniteChaineDonnees.split(Pattern.quote(aDonnee.SEPARATEUR_DONNEES));
524
 
525
				UniteBase uniteBase = new UniteBase();
526
				uniteBase.setId(uniteTypeIdDonnees[0]);
527
				if (uniteDonnees.length > 0) {
528
					uniteBase.setNombre(UtilString.formaterEnEntier(uniteDonnees[0]));
529
				}
530
				if (uniteDonnees.length > 1) {
531
					uniteBase.setPrecision(getPrecisionNom(uniteDonnees[1]));
532
				}
533
				if (uniteDonnees.length > 2) {
534
					uniteBase.setFormat(uniteDonnees[2]);
535
				}
536
				if (uniteDonnees.length > 3) {
537
					uniteBase.setNombrePart(UtilString.formaterEnEntier(uniteDonnees[3]));
538
				}
539
				if (uniteDonnees.length > 4) {
540
					uniteBase.setPrecisionPart(getPrecisionNom(uniteDonnees[4]));
541
				}
542
				if (uniteDonnees.length > 5) {
543
					uniteBase.setNombreSp(UtilString.formaterEnEntier(uniteDonnees[5]));
544
				}
545
				if (uniteDonnees.length > 6) {
546
					uniteBase.setPrecisionSp(getPrecisionNom(uniteDonnees[6]));
547
					Debug.log(uniteTypeIdDonnees[0]+"/"+uniteTypeIdDonnees[1]+"/"+uniteDonnees[0]+"-"+uniteDonnees[1]+"-"+uniteDonnees[2]+uniteDonnees[3]+"-"+uniteDonnees[4]+"-"+uniteDonnees[5]);
548
				}
549
				unitesEnregistrees.put(uniteTypeIdDonnees[0], uniteBase);
550
			}
551
 
552
			ArrayList<UniteBase> listeUniteMaj = new ArrayList<UniteBase>();
553
			int nbreUnite = uniteBaseGrille.getStore().getCount();
554
			for (int i = 0; i < nbreUnite; i++) {
555
				UniteBase uniteDansGrille = uniteBaseGrille.getStore().getAt(i);
556
				UniteBase uniteEnregistree = unitesEnregistrees.get(uniteDansGrille.getId());
557
				if (uniteEnregistree != null) {
558
					uniteEnregistree.setType(uniteDansGrille.getType());
559
					listeUniteMaj.add(uniteEnregistree);
560
				} else {
561
					listeUniteMaj.add(uniteDansGrille);
562
				}
563
			}
564
			uniteBaseGrille.getStore().removeAll();
565
			uniteBaseGrille.getStore().add(listeUniteMaj);
566
			layout();
567
		}
568
	}
569
 
831 jpm 570
	private ToolBar creerBarreOutilsGrilleUniteBase() {
571
		ToolBar barreOutils = new ToolBar();
572
 
573
		Button ajouterBouton = creerBoutonAjouterUniteBase();
574
		barreOutils.add(ajouterBouton);
575
 
576
		barreOutils.add(new SeparatorToolItem());
577
 
578
		Button supprimerBouton = creerBoutonSupprimerUniteBase();
579
		barreOutils.add(supprimerBouton);
580
 
581
		return barreOutils;
582
	}
583
 
584
	private Button creerBoutonAjouterUniteBase() {
585
		Button bouton = new Button(i18nC.ajouter());
586
		bouton.setIcon(Images.ICONES.ajouter());
587
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
588
			@Override
589
			public void componentSelected(ButtonEvent ce) {
590
				final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteBaseSaisirType());
591
					box.addCallback(new Listener<MessageBoxEvent>() {
592
					public void handleEvent(MessageBoxEvent be) {
593
						final UniteBase unite = new UniteBase();
594
						unite.setType(be.getValue());
595
						unite.setTypeAutre(true);
596
						uniteBaseGrille.getStore().add(unite);
597
					}
598
				});
599
			}
600
		});
601
		return bouton;
602
	}
603
 
604
	private Button creerBoutonSupprimerUniteBase() {
605
		Button bouton = new Button(i18nC.supprimer());
606
		bouton.setIcon(Images.ICONES.supprimer());
607
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
608
			@Override
609
			public void componentSelected(ButtonEvent ce) {
610
				UniteBase uniteBaseSelectionnee = uniteBaseGrille.getSelectionModel().getSelectedItem();
611
				if (uniteBaseSelectionnee == null) {
612
					Info.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteBase()));
613
				} else if (uniteBaseSelectionnee.getTypeAutre() == false) {
614
					Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteBaseAjoute());
615
				} else {
616
					uniteBaseGrille.getStore().remove(uniteBaseSelectionnee);
617
				}
618
			}
619
		});
620
		return bouton;
621
	}
622
 
862 jpm 623
	private void creerFieldsetConservation() {
624
		FieldSet conservationFieldSet = new FieldSet();
625
		conservationFieldSet.setHeading("Conservation");
626
		conservationFieldSet.setCollapsible(true);
627
		conservationFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
628
 
629
		typePapierConservationChp = new ChampCaseACocher(i18nC.typePapierConservation(), "typePapier", true);
630
		conservationFieldSet.add(typePapierConservationChp);
631
 
632
		methodeConservationChp = new ChampCaseACocher(i18nC.methodeConservation(), "methodeRangement", true);
633
		conservationFieldSet.add(methodeConservationChp);
634
 
635
		this.add(conservationFieldSet);
636
	}
637
 
638
	private void creerFieldsetEtiquette() {
639
		FieldSet etiquetteFieldSet = new FieldSet();
640
		etiquetteFieldSet.setHeading("Conservation");
641
		etiquetteFieldSet.setCollapsible(true);
642
		etiquetteFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
643
 
644
		Text fixationPoucentLabel = new Text(i18nC.fixationPourcent());
645
		etiquetteFieldSet.add(fixationPoucentLabel);
646
 
647
		specimenFixationPourcentChp = new ChampSliderPourcentage(i18nC.specimenFixationPourcent());
648
		etiquetteFieldSet.add(specimenFixationPourcentChp, new FormData(200, 0));
649
 
650
		etiquetteFixationPourcentChp = new ChampSliderPourcentage(i18nC.etiquetteFixationPourcent());
651
		etiquetteFieldSet.add(etiquetteFixationPourcentChp, new FormData(200, 0));
652
 
653
		specimentMethodeFixationChp = new ChampCaseACocher(i18nC.specimenMethodeFixation(), "methodeFixation", true);
654
		etiquetteFieldSet.add(specimentMethodeFixationChp);
655
 
656
		etiquetteMethodeFixationSurSupportChp = new ChampCaseACocher(i18nC.etiquetteMethodeFixationSurSupport(), "methodeFixation", true);
657
		etiquetteFieldSet.add(etiquetteMethodeFixationSurSupportChp);
658
 
659
		etiquetteMethodeFixationSurSpecimenChp = new ChampCaseACocher(i18nC.etiquetteMethodeFixationSurSpecimen(), "methodeFixationSurSpecimen", true);
660
		etiquetteFieldSet.add(etiquetteMethodeFixationSurSpecimenChp);
661
 
662
		typeEcritureChp = new ChampCaseACocher(i18nC.typeEcriture(), "typeEcriture", false);
663
		etiquetteFieldSet.add(typeEcritureChp);
664
 
665
		this.add(etiquetteFieldSet);
666
	}
667
 
668
	private void creerFieldsetTraitement() {
669
		FieldSet traitementFieldSet = new FieldSet();
670
		traitementFieldSet.setHeading("Traitements");
671
		traitementFieldSet.setCollapsible(true);
672
		traitementFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
673
 
674
		traitementCombo  = new ChampComboBoxListeValeurs(i18nC.collectionTraitement(), "onpi");
675
		traitementCombo.setTrie("id_valeur");
676
		traitementFieldSet.add(traitementCombo, new FormData(300, 0));
677
 
678
		poisonTraitementChp = new ChampCaseACocher(i18nC.collectionTraitementPoison(), "poisonTraitement", true);
679
		traitementFieldSet.add(poisonTraitementChp);
680
 
681
		insecteTraitementChp = new ChampCaseACocher(i18nC.collectionTraitementInsecte(), "insecteTraitement", true);
682
		traitementFieldSet.add(insecteTraitementChp);
683
 
684
		this.add(traitementFieldSet);
685
	}
686
 
687
	private void creerFieldsetEtat() {
688
		FieldSet etatFieldSet = new FieldSet();
689
		etatFieldSet.setHeading("État général et dégradation");
690
		etatFieldSet.setCollapsible(true);
691
		etatFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
692
 
693
		etatGeneralCombo = new ChampComboBoxListeValeurs(i18nC.collectionEtatGeneral(), "etat");
694
		etatGeneralCombo.setToolTip(i18nC.collectionEtatGeneralInfo());
695
		etatGeneralCombo.setTrie("id_valeur");
696
		etatFieldSet.add(etatGeneralCombo, new FormData(300, 0));
697
 
698
		specimenDegradationChp = new ChampMultiValeursMultiTypes(i18nC.degradationSpecimen(), 150, true);
699
		specimenDegradationChp.initialiserType("specimenDegradation");
700
		specimenDegradationChp.initialiserCombobox("niveauImportance");
701
		etatFieldSet.add(specimenDegradationChp);
702
 
703
		presentationDegradationChp = new ChampMultiValeursMultiTypes(i18nC.degradationPresentation(), 150, 200, true);
704
		presentationDegradationChp.initialiserType("supportDegradation");
705
		presentationDegradationChp.initialiserCombobox("niveauImportance");
706
		etatFieldSet.add(presentationDegradationChp);
707
 
708
		determinationCombo = new ChampComboBoxListeValeurs(i18nC.collectionDetermination(), "niveauDetermination");
709
		determinationCombo.setTrie("id_valeur");
710
		etatFieldSet.add(determinationCombo, new FormData(450, 0));
711
 
712
		this.add(etatFieldSet);
713
	}
714
 
948 jpm 715
	public void peupler() {
716
		initialiserCollection();
717
		if (collectionBotanique != null) {
718
			typesCollectionBotaCombo.peupler(collectionBotanique.getType());
719
			if (!UtilString.isEmpty(collectionBotanique.getNbreEchantillon())) {
720
				nbreEchantillonChp.setValue(Integer.parseInt(collectionBotanique.getNbreEchantillon()));
721
			}
722
			peuplerGrilleUniteRangement(collectionBotanique.getUniteRangement());
949 jpm 723
			peuplerGrilleUniteBase(collectionBotanique.getUniteBase());
948 jpm 724
		}
725
	}
726
 
727
	public void collecter() {
728
		initialiserCollection();
729
		if (etreAccede()) {
730
			collectionBotaniqueCollectee.setType(typesCollectionBotaCombo.getValeur());
731
			collectionBotaniqueCollectee.setNbreEchantillon(Integer.toString(nbreEchantillonChp.getValue().intValue()));
732
			collectionBotaniqueCollectee.setUniteRangement(collecterGrilleUniteRangement());
949 jpm 733
			collectionBotaniqueCollectee.setUniteBase(collecterGrilleUniteBase());
734
			Debug.log(collecterGrilleUniteBase());
948 jpm 735
		}
736
	}
737
 
738
	private void initialiserCollection() {
739
		collection = ((CollectionForm) formulaire).collection;
740
		if (collection != null) {
741
			collectionBotanique = collection.getBotanique();
742
		}
743
 
744
		collectionCollectee = ((CollectionForm) formulaire).collectionCollectee;
745
		if (collectionCollectee != null) {
746
			collectionBotaniqueCollectee = collectionCollectee.getBotanique();
747
		}
748
	}
749
 
806 jpm 750
	public void rafraichir(Object nouvellesDonnees) {
751
		if (nouvellesDonnees instanceof ValeurListe) {
752
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
753
			rafraichirValeurListe(listeValeurs);
754
		} else {
755
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
756
		}
757
	}
758
 
759
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
858 jpm 760
		if (listeValeurs.getId().equals(config.getListeId("typeCollectionBota"))) {
761
			Formulaire.rafraichirComboBox(listeValeurs, typesCollectionBotaCombo);
762
		} else if (listeValeurs.getId().equals(config.getListeId("typeUniteRangement"))) {
806 jpm 763
			Iterator<String> it = listeValeurs.keySet().iterator();
764
			while (it.hasNext()) {
765
				Valeur valeur = listeValeurs.get(it.next());
766
				UniteRangement unite = new UniteRangement();
948 jpm 767
				unite.setId(valeur.getId());
806 jpm 768
				unite.setType(valeur.getNom());
831 jpm 769
				unite.setTypeAutre(false);
806 jpm 770
				uniteRangementGrille.getStore().add(unite);
771
			}
831 jpm 772
		} else if (listeValeurs.getId().equals(config.getListeId("typeUniteBase"))) {
773
			Iterator<String> it = listeValeurs.keySet().iterator();
774
			while (it.hasNext()) {
775
				Valeur valeur = listeValeurs.get(it.next());
776
				UniteBase unite = new UniteBase();
948 jpm 777
				unite.setId(valeur.getId());
831 jpm 778
				unite.setType(valeur.getNom());
779
				unite.setTypeAutre(false);
780
				uniteBaseGrille.getStore().add(unite);
781
			}
806 jpm 782
		} else {
783
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
784
		}
785
	}
786
}