Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1637 aurelien 1
package org.tela_botanica.client.vues.structure;
2
 
3
import java.util.ArrayList;
4
import java.util.List;
5
 
6
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
import org.tela_botanica.client.modeles.Information;
9
import org.tela_botanica.client.modeles.Valeur;
10
import org.tela_botanica.client.modeles.ValeurListe;
11
import org.tela_botanica.client.modeles.structure.StructureValorisation;
12
import org.tela_botanica.client.synchronisation.Sequenceur;
13
import org.tela_botanica.client.vues.Formulaire;
14
import org.tela_botanica.client.vues.FormulaireOnglet;
15
 
16
import com.extjs.gxt.ui.client.event.BaseEvent;
17
import com.extjs.gxt.ui.client.event.ComponentEvent;
18
import com.extjs.gxt.ui.client.event.Events;
19
import com.extjs.gxt.ui.client.event.Listener;
20
import com.extjs.gxt.ui.client.widget.Component;
21
import com.extjs.gxt.ui.client.widget.ContentPanel;
22
import com.extjs.gxt.ui.client.widget.LayoutContainer;
23
import com.extjs.gxt.ui.client.widget.form.CheckBox;
24
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
25
import com.extjs.gxt.ui.client.widget.form.Radio;
26
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
27
import com.extjs.gxt.ui.client.widget.form.TextArea;
28
import com.extjs.gxt.ui.client.widget.form.TextField;
29
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
30
import com.extjs.gxt.ui.client.widget.layout.FormData;
31
 
