Subversion Repositories eFlore/Applications.coel

Rev

Rev 1784 | Details | Compare with Previous | 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
 
1733 raphael 173
    public void peupler() {
1784 aurelien 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
		    if(valorisation.getAction() != null) {
187
		    	((Radio) actionMarkRGrpChp.get(valorisation.getAction() ^ 1)).setValue(true);
188
		    }
189
 
190
		    // ACTION INFO
191
		    peuplerCasesACocher(valorisation.getActionInfo(), actionTrukCacGrpChp, actionAutreChp);
192
 
193
		    // PUBLICATION
194
		    publicationChp.setValue(valorisation.getPublication());
195
 
196
		    // COLLECTION AUTRE
197
		    peuplerCasesACocher(valorisation.getCollectionAutre(), autreCollectionTrukCacGrpChp, autreCollectionAutreChp);
198
 
199
		    // ACTION FUTURE
200
		    if(valorisation.getActionFuture() != null) {
201
		    	((Radio) futureActionMarkRGrpChp.get(valorisation.getActionFuture() ^ 1)).setValue(true);
202
		    }
203
 
204
		    // ACTION FUTURE INFO
205
		    futureActionChp.setValue(valorisation.getActionFutureInfo());
206
 
207
		    // RECHERCHE
208
		    if(valorisation.getRecherche() != null) {
209
		    	((Radio) rechercheMarkRGrpChp.get(valorisation.getRecherche() ^ 1)).setValue(true);
210
		    }
211
		    // RECHERCHE PROVENANCE
212
		    peuplerCasesACocher(valorisation.getRechercheProvenance(), provenanceRechercheTrukCacGrpChp, provenanceRechercheAutreChp);
213
		    // RECHERCHE TYPE
214
		    peuplerCasesACocher(valorisation.getRechercheType(), typeRechercheTrukCacGrpChp, typeRechercheAutreChp);
215
 
216
		    // ACCÈS SANS MOTIF
217
		    if(valorisation.getAccesSansMotif() != null) {
218
			((Radio) sansMotifAccesMarkRGrpChp.get(valorisation.getAccesSansMotif() ^ 1)).setValue(true);
219
		    }
220
		    // ACCÈS SANS MOTIF INFO
221
		    sansMotifAccesChp.setValue(valorisation.getAccesSansMotifInfo());
222
 
223
		    // VISITE AVEC MOTIF
224
		    if(valorisation.getVisiteAvecMotif() != null) {
225
			((Radio) avecMotifAccesMarkRGrpChp.get(valorisation.getVisiteAvecMotif() ^ 1)).setValue(true);
226
		    }
227
		    // VISITE AVEC MOTIF INFO
228
		    avecMotifAccesChp.setValue(valorisation.getVisiteAvecMotifInfo());
229
 
230
		    // Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter...
231
		    this.setData("acces", true);
232
		}
1733 raphael 233
    }
1637 aurelien 234
 
235
	private String creerChaineDenormalisee(List<CheckBox> liste) {
236
		return ((StructureForm)formulaireCourant).creerChaineDenormalisee(liste);
237
	}
238
 
239
	private void peuplerCasesACocher(String donnees, CheckBoxGroup groupeCac, TextField<String> champAutre) {
240
		((StructureForm)formulaireCourant).peuplerCasesACocher(donnees, groupeCac, champAutre);
241
	}
242
 
243
	private void initialiserValorisation() {
244
		valorisation = ((StructureForm)formulaireCourant).valorisation;
245
	}
246
 
