Subversion Repositories eFlore/Applications.coel

Rev

Rev 1898 | Rev 1920 | 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;
1239 cyprien 13
import org.tela_botanica.client.composants.InfoLogger;
1619 aurelien 14
import org.tela_botanica.client.composants.ChampNombre;
806 jpm 15
import org.tela_botanica.client.images.Images;
16
import org.tela_botanica.client.interfaces.Rafraichissable;
831 jpm 17
import org.tela_botanica.client.modeles.InterneValeur;
806 jpm 18
import org.tela_botanica.client.modeles.Valeur;
19
import org.tela_botanica.client.modeles.ValeurListe;
948 jpm 20
import org.tela_botanica.client.modeles.aDonnee;
21
import org.tela_botanica.client.modeles.collection.Collection;
22
import org.tela_botanica.client.modeles.collection.CollectionBotanique;
949 jpm 23
import org.tela_botanica.client.modeles.collection.UniteBase;
24
import org.tela_botanica.client.modeles.collection.UniteRangement;
948 jpm 25
import org.tela_botanica.client.util.Debug;
26
import org.tela_botanica.client.util.Pattern;
27
import org.tela_botanica.client.util.UtilNombre;
28
import org.tela_botanica.client.util.UtilString;
934 jpm 29
import org.tela_botanica.client.vues.Formulaire;
30
import org.tela_botanica.client.vues.FormulaireOnglet;
806 jpm 31
 
859 jpm 32
import com.extjs.gxt.ui.client.Style.Scroll;
1262 cyprien 33
import com.extjs.gxt.ui.client.event.BaseEvent;
831 jpm 34
import com.extjs.gxt.ui.client.event.ButtonEvent;
1262 cyprien 35
import com.extjs.gxt.ui.client.event.ComponentEvent;
36
import com.extjs.gxt.ui.client.event.Events;
37
import com.extjs.gxt.ui.client.event.FieldEvent;
806 jpm 38
import com.extjs.gxt.ui.client.event.Listener;
831 jpm 39
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
40
import com.extjs.gxt.ui.client.event.SelectionListener;
806 jpm 41
import com.extjs.gxt.ui.client.store.ListStore;
42
import com.extjs.gxt.ui.client.widget.ContentPanel;
831 jpm 43
import com.extjs.gxt.ui.client.widget.Info;
44
import com.extjs.gxt.ui.client.widget.MessageBox;
839 jpm 45
import com.extjs.gxt.ui.client.widget.Text;
831 jpm 46
import com.extjs.gxt.ui.client.widget.button.Button;
47
import com.extjs.gxt.ui.client.widget.form.ComboBox;
862 jpm 48
import com.extjs.gxt.ui.client.widget.form.FieldSet;
1262 cyprien 49
import com.extjs.gxt.ui.client.widget.form.LabelField;
831 jpm 50
import com.extjs.gxt.ui.client.widget.form.NumberField;
1262 cyprien 51
import com.extjs.gxt.ui.client.widget.form.TextArea;
831 jpm 52
import com.extjs.gxt.ui.client.widget.form.TextField;
53
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
54
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
55
import com.extjs.gxt.ui.client.widget.grid.AggregationRowConfig;
56
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
806 jpm 57
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
1468 jpm 58
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
806 jpm 59
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
831 jpm 60
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
1468 jpm 61
import com.extjs.gxt.ui.client.widget.grid.Grid;
62
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
806 jpm 63
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
831 jpm 64
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig;
65
import com.extjs.gxt.ui.client.widget.grid.SummaryType;
806 jpm 66
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
831 jpm 67
import com.extjs.gxt.ui.client.widget.layout.FormData;
68
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
69
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
70
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
1618 aurelien 71
import com.google.gwt.event.dom.client.KeyCodes;
831 jpm 72
import com.google.gwt.i18n.client.NumberFormat;
806 jpm 73
 
