Subversion Repositories eFlore/Applications.coel

Rev

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