247
	public StructureValorisation collecter() {
248
 
249
		if(valorisation == null) {
250
			initialiserValorisation();
251
		}
252
 
253
		StructureValorisation valorisationARetourner = null;
254
		if (getData("acces").equals(true)) {
255
			// Création de l'objet
256
			StructureValorisation valorisationCollectee = (StructureValorisation) valorisation.cloner(new StructureValorisation());
257
 
258
			// ACTION
259
			if (actionMarkRGrpChp.getValue() != null) {
260
				valorisationCollectee.setAction(actionMarkRGrpChp.getValue().getValueAttribute());
261
			}
262
 
263
			// ACTION INFO
264
			valorisationCollectee.setActionInfo(creerChaineDenormalisee(actionTrukCacGrpChp.getValues()));
265
			valorisationCollectee.setActionInfo("AUTRE", actionAutreChp.getValue());
266
 
267
			// PUBLICATION
268
			valorisationCollectee.setPublication(publicationChp.getValue());
269
 
270
			// COLLECTION AUTRE
271
			valorisationCollectee.setCollectionAutre(creerChaineDenormalisee(autreCollectionTrukCacGrpChp.getValues()));
272
			valorisationCollectee.setCollectionAutre("AUTRE", autreCollectionAutreChp.getValue());
273
 
274
			// ACTION FUTURE
275
			if (futureActionMarkRGrpChp.getValue() != null) {
276
				valorisationCollectee.setActionFuture(futureActionMarkRGrpChp.getValue().getValueAttribute());
277
			}
278
			// ACTION FUTURE INFO
279
			valorisationCollectee.setActionFutureInfo(futureActionChp.getValue());
280
 
281
			// RECHERCHE
282
			if (rechercheMarkRGrpChp.getValue() != null) {
283
				valorisationCollectee.setRecherche(rechercheMarkRGrpChp.getValue().getValueAttribute());
284
 
285
				// RECHERCHE PROVENANCE
286
				valorisationCollectee.setRechercheProvenance(creerChaineDenormalisee(provenanceRechercheTrukCacGrpChp.getValues()));
287
				valorisationCollectee.setRechercheProvenance("AUTRE", provenanceRechercheAutreChp.getValue());
288
 
289
				// RECHERCHE TYPE
290
				valorisationCollectee.setRechercheType(creerChaineDenormalisee(typeRechercheTrukCacGrpChp.getValues()));
291
				valorisationCollectee.setRechercheType("AUTRE", typeRechercheAutreChp.getValue());
292
			}
293
 
294
			// ACCÈS SANS MOTIF
295
			if (sansMotifAccesMarkRGrpChp.getValue() != null) {
296
				valorisationCollectee.setAccesSansMotif(sansMotifAccesMarkRGrpChp.getValue().getValueAttribute());
297
			}
298
			// ACCÈS SANS MOTIF INFO
299
			valorisationCollectee.setAccesSansMotifInfo(sansMotifAccesChp.getValue());
300
 
301
			// VISITE AVEC MOTIF
302
			if (avecMotifAccesMarkRGrpChp.getValue() != null) {
303
				valorisationCollectee.setVisiteAvecMotif(avecMotifAccesMarkRGrpChp.getValue().getValueAttribute());
304
			}
305
			// VISITE AVEC MOTIF INFO
306
			valorisationCollectee.setVisiteAvecMotifInfo(avecMotifAccesChp.getValue());
307
 
308
			// Retour de l'objet
309
			if (!valorisationCollectee.comparer(valorisation)) {
310
				valorisationARetourner = valorisation = valorisationCollectee;
311
			}
312
		}
313
		return valorisationARetourner;
314
	}
315
 
316
	@Override
317
	public void rafraichir(Object nouvellesDonnees) {
318
		if (nouvellesDonnees instanceof ValeurListe) {
319
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
320
			rafraichirValeurListe(listeValeurs);
321
		} else if (nouvellesDonnees instanceof Information) {
322
			Information info = (Information) nouvellesDonnees;
323
			rafraichirInformation(info);
324
		}
325
	}
326
 
327
	public void rafraichirInformation(Information info) {
328
		if (info.getDonnee(2) != null) {
329
			valorisation = (StructureValorisation) info.getDonnee(2);
330
			if (valorisation != null) {
331
				peupler();
332
			}
333
		}
334
	}
335
 
336
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
337
		List<Valeur> liste = listeValeurs.toList();