74
public class CollectionFormDescription extends FormulaireOnglet implements Rafraichissable {
75
 
1083 jpm 76
	public static final String ID = "description";
948 jpm 77
	private Collection collection = null;
78
	private CollectionBotanique collectionBotanique = null;
79
	private Collection collectionCollectee = null;
80
	private CollectionBotanique collectionBotaniqueCollectee = null;
81
 
960 jpm 82
	private static ListStore<InterneValeur> precisionStore = null;
858 jpm 83
	private ChampComboBoxListeValeurs typesCollectionBotaCombo = null;
84
	private NumberField nbreEchantillonChp = null;
948 jpm 85
	private EditorGrid<UniteRangement> uniteRangementGrille = null;
854 jpm 86
	private ChampComboBoxListeValeurs etatUniteRangementCombo = null;
948 jpm 87
	private EditorGrid<UniteBase> uniteBaseGrille = null;
839 jpm 88
	private ChampCaseACocher typePapierConservationChp = null;
89
	private ChampCaseACocher methodeConservationChp = null;
858 jpm 90
	private ChampSliderPourcentage specimenFixationPourcentChp = null;
91
	private ChampSliderPourcentage etiquetteFixationPourcentChp = null;
854 jpm 92
	private ChampCaseACocher specimentMethodeFixationChp = null;
93
	private ChampCaseACocher etiquetteMethodeFixationSurSupportChp = null;
94
	private ChampCaseACocher etiquetteMethodeFixationSurSpecimenChp = null;
95
	private ChampCaseACocher typeEcritureChp = null;
96
	private ChampComboBoxListeValeurs traitementCombo = null;
97
	private ChampCaseACocher poisonTraitementChp = null;
98
	private ChampCaseACocher insecteTraitementChp = null;
99
	private ChampComboBoxListeValeurs etatGeneralCombo = null;
100
	private ChampComboBoxListeValeurs determinationCombo = null;
857 jpm 101
	private ChampMultiValeursMultiTypes specimenDegradationChp = null;
102
	private ChampMultiValeursMultiTypes presentationDegradationChp = null;
1262 cyprien 103
	private Text labelPresentationDegradationChp = null;
1918 aurelien 104
	private ChampNombre planchesHerbier = null;
105
	private ChampNombre nbEspeces = null;
955 jpm 106
 
806 jpm 107
	public CollectionFormDescription(Formulaire formulaireCourrant) {
108
		initialiserOnglet(formulaireCourrant);
1083 jpm 109
		setId(ID);
806 jpm 110
		setText(Mediateur.i18nC.collectionDescription());
831 jpm 111
 
112
		FormLayout formulaireLayout = (FormLayout) this.getLayout();
113
		formulaireLayout.setLabelAlign(LabelAlign.LEFT);
114
		formulaireLayout.setLabelWidth(300);
806 jpm 115
 
1898 aurelien 116
		creerFieldsetTypesUniteEtat();
117
 
118
		creerFieldsetConservation(); // Papier
119
 
120
		creerFieldsetEtiquette(); // RAS
121
		creerFieldsetTraitement(); // RAS
122
 
123
		creerFieldsetPrecision(); // A supprimer ou déplacer plus tard
949 jpm 124
		creerStorePrecision();
862 jpm 125
 
126
		layout();
127
	}
128
 
129
	private void creerFieldsetPrecision() {
130
		FieldSet precisionFieldSet = new FieldSet();
1680 raphael 131
		precisionFieldSet.setHeadingHtml(i18nC.collectionTitrePrecision());
862 jpm 132
		precisionFieldSet.setCollapsible(true);
1898 aurelien 133
		precisionFieldSet.collapse();
862 jpm 134
		precisionFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
135
 
858 jpm 136
		typesCollectionBotaCombo = new ChampComboBoxListeValeurs(i18nC.typeCollectionBotanique(), "typeCollectionBota");
137
		typesCollectionBotaCombo.setTabIndex(tabIndex++);
862 jpm 138
		precisionFieldSet.add(typesCollectionBotaCombo, new FormData(250, 0));
858 jpm 139
 
140
		nbreEchantillonChp = new NumberField();
141
		nbreEchantillonChp.setFieldLabel(i18nC.nbreEchantillon());
142
		nbreEchantillonChp.setToolTip(i18nC.nbreEchantillonInfo());
143
		nbreEchantillonChp.setFormat(NumberFormat.getFormat("#"));
862 jpm 144
		precisionFieldSet.add(nbreEchantillonChp);
858 jpm 145
 
862 jpm 146
		this.add(precisionFieldSet);
806 jpm 147
	}
148
 
960 jpm 149
	private static void creerStorePrecision() {
150
		if (precisionStore == null) {
151
			precisionStore = new ListStore<InterneValeur>();
152
			precisionStore.add(new InterneValeur(UniteRangement.COMPTE_APPROXIMATIF, Mediateur.i18nC.precisionApproximatif()));
153
			precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, Mediateur.i18nC.precisionExact()));
154
		}
949 jpm 155
	}
156
 
960 jpm 157
	private static String getPrecisionNom(String precisionAbr) {
949 jpm 158
		String precision = "";
956 jpm 159
		if (!precisionAbr.equals("NULL")) {
960 jpm 160
			creerStorePrecision();
956 jpm 161
			InterneValeur precisionValeur = precisionStore.findModel("abr", precisionAbr);
162
			if (precisionValeur != null && !precisionValeur.getNom().equals("NULL")) {
163
				precision = precisionValeur.getNom();
164
			}
949 jpm 165
		}
166
		return precision;
167
	}
168
 
960 jpm 169
	private static String getPrecisionAbr(String precisionNom) {
949 jpm 170
		String precision = "";
956 jpm 171
		if (!precisionNom.equals("NULL")) {
960 jpm 172
			creerStorePrecision();
956 jpm 173
			InterneValeur precisionValeur = precisionStore.findModel("nom", precisionNom);
174
			if (precisionValeur != null) {
175
				precision = precisionValeur.getAbr();
176
			}
949 jpm 177
		}
178
		return precision;
179
	}
180
 
