Subversion Repositories eFlore/Applications.coel

Rev

Rev 1218 | Rev 1234 | 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;
638 jp_milcent 2
 
875 jpm 3
import java.util.ArrayList;
4
 
975 jpm 5
import org.tela_botanica.client.ComposantClass;
638 jp_milcent 6
import org.tela_botanica.client.Mediateur;
858 jpm 7
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;
1218 cyprien 8
import org.tela_botanica.client.composants.InfoLogger;
638 jp_milcent 9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.Information;
11
import org.tela_botanica.client.modeles.MenuApplicationId;
12
import org.tela_botanica.client.modeles.Valeur;
935 jpm 13
import org.tela_botanica.client.modeles.collection.Collection;
968 jpm 14
import org.tela_botanica.client.util.Debug;
875 jpm 15
import org.tela_botanica.client.util.UtilArray;
884 jpm 16
import org.tela_botanica.client.util.UtilString;
934 jpm 17
import org.tela_botanica.client.vues.Formulaire;
935 jpm 18
import org.tela_botanica.client.vues.structure.StructureForm;
638 jp_milcent 19
 
858 jpm 20
import com.extjs.gxt.ui.client.event.BaseEvent;
638 jp_milcent 21
import com.extjs.gxt.ui.client.event.Events;
22
import com.extjs.gxt.ui.client.event.Listener;
23
import com.extjs.gxt.ui.client.widget.Info;
875 jpm 24
import com.extjs.gxt.ui.client.widget.MessageBox;
638 jp_milcent 25
import com.extjs.gxt.ui.client.widget.TabItem;
26
import com.extjs.gxt.ui.client.widget.TabPanel;
858 jpm 27
import com.extjs.gxt.ui.client.widget.form.FieldSet;
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;
638 jp_milcent 31
import com.google.gwt.core.client.GWT;
32
 
33
public class CollectionForm extends Formulaire implements Rafraichissable {
34
 
867 jpm 35
	protected Collection collection = null;
36
	protected Collection collectionCollectee = null;
638 jp_milcent 37
 
858 jpm 38
	private ChampComboBoxListeValeurs typesCollectionCombo = null;
638 jp_milcent 39
 
775 jpm 40
	private TabPanel onglets = null;
867 jpm 41
	private CollectionFormGeneral generalOnglet = null;
42
	private CollectionFormPersonne personneOnglet = null;
43
	private CollectionFormPublication publicationOnglet = null;
44
	private CollectionFormDescription descriptionOnglet = null;
45
	private CollectionFormContenu contenuOnglet = null;
46
	private CollectionFormInventaire inventaireOnglet = null;
997 jpm 47
	private CollectionFormCommentaire commentaireOnglet = null;
858 jpm 48
	private TextField<String> nomChp = null;
687 jp_milcent 49
 
883 jpm 50
	public CollectionForm(Mediateur mediateurCourrant, String collectionId) {
51
		initialiserCollectionForm(mediateurCourrant, collectionId);
52
	}
53
 
54
	private void initialiserCollectionForm(Mediateur mediateurCourrant, String collectionId) {
55
		collection = new Collection();
56
		collection.setId(collectionId);
57
 
884 jpm 58
		String modeDeCreation = (UtilString.isEmpty(collection.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
648 jp_milcent 59
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.COLLECTION);
883 jpm 60
 
1098 jpm 61
		genererTitreFormulaire();
1084 jpm 62
 
63
		creerOnglets();
858 jpm 64
		creerFieldsetPrincipal();
883 jpm 65
 
66
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
1041 gduche 67
			mediateurCourrant.selectionnerCollection(this, collectionId, null);
883 jpm 68
			mediateurCourrant.selectionnerCollectionAPersonne(this, collectionId, null);
69
			mediateurCourrant.selectionnerCollectionAPublication(this, collectionId);
997 jpm 70
			mediateurCourrant.selectionnerCollectionACommentaire(this, collectionId);
883 jpm 71
		}
638 jp_milcent 72
	}
73
 
1098 jpm 74
	private void genererTitreFormulaire() {
1084 jpm 75
		String titre = i18nC.collectionTitreFormAjout();
76
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1098 jpm 77
			 titre = i18nC.collectionTitreFormModif();
78
			 if (collection != null) {
79
				 titre += " - "+i18nC.id()+": "+collection.getId();
80
			 }
1084 jpm 81
		}
1098 jpm 82
		panneauFormulaire.setHeading(titre);
1084 jpm 83
	}