32
public class StructureFormValorisation extends FormulaireOnglet implements Rafraichissable {
33
 
34
	private StructureValorisation valorisation = null;
35
 
36
	private LayoutContainer autreCollectionTrukCp = null;
37
	private TextField<String> typeRechercheAutreChp = null;
38
	private CheckBoxGroup autreCollectionTrukCacGrpChp = null;
39
	private LayoutContainer provenanceRechercheTrukCp = null;
40
	private CheckBoxGroup provenanceRechercheTrukCacGrpChp = null;
41
	private CheckBoxGroup typeRechercheTrukCacGrpChp = null;
42
	private LayoutContainer typeRechercheTrukCp = null;
43
	private TextField<String> futureActionChp = null;
44
	private TextField<String> sansMotifAccesChp = null;
45
	private TextField<String> avecMotifAccesChp = null;
46
	private TextField<String> autreCollectionAutreChp = null;
47
	private TextField<String> actionAutreChp = null;
48
	private TextField<String> provenanceRechercheAutreChp = null;
49
 
50
	private RadioGroup actionMarkRGrpChp = null;
51
	private LayoutContainer actionTrukCp = null;
52
	private CheckBoxGroup actionTrukCacGrpChp = null;
53
	private RadioGroup futureActionMarkRGrpChp = null;
54
	private RadioGroup rechercheMarkRGrpChp = null;
55
	private RadioGroup sansMotifAccesMarkRGrpChp = null;
56
	private RadioGroup avecMotifAccesMarkRGrpChp = null;
57
	private TextField<String> publicationChp = null;
58
 
59
	private String ID = "valorisation";
60
	private Mediateur mediateur = null;
61
	private Formulaire formulaireCourant = null;
62
	private Sequenceur sequenceur = null;
63
 
64
	public StructureFormValorisation(Mediateur mediateur, Formulaire formulaireCourant, Sequenceur sequenceur) {
65
		this.mediateur = mediateur;
66
		this.formulaireCourant = formulaireCourant;
67
		this.sequenceur = sequenceur;
68
 
69
		initialiserOnglet(formulaireCourant);
70
 
71
		setId(ID);
72
		setText(Mediateur.i18nC.structureInfoValorisation());
73
		FormulaireOnglet.parametrer(this);
74
 
75
		this.setLayout(Formulaire.creerFormLayout(650, LabelAlign.TOP));
76
		Listener<ComponentEvent> ecouteurSelection = new Listener<ComponentEvent>() {
77
			public void handleEvent(ComponentEvent be) {
78
				peupler();
79
				layout();
80
			}
81
		};
82
		this.addListener(Events.Select, ecouteurSelection);
83
 
84
		actionMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("action_mark", "ouiNon");
85
		actionMarkRGrpChp.setFieldLabel("Avez-vous réalisé des actions de valorisation de vos collections botaniques ou avez-vous été sollicités pour la valorisation de ces collections ?");
86
		this.add(actionMarkRGrpChp);
87
 
88
 
89
		actionTrukCp = Formulaire.creerChoixMultipleCp();
90
		actionTrukCp.hide();
91
		actionTrukCacGrpChp = new CheckBoxGroup();
92
		actionTrukCacGrpChp.setFieldLabel("Si oui, lesquelles ?");
93
		this.add(actionTrukCp);
94
		mediateur.obtenirListeValeurEtRafraichir(this, "actionValorisation", sequenceur);
95
		mediateur.obtenirListeValeurEtRafraichir(this, "statut", sequenceur);
96
 
97
		publicationChp = new TextArea();
98
		publicationChp.setFieldLabel("Quelques titres des ouvrages, articles scientifiques, ...");
99
		this.add(publicationChp, new FormData(550, 0));
100
 
101
		autreCollectionTrukCp = Formulaire.creerChoixMultipleCp();
102
		autreCollectionTrukCacGrpChp = new CheckBoxGroup();
103
		autreCollectionTrukCacGrpChp.setFieldLabel("L'organisme dispose-t-il d'autres collections (permettant une valorisation pluridisciplinaire) ?");
104
		this.add(autreCollectionTrukCp);
105
		mediateur.obtenirListeValeurEtRafraichir(this, "autreCollection", sequenceur);
106
 
107
		futureActionMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("future_action_mark", "ouiNon");
108
		futureActionMarkRGrpChp.setFieldLabel("Envisagez vous des actions de valorisation dans le cadre de votre politique culturelle ?");
109
		this.add(futureActionMarkRGrpChp);
110
 
111
		futureActionChp = new TextArea();
112
		futureActionChp.setFieldLabel("Si oui, lesquelles ?");
113
		futureActionChp.hide();
114
		futureActionChp.addListener(Events.Hide, new Listener<BaseEvent>() {
115
 
116
			public void handleEvent(BaseEvent be) {
117
				((TextArea) be.getSource()).setValue("");
118
			}
119
 
120
		});
121
		this.add(futureActionChp, new FormData(550, 0));
122
 
123
		rechercheMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("recherche_mark", "ouiNon");
124
		rechercheMarkRGrpChp.setFieldLabel("Vos collections botaniques sont-elles utilisées pour des recherches scientifiques ?");
125
		this.add(rechercheMarkRGrpChp);
126
 
127
		provenanceRechercheTrukCp = Formulaire.creerChoixMultipleCp();
128
		provenanceRechercheTrukCp.hide();
129
		provenanceRechercheTrukCacGrpChp = new CheckBoxGroup();
130
		provenanceRechercheTrukCacGrpChp.setFieldLabel("Si oui, par des chercheurs (professionnels ou amateurs) de quelle provenance ?");
131
		this.add(provenanceRechercheTrukCp);
132
		mediateur.obtenirListeValeurEtRafraichir(this, "continentEtFr", sequenceur);
133
 
134
		typeRechercheTrukCp = Formulaire.creerChoixMultipleCp();
135
		typeRechercheTrukCp.hide();
136
		typeRechercheTrukCacGrpChp = new CheckBoxGroup();
137
		typeRechercheTrukCacGrpChp.setFieldLabel("Et pour quelles recherches ?");
138
		this.add(typeRechercheTrukCp);
139
		mediateur.obtenirListeValeurEtRafraichir(this, "typeRecherche", sequenceur);
140
 
141
		sansMotifAccesMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("sans_motif_acces_mark", "ouiNon");
142
		sansMotifAccesMarkRGrpChp.setFieldLabel("Peut-on consulter vos collections botaniques sans motif de recherches scientifiques ?");
143
		this.add(sansMotifAccesMarkRGrpChp);
144
 
145
		this.add(sansMotifAccesChp = new TextArea(), new FormData(550, 0));
146
		sansMotifAccesChp.hide();
147
		sansMotifAccesChp.addListener(Events.Hide, new Listener<BaseEvent>() {
148
 
149
			public void handleEvent(BaseEvent be) {
150
				((TextArea) be.getSource()).setValue("");
151
			}
152
 
153
		});
154
		sansMotifAccesChp.setFieldLabel("Si oui, quelles démarches doit-on faire pour les consulter ?");
155
 
156
		avecMotifAccesMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("avec_motif_acces_mark", "ouiNon");
157
		avecMotifAccesMarkRGrpChp.setFieldLabel("Peut-on visiter vos collections botaniques avec des objectifs de recherches scientifiques ?");
158
		this.add(avecMotifAccesMarkRGrpChp);
159
 
160
		this.add(avecMotifAccesChp = new TextArea(), new FormData(550, 0));
161
		avecMotifAccesChp.hide();
162
		avecMotifAccesChp.addListener(Events.Hide, new Listener<BaseEvent>() {
163
 
164
			public void handleEvent(BaseEvent be) {
165
				((TextArea) be.getSource()).setValue("");
166
			}
167
 
168
		});
169
		avecMotifAccesChp.setFieldLabel("Si oui, quelles démarches doit-on faire pour les visiter ?");
170
 
171
	}
172
 
173
	public void peupler() {
174
		if(valorisation == null) {
175
			initialiserValorisation();
176
		}
177
		if (formulaireCourant.mode.equals(Formulaire.MODE_AJOUTER)) {
178
			// Indique que l'onglet a pu être modifié pour la méthode collecter...
179
			setData("acces", true);
180
			// Initialisation de l'objet Structure
181
			valorisation = new StructureValorisation();
182
		}
183
		if (formulaireCourant.mode.equals(Formulaire.MODE_MODIFIER) && valorisation != null) {
184
			// ACTION :
185
			//TODO : check below:
186
			((Radio) actionMarkRGrpChp.get((valorisation.getAction().equals("1") ? 0 : 1))).setValue(true);
187
 
188
			// ACTION INFO
189
			peuplerCasesACocher(valorisation.getActionInfo(), actionTrukCacGrpChp, actionAutreChp);
190
 
191
			// PUBLICATION
192
			publicationChp.setValue(valorisation.getPublication());
193
 
194
			// COLLECTION AUTRE
195
			peuplerCasesACocher(valorisation.getCollectionAutre(), autreCollectionTrukCacGrpChp, autreCollectionAutreChp);
196
 
197
			// ACTION FUTURE
198
			((Radio) futureActionMarkRGrpChp.get((valorisation.getActionFuture().equals("1") ? 0 : 1))).setValue(true);
199
 
200
			// ACTION FUTURE INFO
201
			futureActionChp.setValue(valorisation.getActionFutureInfo());
202
 
203
			// RECHERCHE
204
			((Radio) rechercheMarkRGrpChp.get((valorisation.getRecherche().equals("1") ? 0 : 1))).setValue(true);
205
			// RECHERCHE PROVENANCE
206
			peuplerCasesACocher(valorisation.getRechercheProvenance(), provenanceRechercheTrukCacGrpChp, provenanceRechercheAutreChp);
207
			// RECHERCHE TYPE
208
			peuplerCasesACocher(valorisation.getRechercheType(), typeRechercheTrukCacGrpChp, typeRechercheAutreChp);
209
 
210
			// ACCÈS SANS MOTIF
211
			((Radio) sansMotifAccesMarkRGrpChp.get((valorisation.getAccesSansMotif().equals("1") ? 0 : 1))).setValue(true);
212
			// ACCÈS SANS MOTIF INFO
213
			sansMotifAccesChp.setValue(valorisation.getAccesSansMotifInfo());
214
 
215
			// VISITE AVEC MOTIF
216
			((Radio) avecMotifAccesMarkRGrpChp.get((valorisation.getVisiteAvecMotif().equals("1") ? 0 : 1))).setValue(true);
217
			// VISITE AVEC MOTIF INFO
218
			avecMotifAccesChp.setValue(valorisation.getVisiteAvecMotifInfo());
219
 
220
			// Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter...
221
			this.setData("acces", true);
222
		}
223
	}
224
 
225
	private String creerChaineDenormalisee(List<CheckBox> liste) {
226
		return ((StructureForm)formulaireCourant).creerChaineDenormalisee(liste);
227
	}
228
 
229
	private void peuplerCasesACocher(String donnees, CheckBoxGroup groupeCac, TextField<String> champAutre) {
230
		((StructureForm)formulaireCourant).peuplerCasesACocher(donnees, groupeCac, champAutre);
231
	}
232
 
233
	private void initialiserValorisation() {
234
		valorisation = ((StructureForm)formulaireCourant).valorisation;
235
	}
236
 
237
	public StructureValorisation collecter() {
238
 
239
		if(valorisation == null) {
240
			initialiserValorisation();
241
		}
242
 
243
		StructureValorisation valorisationARetourner = null;
244
		if (getData("acces").equals(true)) {
245
			// Création de l'objet
246
			StructureValorisation valorisationCollectee = (StructureValorisation) valorisation.cloner(new StructureValorisation());
247
 
248
			// ACTION
249
			if (actionMarkRGrpChp.getValue() != null) {
250
				valorisationCollectee.setAction(actionMarkRGrpChp.getValue().getValueAttribute());
251
			}
252
 
253
			// ACTION INFO
254
			valorisationCollectee.setActionInfo(creerChaineDenormalisee(actionTrukCacGrpChp.getValues()));
255
			valorisationCollectee.setActionInfo("AUTRE", actionAutreChp.getValue());
256
 
257
			// PUBLICATION
258
			valorisationCollectee.setPublication(publicationChp.getValue());
259
 
260
			// COLLECTION AUTRE
261
			valorisationCollectee.setCollectionAutre(creerChaineDenormalisee(autreCollectionTrukCacGrpChp.getValues()));
262
			valorisationCollectee.setCollectionAutre("AUTRE", autreCollectionAutreChp.getValue());
263
 
264
			// ACTION FUTURE
265
			if (futureActionMarkRGrpChp.getValue() != null) {
266
				valorisationCollectee.setActionFuture(futureActionMarkRGrpChp.getValue().getValueAttribute());
267
			}
268
			// ACTION FUTURE INFO
269
			valorisationCollectee.setActionFutureInfo(futureActionChp.getValue());
270
 
271
			// RECHERCHE
272
			if (rechercheMarkRGrpChp.getValue() != null) {
273
				valorisationCollectee.setRecherche(rechercheMarkRGrpChp.getValue().getValueAttribute());
274
 
275
				// RECHERCHE PROVENANCE
276
				valorisationCollectee.setRechercheProvenance(creerChaineDenormalisee(provenanceRechercheTrukCacGrpChp.getValues()));
277
				valorisationCollectee.setRechercheProvenance("AUTRE", provenanceRechercheAutreChp.getValue());
278
 
279
				// RECHERCHE TYPE
280
				valorisationCollectee.setRechercheType(creerChaineDenormalisee(typeRechercheTrukCacGrpChp.getValues()));
281
				valorisationCollectee.setRechercheType("AUTRE", typeRechercheAutreChp.getValue());
282
			}
283
 
284
			// ACCÈS SANS MOTIF
285
			if (sansMotifAccesMarkRGrpChp.getValue() != null) {
286
				valorisationCollectee.setAccesSansMotif(sansMotifAccesMarkRGrpChp.getValue().getValueAttribute());
287
			}
288
			// ACCÈS SANS MOTIF INFO
289
			valorisationCollectee.setAccesSansMotifInfo(sansMotifAccesChp.getValue());
290
 
291
			// VISITE AVEC MOTIF
292
			if (avecMotifAccesMarkRGrpChp.getValue() != null) {
293
				valorisationCollectee.setVisiteAvecMotif(avecMotifAccesMarkRGrpChp.getValue().getValueAttribute());
294
			}
295
			// VISITE AVEC MOTIF INFO
296
			valorisationCollectee.setVisiteAvecMotifInfo(avecMotifAccesChp.getValue());
297
 
298
			// Retour de l'objet
299
			if (!valorisationCollectee.comparer(valorisation)) {
300
				valorisationARetourner = valorisation = valorisationCollectee;
301
			}
302
		}
303
		return valorisationARetourner;
304
	}
305
 
306
	@Override
307
	public void rafraichir(Object nouvellesDonnees) {
308
		if (nouvellesDonnees instanceof ValeurListe) {
309
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
310
			rafraichirValeurListe(listeValeurs);
311
		} else if (nouvellesDonnees instanceof Information) {
312
			Information info = (Information) nouvellesDonnees;
313
			rafraichirInformation(info);
314
		}
315
	}
316
 
317
	public void rafraichirInformation(Information info) {
318
		if (info.getDonnee(2) != null) {
319
			valorisation = (StructureValorisation) info.getDonnee(2);
320
			if (valorisation != null) {
321
				peupler();
322
			}
323
		}
324
	}
325
 
326
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
327
		List<Valeur> liste = listeValeurs.toList();
328
		if (listeValeurs.getId().equals(config.getListeId("autreCollection"))) {
329
			if (autreCollectionTrukCp != null && autreCollectionTrukCp.getItemByItemId("autreCollectionTrukCacGrpChp") == null) {
330
				autreCollectionTrukCacGrpChp.setId("autreCollectionTrukCacGrpChp");
331
				autreCollectionAutreChp = new TextField<String>();
332
				Formulaire.creerChoixMultipleCac(autreCollectionTrukCp, autreCollectionTrukCacGrpChp, listeValeurs, autreCollectionAutreChp);
333
			}
334
		}
335
		if (listeValeurs.getId().equals(config.getListeId("actionValorisation"))) {
336
			actionAutreChp = new TextField<String>();
337
			Formulaire.creerChoixMultipleCac(actionTrukCp, actionTrukCacGrpChp, listeValeurs, actionAutreChp);
338
		}
339
		if (listeValeurs.getId().equals(config.getListeId("continentEtFr"))) {
340
			provenanceRechercheAutreChp = new TextField<String>();
341
			Formulaire.creerChoixMultipleCac(provenanceRechercheTrukCp, provenanceRechercheTrukCacGrpChp, listeValeurs, provenanceRechercheAutreChp);
342
		}
343
		if (listeValeurs.getId().equals(config.getListeId("typeRecherche"))) {
344
			typeRechercheAutreChp = new TextField<String>();
345
			Formulaire.creerChoixMultipleCac(typeRechercheTrukCp, typeRechercheTrukCacGrpChp, listeValeurs, typeRechercheAutreChp);
346
		}
347
	}