181
	private ComboBox<InterneValeur> getChampPrecision() {
182
		ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>();
183
		precisionCombo.setForceSelection(true);
184
		precisionCombo.setTriggerAction(TriggerAction.ALL);
185
		precisionCombo.setDisplayField("nom");
186
		precisionCombo.setStore(precisionStore);
187
		precisionCombo.setEditable(false);
188
		return precisionCombo;
189
	}
190
 
1618 aurelien 191
	/**
192
	* La classe NumberField est sujette à un bug qui empeche son
193
	* édition dans firefox, il faut donc la surcharger
194
	**/
1619 aurelien 195
	private NumberField creerChampNombre() {
196
		ChampNombre champNombre = new ChampNombre();
1618 aurelien 197
		return champNombre;
198
	}
1468 jpm 199
 
200
	private ContentPanel creerUniteRangement() {
831 jpm 201
		ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteRangementTitre());
862 jpm 202
 
831 jpm 203
		uniteRangementGrille  = creerGrilleUniteRangement();
1322 gduche 204
		mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteRangement", null);
806 jpm 205
		panneauGrille.add(uniteRangementGrille);
862 jpm 206
 
831 jpm 207
		ToolBar barreOutils = creerBarreOutilsGrilleUniteRangement();
208
		panneauGrille.setTopComponent(barreOutils);
862 jpm 209
 
1468 jpm 210
		return panneauGrille;
806 jpm 211
	}
831 jpm 212
 
213
	private ContentPanel creerPanneauContenantGrille(String titre) {
806 jpm 214
		ContentPanel panneau = new ContentPanel();
1680 raphael 215
		panneau.setHeadingHtml(titre);
806 jpm 216
		panneau.setIcon(Images.ICONES.table());
217
		panneau.setLayout(new FitLayout());
218
		panneau.setFrame(true);
1468 jpm 219
		panneau.setSize(800, 200);
220
		panneau.setScrollMode(Scroll.NONE);
862 jpm 221
		panneau.setCollapsible(true);
222
		panneau.setStyleAttribute("margin", "5px 0");
806 jpm 223
 
224
		return panneau;
225
	}
226
 
948 jpm 227
	private EditorGrid<UniteRangement> creerGrilleUniteRangement() {
806 jpm 228
		ListStore<UniteRangement> storeGrille = new ListStore<UniteRangement>();
229
 
230
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
831 jpm 231
		colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
806 jpm 232
 
1619 aurelien 233
		NumberField champNombre = creerChampNombre();
831 jpm 234
		champNombre.setFormat(NumberFormat.getFormat("#"));
235
		ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
948 jpm 236
		nombreColonne.setEditor(new CellEditor(champNombre));
237
		nombreColonne.setNumberFormat(NumberFormat.getFormat("#"));
831 jpm 238
		colonnes.add(nombreColonne);
949 jpm 239
 
240
		CellEditor editeurPrecision = new CellEditor(getChampPrecision()) {
831 jpm 241
			@Override
242
			public Object preProcessValue(Object valeur) {
243
				InterneValeur retour = null;
244
				if (valeur != null ) {
949 jpm 245
					if (precisionStore.findModel("nom", valeur.toString()) != null) {
246
						retour = precisionStore.findModel("nom", valeur.toString());
247
					} else if (precisionStore.findModel("abr", valeur.toString()) != null) {
248
						retour = precisionStore.findModel("abr", valeur.toString());
831 jpm 249
					}
250
				}
251
				return retour;
252
			}
253
 
254
			@Override
255
			public Object postProcessValue(Object valeur) {
256
				String retour = null;
257
				if (valeur != null ) {
258
					if (valeur instanceof InterneValeur) {
259
						InterneValeur valeurInterne = (InterneValeur) valeur;
260
						retour = valeurInterne.getNom();
261
					}
262
				}
263
				return retour;
948 jpm 264
			}
831 jpm 265
		};
266
 
267
		ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
268
		precisionColonne.setEditor(editeurPrecision);
269
		colonnes.add(precisionColonne);
270
 
271
		TextField<String> formatChp = new TextField<String>();
272
		ColumnConfig formatColonne =  new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
273
		formatColonne.setEditor(new CellEditor(formatChp));
274
		colonnes.add(formatColonne);
275
 
806 jpm 276
		GridSelectionModel<UniteRangement> modeleDeSelection = new GridSelectionModel<UniteRangement>();
277
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
278
 
948 jpm 279
		AggregationRowConfig<UniteBase> total = new AggregationRowConfig<UniteBase>();
954 jpm 280
		total.setHtml("type", i18nC.total());
948 jpm 281
		total.setSummaryType("nombre", SummaryType.SUM);
282
		total.setSummaryFormat("nombre", NumberFormat.getFormat("#"));
283
		modeleDeColonnes.addAggregationRow(total);
284
 
831 jpm 285
		EditorGrid<UniteRangement> grilleUniteRangement = new EditorGrid<UniteRangement>(storeGrille, modeleDeColonnes);
806 jpm 286
		grilleUniteRangement.setHeight(300);
287
		grilleUniteRangement.setBorders(true);
288
		grilleUniteRangement.setSelectionModel(modeleDeSelection);
289
		grilleUniteRangement.getView().setForceFit(true);
290
		grilleUniteRangement.getView().setAutoFill(true);
291
		grilleUniteRangement.setAutoExpandColumn("type");
292
		grilleUniteRangement.setStripeRows(true);
293
		grilleUniteRangement.setTrackMouseOver(true);
294
 
295
		return grilleUniteRangement;
296
	}