84
 
858 jpm 85
	private void creerFieldsetPrincipal() {
86
		FieldSet principalFieldSet = new FieldSet();
87
		principalFieldSet.setHeading("Info");
88
		principalFieldSet.setCollapsible(true);
89
		principalFieldSet.setLayout(Formulaire.creerFormLayout(150, LabelAlign.LEFT));
90
 
91
		nomChp  = new TextField<String>();
92
		nomChp.setTabIndex(tabIndex++);
93
		nomChp.setFieldLabel(i18nC.nomCollection());
94
		nomChp.setAllowBlank(false);
975 jpm 95
		nomChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 96
		nomChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
858 jpm 97
		nomChp.getMessages().setBlankText(i18nC.champObligatoire());
98
		principalFieldSet.add(nomChp, new FormData(450, 0));
99
 
1084 jpm 100
		Listener<BaseEvent> ecouteurTypeCollection = new Listener<BaseEvent>() {
858 jpm 101
			@Override
102
			public void handleEvent(BaseEvent be) {
103
				Valeur valeur = typesCollectionCombo.getValue();
968 jpm 104
 
105
				// Gestion des onglets en fonction du type de collection
858 jpm 106
				mediateur.activerChargement("");
107
				if (valeur != null && valeur.getId().equals(Valeur.COLLECTION_NCD_HERBIER)) {
1084 jpm 108
					activerOngletsHerbier();
858 jpm 109
				} else {
1084 jpm 110
					activerOngletsDefaut();
858 jpm 111
				}
112
				mediateur.desactiverChargement();
975 jpm 113
			}
1084 jpm 114
		};
115
 
116
		typesCollectionCombo = new ChampComboBoxListeValeurs(i18nC.typeCollectionNcd(), "typeCollectionNcd", tabIndex++);
117
		typesCollectionCombo.peupler(Valeur.COLLECTION_NCD_HERBIER);
118
		typesCollectionCombo.addStyleName(ComposantClass.OBLIGATOIRE);
119
		typesCollectionCombo.addListener(Events.Change, ecouteurTypeCollection);
120
		typesCollectionCombo.addListener(Events.Select, ecouteurTypeCollection);
980 jpm 121
		typesCollectionCombo.addListener(Events.Valid, creerEcouteurChampObligatoire());
858 jpm 122
		principalFieldSet.add(typesCollectionCombo, new FormData(150, 0));
123
		typesCollectionCombo.fireEvent(Events.Select);
124
 
125
		panneauFormulaire.setTopComponent(principalFieldSet);
126
	}
127
 
1084 jpm 128
	private void activerOngletsDefaut() {
129
		if (onglets.findItem(CollectionFormGeneral.ID, false) == null) {
130
			onglets.add(generalOnglet);
131
		}
132
		if (onglets.findItem(CollectionFormPersonne.ID, false) == null) {
133
			onglets.add(personneOnglet);
134
		}
135
		if (onglets.findItem(CollectionFormPublication.ID, false) != null) {
136
			onglets.remove(publicationOnglet);
137
		}
138
		if (onglets.findItem(CollectionFormDescription.ID, false) != null) {
139
			onglets.remove(descriptionOnglet);
140
		}
141
		if (onglets.findItem(CollectionFormContenu.ID, false) != null) {
142
			onglets.remove(contenuOnglet);
143
		}
144
		if (onglets.findItem(CollectionFormInventaire.ID, false) != null) {
145
			onglets.remove(inventaireOnglet);
146
		}
147
		if (onglets.findItem(CollectionFormCommentaire.ID, false) != null) {
148
			onglets.remove(commentaireOnglet);
149
		}
150
		panneauFormulaire.layout();
151
	}
858 jpm 152
 