348
 
349
	public void afficherChampSupplementaire(Radio radioBtn) {
350
		//GWT.log("Nom btn : "+radioBtn.getName()+" - Nom group : "+radioBtn.getGroup().getName(), null);
351
		// Valeur du bouton radio déclenchant l'affichage des composants cachés
352
		String valeurPourAfficher = "oui";
353
 
354
		// Construction de la liste des composants à afficher/cacher
355
		String radioGroupeNom = radioBtn.getGroup().getName();
356
		ArrayList<Object> composants = new ArrayList<Object>();
357
		if (radioGroupeNom.equals("action_mark_grp")) {
358
			composants.add(actionTrukCp);
359
		} else if (radioGroupeNom.equals("future_action_mark_grp")) {
360
			composants.add(futureActionChp);
361
		} else if (radioGroupeNom.equals("sans_motif_acces_mark_grp")) {
362
			composants.add(sansMotifAccesChp);
363
		} else if (radioGroupeNom.equals("avec_motif_acces_mark_grp")) {
364
			composants.add(avecMotifAccesChp);
365
		} else if (radioGroupeNom.equals("recherche_mark_grp")) {
366
			composants.add(provenanceRechercheTrukCp);
367
			composants.add(typeRechercheTrukCp);
368
		}
369
 
370
		// Nous affichons/cachons les composant de la liste
371
		final int nbreComposants = composants.size();
372
		//GWT.log("Id : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax, null);
373
		//Window.alert("Radio grp nom : "+radioGroupeNom+" - Id btn : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax);
374
		for (int i = 0; i < nbreComposants; i++) {
375
			// En fonction du type de bouton cliquer, on affiche ou cache les champs
376
			String type = radioBtn.getBoxLabel().toLowerCase();
377
			//GWT.log(type, null);
378
			if (radioBtn.getValue() == true) {
379
				if (type.equals(valeurPourAfficher)) {
380
					((Component) composants.get(i)).show();
381
				} else {
382
					((Component) composants.get(i)).hide();
383
				}
384
			}
385
			// Si on a à faire à un ContentPanel, on l'actualise pour déclencher l'affichage
386
			if (composants.get(i) instanceof ContentPanel) {
387
				((ContentPanel) composants.get(i)).layout();
388
			}
389
		}
390
	}
391
}