297
 
948 jpm 298
	private String collecterGrilleUniteRangement() {
299
		String truk = "";
300
		int nbreUnite = uniteRangementGrille.getStore().getCount();
301
		for (int i = 0; i < nbreUnite; i++) {
302
			UniteRangement unite = uniteRangementGrille.getStore().getAt(i);
956 jpm 303
			if (unite.getTypeAutre()) {
304
				truk += unite.getType();
305
			} else {
306
				truk += unite.getId();
307
			}
308
			truk += aDonnee.SEPARATEUR_TYPE_VALEUR;
948 jpm 309
			truk += UtilNombre.formaterEnEntier(unite.getNombre())+aDonnee.SEPARATEUR_DONNEES;
949 jpm 310
			truk += getPrecisionAbr(unite.getPrecision())+aDonnee.SEPARATEUR_DONNEES;
948 jpm 311
			truk += unite.getFormat();
312
			truk += (i == (nbreUnite - 1)) ? "" : aDonnee.SEPARATEUR_VALEURS;
1369 cyprien 313
 
314
			if (truk.matches("^"+aDonnee.SEPARATEUR_DONNEES)) {
315
				truk = truk.replaceFirst("^"+aDonnee.SEPARATEUR_DONNEES, "");
316
			}
317
 
318
			if (truk.matches("^"+aDonnee.SEPARATEUR_TYPE_VALEUR)) {
319
				truk = truk.replaceFirst("^"+aDonnee.SEPARATEUR_TYPE_VALEUR, "");
320
			}
948 jpm 321
		}
322
		return truk;
323
	}
324
 
325
	private void peuplerGrilleUniteRangement(String valeurTruk) {
326
		if (!UtilString.isEmpty(valeurTruk)) {
960 jpm 327
			HashMap<String,UniteRangement> unitesEnregistrees = parserValeurUniteRangement(valeurTruk);
328
 
329
			ArrayList<UniteRangement> listeUniteMaj = new ArrayList<UniteRangement>();
330
			int nbreUnite = uniteRangementGrille.getStore().getCount();
331
			for (int i = 0; i < nbreUnite; i++) {
332
				UniteRangement uniteDansGrille = uniteRangementGrille.getStore().getAt(i);
333
				UniteRangement uniteEnregistree = unitesEnregistrees.get(uniteDansGrille.getId());
1468 jpm 334
 
960 jpm 335
				if (uniteEnregistree != null) {
336
					uniteEnregistree.setType(uniteDansGrille.getType());
337
					listeUniteMaj.add(uniteEnregistree);
338
				} else {
339
					listeUniteMaj.add(uniteDansGrille);
340
				}
341
			}
342
 
343
			Iterator<String> it = unitesEnregistrees.keySet().iterator();
344
			while (it.hasNext()) {
345
				String cle = it.next();
1468 jpm 346
				if (cle.matches(aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR+"[a-zA-Z0-9]+")) {
960 jpm 347
					UniteRangement uniteAutreEnregistree = unitesEnregistrees.get(cle);
348
					listeUniteMaj.add(uniteAutreEnregistree);
349
				}
350
			}
351
 
352
			uniteRangementGrille.getStore().removeAll();
353
			uniteRangementGrille.getStore().add(listeUniteMaj);
354
			layout();
355
		}
356
	}
357
 