1084 jpm 153
	private void activerOngletsHerbier() {
154
		if (onglets.findItem(CollectionFormGeneral.ID, false) == null) {
155
			onglets.add(generalOnglet);
156
		}
157
		if (onglets.findItem(CollectionFormPersonne.ID, false) == null) {
158
			onglets.add(personneOnglet);
159
		}
160
		if (onglets.findItem(CollectionFormPublication.ID, false) == null) {
161
			onglets.add(publicationOnglet);
162
		}
163
		if (onglets.findItem(CollectionFormDescription.ID, false) == null) {
164
			onglets.add(descriptionOnglet);
165
		}
166
		if (onglets.findItem(CollectionFormContenu.ID, false) == null) {
167
			onglets.add(contenuOnglet);
168
		}
169
		if (onglets.findItem(CollectionFormInventaire.ID, false) == null) {
170
			onglets.add(inventaireOnglet);
171
		}
172
		if (onglets.findItem(CollectionFormCommentaire.ID, false) == null) {
173
			onglets.add(commentaireOnglet);
174
		}
175
		panneauFormulaire.layout();
858 jpm 176
	}
177
 
1084 jpm 178
	private void creerOnglets() {
179
		onglets = new TabPanel();
638 jp_milcent 180
		// NOTE : pour faire apparaître les scrollBar il faut définir la hauteur du panneau d'onglets à 100% (autoHeight ne semble pas fonctionner)
1084 jpm 181
		onglets.setHeight("100%");
638 jp_milcent 182
 
183
		// Onlget formulaire GENERAL
1084 jpm 184
		onglets.add(creerOngletGeneral());
638 jp_milcent 185
 
186
		// Onlget formulaire AUTEUR
1084 jpm 187
		onglets.add(creerOngletPersonne());
638 jp_milcent 188
 
687 jp_milcent 189
		// Onlget formulaire PUBLICATION
1084 jpm 190
		onglets.add(creerOngletPublication());
687 jp_milcent 191
 
638 jp_milcent 192
		// Onlget formulaire DESCRIPTION
1084 jpm 193
		onglets.add(creerOngletDescription());
638 jp_milcent 194
 
195
		// Onlget formulaire CONTENU
1084 jpm 196
		onglets.add(creerOngletContenu());
638 jp_milcent 197
 
198
		// Onlget formulaire INVENTAIRE
1084 jpm 199
		onglets.add(creerOngletInventaire());
638 jp_milcent 200
 
997 jpm 201
		// Onlget formulaire COMMENTAIRE
1084 jpm 202
		onglets.add(creerOngletCommentaire());
997 jpm 203
 
638 jp_milcent 204
		// Sélection de l'onglet par défaut
1084 jpm 205
		onglets.setSelection(generalOnglet);
638 jp_milcent 206
 
1084 jpm 207
		panneauFormulaire.add(onglets);
638 jp_milcent 208
	}
209
 
210
	private TabItem creerOngletGeneral() {
687 jp_milcent 211
		generalOnglet = new CollectionFormGeneral(this);
638 jp_milcent 212
		return generalOnglet;
213
	}
214
 
860 jpm 215
	private TabItem creerOngletPersonne() {
216
		personneOnglet = new CollectionFormPersonne(this);
217
		return personneOnglet;
638 jp_milcent 218
	}
219
 
687 jp_milcent 220
	private TabItem creerOngletPublication() {
720 jp_milcent 221
		publicationOnglet = new CollectionFormPublication(this);
687 jp_milcent 222
		return publicationOnglet;
223
	}
224
 
638 jp_milcent 225
	private TabItem creerOngletDescription() {
807 jpm 226
		descriptionOnglet = new CollectionFormDescription(this);
638 jp_milcent 227
		return descriptionOnglet;
228
	}
229
 
230
	private TabItem creerOngletContenu() {
858 jpm 231
		contenuOnglet = new CollectionFormContenu(this);
638 jp_milcent 232
		return contenuOnglet;
233
	}
234
 
235
	private TabItem creerOngletInventaire() {
862 jpm 236
		inventaireOnglet = new CollectionFormInventaire(this);
638 jp_milcent 237
		return inventaireOnglet;
238
	}
239
 
997 jpm 240
	private TabItem creerOngletCommentaire() {
241
		commentaireOnglet = new CollectionFormCommentaire(this);
242
		return commentaireOnglet;
243
	}
244
 