338
		if (listeValeurs.getId().equals(config.getListeId("autreCollection"))) {
339
			if (autreCollectionTrukCp != null && autreCollectionTrukCp.getItemByItemId("autreCollectionTrukCacGrpChp") == null) {
340
				autreCollectionTrukCacGrpChp.setId("autreCollectionTrukCacGrpChp");
341
				autreCollectionAutreChp = new TextField<String>();
342
				Formulaire.creerChoixMultipleCac(autreCollectionTrukCp, autreCollectionTrukCacGrpChp, listeValeurs, autreCollectionAutreChp);
343
			}
344
		}
345
		if (listeValeurs.getId().equals(config.getListeId("actionValorisation"))) {
346
			actionAutreChp = new TextField<String>();
347
			Formulaire.creerChoixMultipleCac(actionTrukCp, actionTrukCacGrpChp, listeValeurs, actionAutreChp);
348
		}
349
		if (listeValeurs.getId().equals(config.getListeId("continentEtFr"))) {
350
			provenanceRechercheAutreChp = new TextField<String>();
351
			Formulaire.creerChoixMultipleCac(provenanceRechercheTrukCp, provenanceRechercheTrukCacGrpChp, listeValeurs, provenanceRechercheAutreChp);
352
		}
353
		if (listeValeurs.getId().equals(config.getListeId("typeRecherche"))) {
354
			typeRechercheAutreChp = new TextField<String>();
355
			Formulaire.creerChoixMultipleCac(typeRechercheTrukCp, typeRechercheTrukCacGrpChp, listeValeurs, typeRechercheAutreChp);
356
		}
357
	}
358
 
359
	public void afficherChampSupplementaire(Radio radioBtn) {
360
		//GWT.log("Nom btn : "+radioBtn.getName()+" - Nom group : "+radioBtn.getGroup().getName(), null);
361
		// Valeur du bouton radio déclenchant l'affichage des composants cachés
362
		String valeurPourAfficher = "oui";
363
 
364
		// Construction de la liste des composants à afficher/cacher
365
		String radioGroupeNom = radioBtn.getGroup().getName();
366
		ArrayList<Object> composants = new ArrayList<Object>();
367
		if (radioGroupeNom.equals("action_mark_grp")) {
368
			composants.add(actionTrukCp);
369
		} else if (radioGroupeNom.equals("future_action_mark_grp")) {
370
			composants.add(futureActionChp);
371
		} else if (radioGroupeNom.equals("sans_motif_acces_mark_grp")) {
372
			composants.add(sansMotifAccesChp);
373
		} else if (radioGroupeNom.equals("avec_motif_acces_mark_grp")) {
374
			composants.add(avecMotifAccesChp);
375
		} else if (radioGroupeNom.equals("recherche_mark_grp")) {
376
			composants.add(provenanceRechercheTrukCp);
377
			composants.add(typeRechercheTrukCp);
378
		}
379
 
380
		// Nous affichons/cachons les composant de la liste
381
		final int nbreComposants = composants.size();
382
		//GWT.log("Id : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax, null);
383
		//Window.alert("Radio grp nom : "+radioGroupeNom+" - Id btn : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax);
384
		for (int i = 0; i < nbreComposants; i++) {
385
			// En fonction du type de bouton cliquer, on affiche ou cache les champs
386
			String type = radioBtn.getBoxLabel().toLowerCase();
387
			//GWT.log(type, null);
388
			if (radioBtn.getValue() == true) {
389
				if (type.equals(valeurPourAfficher)) {
390
					((Component) composants.get(i)).show();
391
				} else {
392
					((Component) composants.get(i)).hide();
393
				}
394
			}
395
			// Si on a à faire à un ContentPanel, on l'actualise pour déclencher l'affichage
396
			if (composants.get(i) instanceof ContentPanel) {
397
				((ContentPanel) composants.get(i)).layout();
398
			}
399
		}
400
	}
401
}