358
	public static HashMap<String,UniteRangement> parserValeurUniteRangement(String valeurTruk) {
359
		HashMap<String,UniteRangement> unitesEnregistrees = new HashMap<String,UniteRangement>();
360
		if (!UtilString.isEmpty(valeurTruk)) {
948 jpm 361
			String[] unites = valeurTruk.split(Pattern.quote(aDonnee.SEPARATEUR_VALEURS));
362
			for (int i = 0; i < unites.length; i++) {
363
				String[] uniteTypeIdDonnees = unites[i].split(Pattern.quote(aDonnee.SEPARATEUR_TYPE_VALEUR));
364
				String uniteChaineDonnees = uniteTypeIdDonnees[1];
365
				String[] uniteDonnees = uniteChaineDonnees.split(Pattern.quote(aDonnee.SEPARATEUR_DONNEES));
366
 
367
				UniteRangement uniteRangement = new UniteRangement();
368
				if (uniteDonnees.length > 0) {
949 jpm 369
					uniteRangement.setNombre(UtilString.formaterEnEntier(uniteDonnees[0]));
948 jpm 370
				}
371
				if (uniteDonnees.length > 1) {
949 jpm 372
					uniteRangement.setPrecision(getPrecisionNom(uniteDonnees[1]));
948 jpm 373
				}
374
				if (uniteDonnees.length > 2) {
375
					uniteRangement.setFormat(uniteDonnees[2]);
376
				}
956 jpm 377
 
378
				if (uniteTypeIdDonnees[0].matches("[0-9]+")) {
379
					uniteRangement.setId(uniteTypeIdDonnees[0]);
380
					uniteRangement.setTypeAutre(false);
381
					unitesEnregistrees.put(uniteTypeIdDonnees[0], uniteRangement);
1468 jpm 382
				} else {
956 jpm 383
					uniteRangement.setType(uniteTypeIdDonnees[0]);
384
					uniteRangement.setTypeAutre(true);
960 jpm 385
					String id = aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR+uniteTypeIdDonnees[0]+"-"+i;
1262 cyprien 386
					uniteRangement.setId(id);
1468 jpm 387
					unitesEnregistrees.put(aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR+uniteTypeIdDonnees[0], uniteRangement);
956 jpm 388
				}
948 jpm 389
			}
390
		}
960 jpm 391
		return unitesEnregistrees;
948 jpm 392
	}
393
 
831 jpm 394
	private ToolBar creerBarreOutilsGrilleUniteRangement() {
395
		ToolBar barreOutils = new ToolBar();
396
 
397
		Button ajouterBouton = creerBoutonAjouterUniteRangement();
398
		barreOutils.add(ajouterBouton);
399
 
400
		barreOutils.add(new SeparatorToolItem());
401
 
402
		Button supprimerBouton = creerBoutonSupprimerUniteRangement();
862 jpm 403
		barreOutils.add(supprimerBouton);
1468 jpm 404
 
831 jpm 405
		return barreOutils;
406
	}
407
 
408
	private Button creerBoutonAjouterUniteRangement() {
409
		Button bouton = new Button(i18nC.ajouter());
410
		bouton.setIcon(Images.ICONES.ajouter());
411
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
412
			@Override
413
			public void componentSelected(ButtonEvent ce) {
414
				final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteRangementSaisirType());
415
					box.addCallback(new Listener<MessageBoxEvent>() {
416
					public void handleEvent(MessageBoxEvent be) {
956 jpm 417
						if (!UtilString.isEmpty(be.getValue()) && !be.getValue().matches("[0-9]+")) {
418
							final UniteRangement unite = new UniteRangement();
419
							unite.setType(be.getValue());
420
							unite.setTypeAutre(true);
421
							uniteRangementGrille.getStore().add(unite);
422
						} else {
1239 cyprien 423
							InfoLogger.display("Information", "Vous ne pouvez pas saisir de valeur vide ou numérique");
956 jpm 424
						}
831 jpm 425
					}
426
				});
427
			}
428
		});
429
		return bouton;
430
	}
431
 
432
	private Button creerBoutonSupprimerUniteRangement() {
433
		Button bouton = new Button(i18nC.supprimer());
434
		bouton.setIcon(Images.ICONES.supprimer());
435
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
436
			@Override
437
			public void componentSelected(ButtonEvent ce) {
438
				UniteRangement uniteRangementSelectionnee = uniteRangementGrille.getSelectionModel().getSelectedItem();
439
				if (uniteRangementSelectionnee == null) {
1239 cyprien 440
					InfoLogger.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteRangement()));
831 jpm 441
				} else if (uniteRangementSelectionnee.getTypeAutre() == false) {
1239 cyprien 442
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteRangementAjoute());
831 jpm 443
				} else {
444
					uniteRangementGrille.getStore().remove(uniteRangementSelectionnee);
445
				}
446
			}
447
		});
448
		return bouton;
449
	}
450
 
862 jpm 451
	private void creerFieldsetConservation() {
452
		FieldSet conservationFieldSet = new FieldSet();
1680 raphael 453
		conservationFieldSet.setHeadingHtml(i18nC.collectionTitreConservation());
862 jpm 454
		conservationFieldSet.setCollapsible(true);
1898 aurelien 455
		conservationFieldSet.collapse();
862 jpm 456
		conservationFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
457
 
458
		typePapierConservationChp = new ChampCaseACocher(i18nC.typePapierConservation(), "typePapier", true);
459
		conservationFieldSet.add(typePapierConservationChp);
460
 
461
		methodeConservationChp = new ChampCaseACocher(i18nC.methodeConservation(), "methodeRangement", true);
462
		conservationFieldSet.add(methodeConservationChp);
463
 
464
		this.add(conservationFieldSet);
465
	}
466
 