638 jp_milcent 245
	public void rafraichir(Object nouvellesDonnees) {
1218 cyprien 246
Debug.log("<$$$> BEGIN CollectionForm.rafraichir()");
247
 
858 jpm 248
		if (nouvellesDonnees instanceof Information) {
249
			Information info = (Information) nouvellesDonnees;
250
			rafraichirInformation(info);
251
		} else {
1163 jpm 252
			Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
638 jp_milcent 253
		}
1218 cyprien 254
Debug.log("<$$$> CollectionForm.rafraichir() : appel à controlerFermeture()");
255
		controlerFermeture();
858 jpm 256
 
1218 cyprien 257
Debug.log("<$$$> END CollectionForm.rafraichir()");
638 jp_milcent 258
	}
259
 
687 jp_milcent 260
	private void rafraichirInformation(Information info) {
638 jp_milcent 261
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
1163 jpm 262
			Debug.log("MESSAGES:\n"+info.getMessages().toString());
638 jp_milcent 263
		}
1163 jpm 264
		String infoType = info.getType();
265
 
266
		if (infoType.equals("modif_collection")) {
1218 cyprien 267
			InfoLogger.display("Modification d'une collection", info.toString());
1163 jpm 268
		} else if (infoType.equals("selection_collection")) {
1218 cyprien 269
			InfoLogger.display("Modification d'une collection", info.toString());
638 jp_milcent 270
			if (info.getDonnee(0) != null) {
271
				collection = (Collection) info.getDonnee(0);
272
			}
867 jpm 273
			peupler();
1098 jpm 274
			genererTitreFormulaire();
1163 jpm 275
		} else if (infoType.equals("ajout_collection")) {
875 jpm 276
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
277
				String collectionId = (String) info.getDonnee(0);
1218 cyprien 278
				InfoLogger.display("Ajout d'une collection", "La collection '"+collectionId+"' a bien été ajoutée");
875 jpm 279
 
280
				// Suite à la récupération de l'id de l'institution nouvellement ajoutée nous ajoutons les personnes et les publications liées
281
				personneOnglet.rafraichir(info);
282
				publicationOnglet.rafraichir(info);
1098 jpm 283
				commentaireOnglet.rafraichir(info);
875 jpm 284
			} else {
1218 cyprien 285
				InfoLogger.display("Ajout d'une collection", info.toString());
875 jpm 286
			}
1163 jpm 287
		} else if (infoType.equals("liste_collection_a_personne")) {
883 jpm 288
			personneOnglet.rafraichir(info);
1163 jpm 289
		} else if (infoType.equals("liste_collection_a_publication")) {
883 jpm 290
			publicationOnglet.rafraichir(info);
1163 jpm 291
		} else if (infoType.equals("liste_collection_a_commentaire")) {
997 jpm 292
			commentaireOnglet.rafraichir(info);
638 jp_milcent 293
		}
294
	}
867 jpm 295
 
296
	private void peupler() {
297
		if (collection != null) {
298
			nomChp.setValue(collection.getNom());
299
			typesCollectionCombo.peupler(collection.getTypeNcd());
300
 
301
			peuplerOnglets();
302
		}
638 jp_milcent 303
	}
304
 
867 jpm 305
	private void peuplerOnglets() {
306
		generalOnglet.peupler();
948 jpm 307
		descriptionOnglet.peupler();
954 jpm 308
		contenuOnglet.peupler();
309
		inventaireOnglet.peupler();
997 jpm 310
		commentaireOnglet.peupler();
867 jpm 311
	}
312
 
