Subversion Repositories eFlore/Applications.coel

Rev

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