467
	private void creerFieldsetEtiquette() {
468
		FieldSet etiquetteFieldSet = new FieldSet();
1680 raphael 469
		etiquetteFieldSet.setHeadingHtml(i18nC.collectionTitreEtiquette());
862 jpm 470
		etiquetteFieldSet.setCollapsible(true);
1898 aurelien 471
		etiquetteFieldSet.collapse();
862 jpm 472
		etiquetteFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
473
 
474
		Text fixationPoucentLabel = new Text(i18nC.fixationPourcent());
475
		etiquetteFieldSet.add(fixationPoucentLabel);
476
 
477
		specimenFixationPourcentChp = new ChampSliderPourcentage(i18nC.specimenFixationPourcent());
478
		etiquetteFieldSet.add(specimenFixationPourcentChp, new FormData(200, 0));
479
 
480
		etiquetteFixationPourcentChp = new ChampSliderPourcentage(i18nC.etiquetteFixationPourcent());
481
		etiquetteFieldSet.add(etiquetteFixationPourcentChp, new FormData(200, 0));
482
 
483
		specimentMethodeFixationChp = new ChampCaseACocher(i18nC.specimenMethodeFixation(), "methodeFixation", true);
484
		etiquetteFieldSet.add(specimentMethodeFixationChp);
485
 
486
		etiquetteMethodeFixationSurSupportChp = new ChampCaseACocher(i18nC.etiquetteMethodeFixationSurSupport(), "methodeFixation", true);
487
		etiquetteFieldSet.add(etiquetteMethodeFixationSurSupportChp);
488
 
489
		etiquetteMethodeFixationSurSpecimenChp = new ChampCaseACocher(i18nC.etiquetteMethodeFixationSurSpecimen(), "methodeFixationSurSpecimen", true);
490
		etiquetteFieldSet.add(etiquetteMethodeFixationSurSpecimenChp);
491
 
492
		typeEcritureChp = new ChampCaseACocher(i18nC.typeEcriture(), "typeEcriture", false);
493
		etiquetteFieldSet.add(typeEcritureChp);
494
 
495
		this.add(etiquetteFieldSet);
496
	}
497
 
498
	private void creerFieldsetTraitement() {
499
		FieldSet traitementFieldSet = new FieldSet();
1680 raphael 500
		traitementFieldSet.setHeadingHtml(i18nC.collectionTitreTraitement());
862 jpm 501
		traitementFieldSet.setCollapsible(true);
1898 aurelien 502
		traitementFieldSet.collapse();
862 jpm 503
		traitementFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
504
 
505
		traitementCombo  = new ChampComboBoxListeValeurs(i18nC.collectionTraitement(), "onpi");
506
		traitementCombo.setTrie("id_valeur");
507
		traitementFieldSet.add(traitementCombo, new FormData(300, 0));
508
 
509
		poisonTraitementChp = new ChampCaseACocher(i18nC.collectionTraitementPoison(), "poisonTraitement", true);
510
		traitementFieldSet.add(poisonTraitementChp);
511
 
512
		insecteTraitementChp = new ChampCaseACocher(i18nC.collectionTraitementInsecte(), "insecteTraitement", true);
513
		traitementFieldSet.add(insecteTraitementChp);
514
 
515
		this.add(traitementFieldSet);
516
	}
517
 