934 jpm 313
	public boolean soumettreFormulaire() {
1218 cyprien 314
 
1219 cyprien 315
Debug.log("<$$$> BEGIN CollectionForm.soumettreFormulaire()");
1218 cyprien 316
 
638 jp_milcent 317
		// Vérification de la validité des champs du formulaire
948 jpm 318
		boolean formulaireValide = verifierFormulaire();
319
		if (formulaireValide) {
638 jp_milcent 320
			// Collecte des données du formulaire
949 jpm 321
			Collection collectionAEnregistrer = collecterCollection();
1219 cyprien 322
 
323
Debug.log("<$$$> CollectionForm.soumettreFormulaire(), collectionAEnregistrer.getProperties()="+collectionAEnregistrer.getProperties().toString());
324
 
638 jp_milcent 325
			if (mode.equals(MODE_AJOUTER)) {
949 jpm 326
				mediateur.ajouterCollection(this, collectionAEnregistrer);
638 jp_milcent 327
			} else if (mode.equals(MODE_MODIFIER)) {
949 jpm 328
				if (collectionAEnregistrer == null) {
1218 cyprien 329
					InfoLogger.display("Modification d'une collection", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
330
					this.controlerFermeture();
638 jp_milcent 331
				} else {
949 jpm 332
					mediateur.modifierCollection(this, collectionAEnregistrer);
638 jp_milcent 333
				}
334
			}
875 jpm 335
 
336
			soumettreOnglets();
638 jp_milcent 337
		}
1218 cyprien 338
 
1219 cyprien 339
Debug.log("<$$$> END CollectionForm.soumettreFormulaire()");
1218 cyprien 340
 
948 jpm 341
		return formulaireValide;
638 jp_milcent 342
	}
343
 
875 jpm 344
	private void soumettreOnglets() {
345
		personneOnglet.soumettre();
907 jpm 346
		publicationOnglet.soumettre();
997 jpm 347
		commentaireOnglet.soumettre();
875 jpm 348
	}
349
 
934 jpm 350
	public void reinitialiserFormulaire() {
775 jpm 351
		if (mode.equals(StructureForm.MODE_MODIFIER)) {
352
			mediateur.afficherFormCollection(collection.getId());
353
		} else {
354
			mediateur.afficherFormCollection(null);
355
		}
356
	}
357
 
638 jp_milcent 358
	private Collection collecterCollection() {
359
		collectionCollectee = (Collection) collection.cloner(new Collection());
954 jpm 360
 
867 jpm 361
		this.collecter();
362
		collecterOnglets();
954 jpm 363
 
638 jp_milcent 364
		Collection collectionARetourner = null;
949 jpm 365
		if (!collectionCollectee.comparer(collection) || !collectionCollectee.getBotanique().comparer(collection.getBotanique())) {
638 jp_milcent 366
			collectionARetourner = collection = collectionCollectee;
367
		}
368
		return collectionARetourner;
369
	}
370
 
867 jpm 371
	private void collecter() {
372
		collectionCollectee.setNom(nomChp.getValue());
373
		collectionCollectee.setTypeNcd(typesCollectionCombo.getValue().getId());
638 jp_milcent 374
	}
375
 
867 jpm 376
	private void collecterOnglets() {
377
		generalOnglet.collecter();
883 jpm 378
		personneOnglet.collecter();
907 jpm 379
		publicationOnglet.collecter();
948 jpm 380
		descriptionOnglet.collecter();
954 jpm 381
		contenuOnglet.collecter();
382
		inventaireOnglet.collecter();
997 jpm 383
		commentaireOnglet.collecter();
867 jpm 384
	}
385
 
934 jpm 386
	public boolean verifierFormulaire() {
875 jpm 387
		ArrayList<String> messages = new ArrayList<String>();
388
 
389
		// Vérification des infos sur le nom de la collection
968 jpm 390
		if (nomChp.getValue() == null
391
				|| nomChp.getValue().equals("")
392
				|| (mode.equals(MODE_MODIFIER) && collection != null && collection.getNom().equals(""))) {
875 jpm 393
			messages.add("Veuillez donner un nom à la collection.");
394
		}
395
 
396
		// Vérification des infos sur le type de collection
968 jpm 397
		if (typesCollectionCombo.getValue() == null
398
				|| typesCollectionCombo.getValue().equals("")
399
				|| (mode.equals(MODE_MODIFIER) && collection != null && collection.getIdProjet().equals(""))) {
875 jpm 400
			messages.add("Veuillez sélectionner un type pour la collection.");
401
		}
402
 
403
		messages.addAll(verifierOnglets());
404
 
405
		// Affichage des messages d'alerte
406
		if (messages.size() != 0) {
407
			String[] tableauDesMessages = {};
408
			tableauDesMessages = messages.toArray(tableauDesMessages);
409
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDesMessages, "<br />"), null);
410
			return false;
411
		}
638 jp_milcent 412
		return true;
413
	}
875 jpm 414
 
415
	private ArrayList<String> verifierOnglets() {
416
		ArrayList<String> messages = new ArrayList<String>();
417
		messages.addAll(generalOnglet.verifier());
418
		messages.addAll(personneOnglet.verifier());
419
		return messages;
420
	}
638 jp_milcent 421
}