1898 aurelien 518
	private void creerFieldsetTypesUniteEtat() {
519
		FieldSet etatTypesUniteFieldSet = new FieldSet();
520
		// Etat général et nombre d'échantillons (à changer dans l'i18n
521
		etatTypesUniteFieldSet.setHeadingHtml(i18nC.collectionEtatGeneralEtNombreEchantillons());
522
		etatTypesUniteFieldSet.setCollapsible(true);
523
		etatTypesUniteFieldSet.collapse();
524
		etatTypesUniteFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
862 jpm 525
 
1898 aurelien 526
		etatUniteRangementCombo = new ChampComboBoxListeValeurs(i18nC.collectionUniteRangementEtatGeneral(), "etat");
527
		etatUniteRangementCombo.setToolTip(i18nC.collectionUniteRangementEtatGeneralInfo());
528
		etatUniteRangementCombo.setTrie("id_valeur");
529
		etatUniteRangementCombo.setWidth(300);
530
		etatTypesUniteFieldSet.add(etatUniteRangementCombo);
531
 
532
		etatTypesUniteFieldSet.add(creerUniteRangement());
1918 aurelien 533
 
534
		planchesHerbier = new ChampNombre();
535
		planchesHerbier.setFieldLabel(i18nC.collectionNbPlanchesHerbier());
1898 aurelien 536
 
1918 aurelien 537
		nbEspeces = new ChampNombre();
538
		nbEspeces.setFieldLabel(i18nC.collectionNbEspeces());
539
 
540
		etatTypesUniteFieldSet.add(planchesHerbier);
541
		etatTypesUniteFieldSet.add(nbEspeces);
542
 
1898 aurelien 543
		add(etatTypesUniteFieldSet);
544
 
862 jpm 545
		etatGeneralCombo = new ChampComboBoxListeValeurs(i18nC.collectionEtatGeneral(), "etat");
546
		etatGeneralCombo.setToolTip(i18nC.collectionEtatGeneralInfo());
547
		etatGeneralCombo.setTrie("id_valeur");
1898 aurelien 548
		etatTypesUniteFieldSet.add(etatGeneralCombo, new FormData(300, 0));
862 jpm 549
 
550
		specimenDegradationChp = new ChampMultiValeursMultiTypes(i18nC.degradationSpecimen(), 150, true);
551
		specimenDegradationChp.initialiserType("specimenDegradation");
552
		specimenDegradationChp.initialiserCombobox("niveauImportance");
1898 aurelien 553
		etatTypesUniteFieldSet.add(specimenDegradationChp);
862 jpm 554
 
1262 cyprien 555
		labelPresentationDegradationChp = new Text();
556
		labelPresentationDegradationChp.setWidth("95%");
557
		labelPresentationDegradationChp.setVisible(false);
558
 
862 jpm 559
		presentationDegradationChp = new ChampMultiValeursMultiTypes(i18nC.degradationPresentation(), 150, 200, true);
560
		presentationDegradationChp.initialiserType("supportDegradation");
561
		presentationDegradationChp.initialiserCombobox("niveauImportance");
1262 cyprien 562
 
563
		presentationDegradationChp.getTypes().addListener(Events.Select,
564
			new Listener<FieldEvent>() {
565
				public void handleEvent(FieldEvent be) {
566
					if (((Valeur)(be.getField().getValue())).get("id_valeur").equals("2310")) {
567
						labelPresentationDegradationChp.setText(i18nC.degradationPresentationLabel());
568
						labelPresentationDegradationChp.setVisible(true);
569
					}
570
					else {
571
						labelPresentationDegradationChp.setText("");
572
						labelPresentationDegradationChp.setVisible(false);
573
					}
574
				}
575
			});
1898 aurelien 576
		etatTypesUniteFieldSet.add(presentationDegradationChp);
577
		etatTypesUniteFieldSet.add(labelPresentationDegradationChp);
862 jpm 578
 
579
		determinationCombo = new ChampComboBoxListeValeurs(i18nC.collectionDetermination(), "niveauDetermination");
580
		determinationCombo.setTrie("id_valeur");
1898 aurelien 581
		etatTypesUniteFieldSet.add(determinationCombo, new FormData(450, 0));
862 jpm 582
 
1898 aurelien 583
		this.add(etatTypesUniteFieldSet);
862 jpm 584
	}
585
 
948 jpm 586
	public void peupler() {
587
		initialiserCollection();
588
		if (collectionBotanique != null) {
589
			typesCollectionBotaCombo.peupler(collectionBotanique.getType());
590
			if (!UtilString.isEmpty(collectionBotanique.getNbreEchantillon())) {
591
				nbreEchantillonChp.setValue(Integer.parseInt(collectionBotanique.getNbreEchantillon()));
592
			}
954 jpm 593
 
948 jpm 594
			peuplerGrilleUniteRangement(collectionBotanique.getUniteRangement());
954 jpm 595
			etatUniteRangementCombo.peupler(collectionBotanique.getUniteRangementEtat());
596
 
597
 
1918 aurelien 598
			if(!collectionBotanique.getNbPlanchesHerbiers().isEmpty()) {
599
				planchesHerbier.setValue((Integer.parseInt(collectionBotanique.getNbPlanchesHerbiers())));
600
			}
601
 
602
			if(!collectionBotanique.getNbEspeces().isEmpty()) {
603
				nbEspeces.setValue((Integer.parseInt(collectionBotanique.getNbEspeces())));
604
			}
605
 
954 jpm 606
			typePapierConservationChp.peupler(collectionBotanique.getConservationPapierType());
607
			methodeConservationChp.peupler(collectionBotanique.getConservationMethode());
608
 
955 jpm 609
			specimenFixationPourcentChp.peupler(collectionBotanique.getSpecimenFixationPourcent());
956 jpm 610
			etiquetteFixationPourcentChp.peupler(collectionBotanique.getEtiquetteFixationPourcent());
955 jpm 611
			specimentMethodeFixationChp.peupler(collectionBotanique.getSpecimenFixationMethode());
612
			etiquetteMethodeFixationSurSupportChp.peupler(collectionBotanique.getEtiquetteFixationSupport());
613
			etiquetteMethodeFixationSurSpecimenChp.peupler(collectionBotanique.getEtiquetteFixationSpecimen());
614
			typeEcritureChp.peupler(collectionBotanique.getEtiquetteEcriture());
954 jpm 615
 
955 jpm 616
			traitementCombo.peupler(collectionBotanique.getTraitement());
617
			poisonTraitementChp.peupler(collectionBotanique.getTraitementPoison());
618
			insecteTraitementChp.peupler(collectionBotanique.getTraitementInsecte());
954 jpm 619
 
955 jpm 620
			etatGeneralCombo.peupler(collectionBotanique.getEtatGeneral());
621
			specimenDegradationChp.peupler(collectionBotanique.getDegradationSpecimen());
622
			presentationDegradationChp.peupler(collectionBotanique.getDegradationPresentation());
623
			determinationCombo.peupler(collectionBotanique.getDetermination());
1180 jpm 624
		}
948 jpm 625
	}
626
 
627
	public void collecter() {
628
		initialiserCollection();
629
		if (etreAccede()) {
630
			collectionBotaniqueCollectee.setType(typesCollectionBotaCombo.getValeur());
968 jpm 631
			if (nbreEchantillonChp.getValue() != null) {
632
				collectionBotaniqueCollectee.setNbreEchantillon(Integer.toString(nbreEchantillonChp.getValue().intValue()));
633
			}
954 jpm 634
 
948 jpm 635
			collectionBotaniqueCollectee.setUniteRangement(collecterGrilleUniteRangement());
954 jpm 636
			collectionBotaniqueCollectee.setUniteRangementEtat(etatUniteRangementCombo.getValeur());
637
 
1918 aurelien 638
			collectionBotaniqueCollectee.setNbPlanchesHerbiers(planchesHerbier.getValue()+"");
639
			collectionBotaniqueCollectee.setNbEspeces(nbEspeces.getValue()+"");
954 jpm 640
 
641
			collectionBotaniqueCollectee.setConservationPapierType(typePapierConservationChp.getValeur());
642
			collectionBotaniqueCollectee.setConservationMethode(methodeConservationChp.getValeur());
643
 
644
			collectionBotaniqueCollectee.setSpecimenFixationPourcent(specimenFixationPourcentChp.getValeur());
956 jpm 645
			collectionBotaniqueCollectee.setEtiquetteFixationPourcent(etiquetteFixationPourcentChp.getValeur());
954 jpm 646
			collectionBotaniqueCollectee.setSpecimenFixationMethode(specimentMethodeFixationChp.getValeur());
647
			collectionBotaniqueCollectee.setEtiquetteFixationSupport(etiquetteMethodeFixationSurSupportChp.getValeur());
648
			collectionBotaniqueCollectee.setEtiquetteFixationSpecimen(etiquetteMethodeFixationSurSpecimenChp.getValeur());
649
			collectionBotaniqueCollectee.setEtiquetteEcriture(typeEcritureChp.getValeur());
650
 
651
			collectionBotaniqueCollectee.setTraitement(traitementCombo.getValeur());
652
			collectionBotaniqueCollectee.setTraitementPoison(poisonTraitementChp.getValeur());
653
			collectionBotaniqueCollectee.setTraitementInsecte(insecteTraitementChp.getValeur());
654
 
655
			collectionBotaniqueCollectee.setEtatGeneral(etatGeneralCombo.getValeur());
656
			collectionBotaniqueCollectee.setDegradationSpecimen(specimenDegradationChp.getValeurs());
657
			collectionBotaniqueCollectee.setDegradationPresentation(presentationDegradationChp.getValeurs());
658
			collectionBotaniqueCollectee.setDetermination(determinationCombo.getValeur());
948 jpm 659
		}
660
	}
661
 
662
	private void initialiserCollection() {
663
		collection = ((CollectionForm) formulaire).collection;
664
		if (collection != null) {
665
			collectionBotanique = collection.getBotanique();
666
		}
667
 
668
		collectionCollectee = ((CollectionForm) formulaire).collectionCollectee;
669
		if (collectionCollectee != null) {
670
			collectionBotaniqueCollectee = collectionCollectee.getBotanique();
671
		}
672
	}
673
 
806 jpm 674
	public void rafraichir(Object nouvellesDonnees) {
675
		if (nouvellesDonnees instanceof ValeurListe) {
676
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
677
			rafraichirValeurListe(listeValeurs);
678
		} else {
954 jpm 679
			Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
806 jpm 680
		}
681
	}
682
 
683
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
954 jpm 684
		if (listeValeurs.getId().equals(config.getListeId("typeUniteRangement"))) {
806 jpm 685
			Iterator<String> it = listeValeurs.keySet().iterator();
686
			while (it.hasNext()) {
687
				Valeur valeur = listeValeurs.get(it.next());
688
				UniteRangement unite = new UniteRangement();
948 jpm 689
				unite.setId(valeur.getId());
806 jpm 690
				unite.setType(valeur.getNom());
831 jpm 691
				unite.setTypeAutre(false);
806 jpm 692
				uniteRangementGrille.getStore().add(unite);
693
			}
831 jpm 694
		} else if (listeValeurs.getId().equals(config.getListeId("typeUniteBase"))) {
695
			Iterator<String> it = listeValeurs.keySet().iterator();
696
			while (it.hasNext()) {
697
				Valeur valeur = listeValeurs.get(it.next());
698
				UniteBase unite = new UniteBase();
948 jpm 699
				unite.setId(valeur.getId());
831 jpm 700
				unite.setType(valeur.getNom());
701
				unite.setTypeAutre(false);
702
				uniteBaseGrille.getStore().add(unite);
703
			}
806 jpm 704
		} else {
954 jpm 705
			Debug.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!");
806 jpm 706
		}
707
	}
708
}