Subversion Repositories eFlore/Applications.coel

Rev

Rev 548 | Rev 716 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
219 aurelien 1
package org.tela_botanica.client.vues;
2
 
227 aurelien 3
import java.util.ArrayList;
4
import java.util.Iterator;
365 jp_milcent 5
import java.util.List;
227 aurelien 6
import java.util.Set;
7
 
219 aurelien 8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.RegistreId;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
705 aurelien 11
import org.tela_botanica.client.modeles.Information;
239 aurelien 12
import org.tela_botanica.client.modeles.Personne;
227 aurelien 13
import org.tela_botanica.client.modeles.PersonneListe;
219 aurelien 14
import org.tela_botanica.client.modeles.Publication;
705 aurelien 15
import org.tela_botanica.client.modeles.PublicationListe;
219 aurelien 16
import org.tela_botanica.client.modeles.Structure;
227 aurelien 17
import org.tela_botanica.client.modeles.StructureListe;
219 aurelien 18
 
19
import com.extjs.gxt.ui.client.Registry;
20
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
705 aurelien 21
import com.extjs.gxt.ui.client.event.BaseEvent;
505 jp_milcent 22
import com.extjs.gxt.ui.client.event.ButtonEvent;
705 aurelien 23
import com.extjs.gxt.ui.client.event.Events;
24
import com.extjs.gxt.ui.client.event.Listener;
219 aurelien 25
import com.extjs.gxt.ui.client.event.SelectionListener;
26
import com.extjs.gxt.ui.client.store.ListStore;
227 aurelien 27
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
219 aurelien 28
import com.extjs.gxt.ui.client.widget.LayoutContainer;
705 aurelien 29
import com.extjs.gxt.ui.client.widget.MessageBox;
219 aurelien 30
import com.extjs.gxt.ui.client.widget.button.Button;
31
import com.extjs.gxt.ui.client.widget.form.ComboBox;
32
import com.extjs.gxt.ui.client.widget.form.DateField;
33
import com.extjs.gxt.ui.client.widget.form.FieldSet;
34
import com.extjs.gxt.ui.client.widget.form.FormPanel;
35
import com.extjs.gxt.ui.client.widget.form.TextField;
36
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
37
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
38
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
39
import com.extjs.gxt.ui.client.widget.layout.FormData;
40
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
705 aurelien 41
import com.google.gwt.core.client.GWT;
42
import com.google.gwt.user.client.Window;
227 aurelien 43
import com.google.gwt.user.client.ui.HTML;
705 aurelien 44
import com.google.gwt.user.client.ui.Label;
219 aurelien 45
 
444 jp_milcent 46
public class PublicationForm extends LayoutContainer implements Rafraichissable {
219 aurelien 47
 
48
	private Mediateur mediateur = null;
49
 
505 jp_milcent 50
	FormPanel panel = null;
219 aurelien 51
 
505 jp_milcent 52
	private String idStructureEdition = "";
53
	private String idPublication = "";
54
	private String idProjet = "";
219 aurelien 55
 
505 jp_milcent 56
	private PersonneListe listePersonneAuteur = null;
57
	private ListStore<Personne> storeAuteurs = null;
239 aurelien 58
	private ArrayList<ComboBox<Personne>> listeAuteurs = null;
227 aurelien 59
 
219 aurelien 60
	private TextField<String> nomArticle = null;
61
	private TextField<String> intituleCollPub = null;
62
	private TextField<String> uriPub = null;
63
 
64
	private ComboBox<Structure> comboListeEditeurs = null;
65
	private ListStore<Structure> storeEditeurs = null;
66
	private DateField datePub = null;
67
	private TextField<String> tomPub = null;
68
	private TextField<String> fasciculePub = null;
69
	private TextField<String> pagesPub = null;
70
	private String mode = "AJOUT";
71
 
705 aurelien 72
	private boolean formValide = false;
73
	private boolean validationPublication = false;
74
	private boolean validationAuteurs = false;
75
 
505 jp_milcent 76
	FieldSet fieldSetAuteurs = null;
239 aurelien 77
 
78
	private Publication publi;
219 aurelien 79
 
705 aurelien 80
	protected boolean listeAuteurInitialisee = false;
81
 
82
	private LayoutContainer conteneurChamps;
83
 
84
	private Button annulerBtn;
85
 
86
	private Button validerBtn;
87
 
444 jp_milcent 88
	public PublicationForm() {
705 aurelien 89
 
90
		setId("x-form-pub");
219 aurelien 91
		setLayout(new FitLayout());
92
		mediateur = Registry.get(RegistreId.MEDIATEUR);
93
 
239 aurelien 94
		storeAuteurs = new ListStore<Personne>();
95
		listePersonneAuteur = new PersonneListe();
96
 
219 aurelien 97
		// Création de la disposition : FIELDSET
98
		FormLayout layoutFieldset = new FormLayout();
99
		layoutFieldset.setLabelWidth(200);
505 jp_milcent 100
		//layoutFieldset.setPadding(4);
219 aurelien 101
 
102
		//+-----------------------------------------------------------------------------------------------------------+
103
		// Création du panneau Formulaire
705 aurelien 104
		panel = new FormPanel();
219 aurelien 105
		panel.setFrame(true);
106
		panel.setIconStyle("icone-form-ajouter");
107
		panel.setCollapsible(false);
108
		panel.setHeading("Ajout d'une publication");
109
		panel.setButtonAlign(HorizontalAlignment.CENTER);
110
		panel.setLayout(new FlowLayout());
111
 
112
		add(panel);
113
 
114
		// Fieldset Auteur
227 aurelien 115
		fieldSetAuteurs = new FieldSet();
219 aurelien 116
		fieldSetAuteurs.setHeading("Auteur(s)");
117
		fieldSetAuteurs.setCollapsible(true);
118
		fieldSetAuteurs.setLayout(layoutFieldset);
119
 
120
		panel.add(fieldSetAuteurs);
121
 
505 jp_milcent 122
		genererChampsAuteur("", false);
219 aurelien 123
 
124
		// Création de la disposition : FIELDSET
125
		FormLayout layoutFieldset2 = new FormLayout();
126
		layoutFieldset.setLabelWidth(200);
505 jp_milcent 127
		//layoutFieldset.setPadding(4);
219 aurelien 128
 
129
		// Fieldset Infos Générales
130
		FieldSet fieldSetInfosGen = new FieldSet();
131
		fieldSetInfosGen.setHeading("Informations générales");
132
		fieldSetInfosGen.setCollapsible(true);
133
		fieldSetInfosGen.setLayout(layoutFieldset2);
134
 
135
		panel.add(fieldSetInfosGen);
136
 
137
		nomArticle = new TextField<String>();
138
		nomArticle.setName("cpu");
139
		nomArticle.setFieldLabel("Titre de l'article ou de l'ouvrage");
140
 
141
		intituleCollPub = new TextField<String>();
142
		intituleCollPub.setFieldLabel("Intitulé de la collection ou de la revue");
143
 
144
		uriPub = new TextField<String>();
145
		uriPub.setFieldLabel("URI de la publication");
146
 
147
		fieldSetInfosGen.add(nomArticle);
148
		fieldSetInfosGen.add(intituleCollPub);
149
		fieldSetInfosGen.add(uriPub);
150
 
151
		// Création de la disposition : FIELDSET
152
		FormLayout layoutFieldset3 = new FormLayout();
505 jp_milcent 153
		//layoutFieldset.setPadding(4);
219 aurelien 154
 
155
		// Fieldset Edition
156
		FieldSet fieldSetEdition = new FieldSet();
157
		fieldSetEdition.setHeading("Edition");
158
		fieldSetEdition.setCollapsible(true);
159
		fieldSetEdition.setLayout(layoutFieldset3);
160
 
161
		panel.add(fieldSetEdition);
162
 
163
		storeEditeurs = new ListStore<Structure>();
164
		comboListeEditeurs = new ComboBox<Structure>();
165
		comboListeEditeurs.setEmptyText("Sélectionner un editeur...");
166
		comboListeEditeurs.setFieldLabel("Editeur de la publication");
167
		comboListeEditeurs.setDisplayField("nom");
168
		comboListeEditeurs.setStore(storeEditeurs);
169
		comboListeEditeurs.setEditable(true);
170
		comboListeEditeurs.setTypeAhead(true);
227 aurelien 171
		comboListeEditeurs.setTriggerAction(TriggerAction.QUERY);
219 aurelien 172
 
173
		datePub = new DateField();
174
		datePub.setFieldLabel("Date de publication");
175
 
176
		tomPub = new TextField<String>();
177
		tomPub.setFieldLabel("Tome");
178
 
179
		fasciculePub = new TextField<String>();
180
		fasciculePub.setFieldLabel("Fascicule");
181
 
182
		pagesPub = new TextField<String>();
183
		pagesPub.setFieldLabel("Pages");
184
 
505 jp_milcent 185
		fieldSetEdition.add(comboListeEditeurs, new FormData(500, 20));
705 aurelien 186
		fieldSetEdition.add(datePub, new FormData(100, 20));
219 aurelien 187
		fieldSetEdition.add(tomPub);
188
		fieldSetEdition.add(fasciculePub);
505 jp_milcent 189
		fieldSetEdition.add(pagesPub, new FormData(100, 20));
219 aurelien 190
 
191
		// Ajout des boutons au panneau formulaire
705 aurelien 192
		annulerBtn = new Button("Annuler");
505 jp_milcent 193
		annulerBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
219 aurelien 194
			@Override
505 jp_milcent 195
			public void componentSelected(ButtonEvent be) {
219 aurelien 196
				mediateur.clicMenu("Publications");
197
			}
198
		});
199
		panel.addButton(annulerBtn);
705 aurelien 200
 
201
		validerBtn = new Button("Valider");
505 jp_milcent 202
		validerBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
219 aurelien 203
			@Override
505 jp_milcent 204
			public void componentSelected(ButtonEvent be) {
219 aurelien 205
				soumettreFormulaire();
206
			}
207
		});
705 aurelien 208
 
219 aurelien 209
		panel.addButton(validerBtn);
210
 
705 aurelien 211
		mediateur.clicObtenirListeEditeurs(this);
239 aurelien 212
		mediateur.clicObtenirListeAuteurs(this);
219 aurelien 213
	}
214
 
705 aurelien 215
	public void rafraichir(Object nouvellesDonnees) {
227 aurelien 216
 
217
		// Si on a reçu les details d'une publication
705 aurelien 218
		if (nouvellesDonnees instanceof Publication) {
227 aurelien 219
			mode = "MODIF" ;
220
 
705 aurelien 221
			publi = (Publication) nouvellesDonnees;
505 jp_milcent 222
			genererChampsAuteur(publi.getIdAuteur(), false);
705 aurelien 223
			mediateur.clicObtenirListeAuteurs(this);
219 aurelien 224
			nomArticle.setValue(publi.getTitre());
225
			intituleCollPub.setValue(publi.getCollection());
226
			uriPub.setValue(publi.getURI());
227
			datePub.setRawValue(publi.getDateParution());
228
			tomPub.setValue(publi.getIndicationNvt());
229
			fasciculePub.setValue(publi.getFascicule());
230
			pagesPub.setValue(publi.getPages());
231
 
229 aurelien 232
			idPublication = publi.getId();
227 aurelien 233
			idStructureEdition = publi.getEditeur();
229 aurelien 234
			idProjet = publi.getProjet() ;
227 aurelien 235
 
219 aurelien 236
			panel.setHeading("Modification d'une publication");
227 aurelien 237
		}
238
 
239
		// Si on a reçu une liste des editeurs
705 aurelien 240
		if(nouvellesDonnees instanceof StructureListe) {
227 aurelien 241
			storeEditeurs.removeAll();
705 aurelien 242
			StructureListe listeStructure = (StructureListe) nouvellesDonnees;
365 jp_milcent 243
			storeEditeurs.add((List<Structure>) listeStructure.toList());
219 aurelien 244
 
505 jp_milcent 245
			if (mode.equals("MODIF")) {
365 jp_milcent 246
				comboListeEditeurs.setValue((Structure) listeStructure.get(idStructureEdition));
227 aurelien 247
			}
248
			comboListeEditeurs.expand();
219 aurelien 249
		}
239 aurelien 250
 
705 aurelien 251
		if (nouvellesDonnees instanceof Information) {
252
			Information nouvellesInfos = (Information)nouvellesDonnees;
253
 
254
			if(nouvellesInfos.getType().equals("liste_personne")) {
255
				listePersonneAuteur = (PersonneListe)nouvellesInfos.getDonnee(0);
256
				storeAuteurs.removeAll();
257
				for (Iterator<String> it = listePersonneAuteur.keySet().iterator(); it.hasNext();) {
258
					Personne p = listePersonneAuteur.get(it.next());
259
					storeAuteurs.add(p);
260
				}
261
 
262
				if (mode.equals("MODIF")) {
263
					genererChampsAuteur(publi.getIdAuteur(), false);
264
				} else {
265
					listeAuteurs.get(0).expand();
266
				}
267
				listeAuteurInitialisee = true;
239 aurelien 268
			}
269
 
705 aurelien 270
			if (nouvellesInfos.getType().equals("publication_valide")) {
271
				Window.alert("Ajout de publication terminé ! "+nouvellesInfos.getDeboguage(0));
272
				validationPublication = true;
239 aurelien 273
			}
705 aurelien 274
 
275
			if (nouvellesInfos.getType().equals("auteur_valide")) {
276
				validationAuteurs = true;
277
			}
278
 
279
			if(formValide && validationPublication && validationAuteurs) {
280
				mediateur.rechargerListePublication();
281
			}
239 aurelien 282
		}
219 aurelien 283
	}
284
 
285
	private void soumettreFormulaire() {
505 jp_milcent 286
		String auteur = "";
705 aurelien 287
		String idAuteur = "";
505 jp_milcent 288
		for (int i = 0; i < listeAuteurs.size(); i++) {
705 aurelien 289
			if(listeAuteurs.get(i).getValue() != null) {
290
				idAuteur += listeAuteurs.get(i).getValue().getId();
291
				auteur += listeAuteurs.get(i).getValue().getNom()+ " "+listeAuteurs.get(i).getValue().getPrenom();
292
				if (i != listeAuteurs.size() -1) {
293
					auteur += "|";
294
					idAuteur += "|";
295
				}
227 aurelien 296
			}
297
		}
705 aurelien 298
 
299
		String erreurs = "";
300
 
301
		if(idAuteur == null || idAuteur.equals("")) {
302
			erreurs += "Veuillez entrer au moins un auteur ! ";
303
		}
304
 
219 aurelien 305
		String nomArt = nomArticle.getValue();
705 aurelien 306
		if(nomArt == null || nomArt.equals("")) {
307
			erreurs += "Veuillez entrer le nom de l'article ! ";
308
		}
309
 
219 aurelien 310
		String collPub = intituleCollPub.getValue();
705 aurelien 311
		if(collPub == null || collPub.equals("")) {
312
			erreurs += "Veuillez entrer l'intitulé de la collection ! ";
313
		}
314
 
315
		String pub = nomArticle.getValue()+" "+intituleCollPub.getValue();
316
 
219 aurelien 317
		String uri = uriPub.getValue();
705 aurelien 318
		if(uri == null || uri.equals("")) {
319
			erreurs += "Veuillez entrer l'uri associée à la publication ! ";
320
		}
321
 
322
		String editeur = "";
323
 
324
		if(comboListeEditeurs.getValue() == null) {
325
			erreurs += "Veuillez sélectionner un éditeur ! ";
326
		} else {
327
			editeur = comboListeEditeurs.getValue().getId();
328
			if(editeur == null || editeur.equals("")) {
329
				erreurs += "Veuillez sélectionner un éditeur ! ";
330
			}
331
		}
332
 
219 aurelien 333
		String datePar = datePub.getRawValue();
705 aurelien 334
		if(datePar == null || datePar.equals("")) {
335
			erreurs += "Veuillez entrer une date ! ";
336
		}
219 aurelien 337
		String tome = tomPub.getValue();
705 aurelien 338
		if(tome == null || tome.equals("")) {
339
			erreurs += "Veuillez entrer un tome ! ";
340
		}
219 aurelien 341
		String fascicule = fasciculePub.getValue();
705 aurelien 342
		if(fascicule == null || fascicule.equals("")) {
343
			erreurs += "Veuillez entrer un fascicule ! ";
344
		}
219 aurelien 345
		String pages = pagesPub.getValue();
705 aurelien 346
		if(pages == null || pages.equals("")) {
347
			erreurs += "Veuillez entrer des pages ! ";
348
		}
219 aurelien 349
 
705 aurelien 350
		if(erreurs.length() > 0) {
351
			MessageBox.alert("Erreur dans la saisie des champs", erreurs, null);
352
			return;
353
		}
354
 
355
		formValide = true;
356
		this.setEnabled(false);
357
		mediateur.afficherPopinChargement();
358
 
219 aurelien 359
		if (mode.equals("AJOUT")) {
705 aurelien 360
			Publication publi = new Publication(pub,uri,auteur, idAuteur, collPub,nomArt,editeur,datePar,tome,fascicule,pages);
219 aurelien 361
			mediateur.ajouterPublication(this, publi);
362
		} else if (mode.equals("MODIF")) {
705 aurelien 363
			Publication publi = new Publication(idPublication,idProjet,pub,uri,auteur,idAuteur, collPub,nomArt,editeur,datePar,tome,fascicule,pages);
219 aurelien 364
			mediateur.modifierPublication(this, publi);
365
		}
366
	}
227 aurelien 367
 
368
	private void genererChampsAuteur(String auteursStr, boolean ajouter) {
705 aurelien 369
		String[] auteurs = auteursStr.split("|");
370
		conteneurChamps = new LayoutContainer();
227 aurelien 371
 
505 jp_milcent 372
		if (auteurs.length != 0) {
239 aurelien 373
			listeAuteurs = new ArrayList<ComboBox<Personne>>(auteurs.length);
505 jp_milcent 374
		} else {
239 aurelien 375
			listeAuteurs = new ArrayList<ComboBox<Personne>>(1);
227 aurelien 376
			ajouter = true ;
377
		}
378
 
379
		fieldSetAuteurs.removeAll();
380
		int i = 0;
381
 
505 jp_milcent 382
		for (i = 0; i < auteurs.length; i++) {
227 aurelien 383
			conteneurChamps.add(creerTextFieldEtBouton(auteurs[i]));
384
		}
385
 
505 jp_milcent 386
		if (ajouter) {
227 aurelien 387
			conteneurChamps.add(creerTextFieldEtBouton(null));
388
		}
389
 
390
		Button ajoutAuteurBtn = new Button("Ajouter un auteur");
505 jp_milcent 391
		ajoutAuteurBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
227 aurelien 392
 
393
			@Override
505 jp_milcent 394
			public void componentSelected(ButtonEvent be) {
705 aurelien 395
				creerTextFieldEtBouton("");
396
				int nbAuteurs = 1;
397
				for(Iterator<ComboBox<Personne>> it = listeAuteurs.iterator(); it.hasNext();) {
398
					if(listeAuteurs.size() > 1) {
399
						it.next().setFieldLabel("Auteur "+nbAuteurs);
400
						nbAuteurs++;
239 aurelien 401
					}
227 aurelien 402
				}
705 aurelien 403
				fieldSetAuteurs.layout(true);
227 aurelien 404
			}
405
 
406
		});
407
 
408
		fieldSetAuteurs.add(conteneurChamps);
409
		fieldSetAuteurs.add(ajoutAuteurBtn);
705 aurelien 410
		fieldSetAuteurs.layout(true);
227 aurelien 411
	}
412
 
413
	public HorizontalPanel creerTextFieldEtBouton(String valeurDefaut) {
705 aurelien 414
		final HorizontalPanel p = new HorizontalPanel();
227 aurelien 415
 
416
		// Création de la disposition : FIELDSET
417
		FormLayout layoutPanelTF = new FormLayout();
418
		p.setLayout(layoutPanelTF);
419
 
505 jp_milcent 420
		final ComboBox<Personne> tf = new ComboBox<Personne>();
239 aurelien 421
		tf.setDisplayField("fmt_nom_complet");
422
		tf.setStore(storeAuteurs);
705 aurelien 423
		tf.setEmptyText("Selectionnez un auteur...");
424
		String label = "Auteur ";
425
		tf.setFieldLabel(label);
239 aurelien 426
		if(valeurDefaut != null && !valeurDefaut.equals("") ) {
705 aurelien 427
			Personne auteur = listePersonneAuteur.get(valeurDefaut);
239 aurelien 428
			tf.setValue(auteur);
227 aurelien 429
		}
430
		listeAuteurs.add(tf);
431
 
705 aurelien 432
		tf.setSize(200, 20);
433
		LayoutContainer lc = new LayoutContainer();
434
		lc.setLayout(new FormLayout());
435
		lc.add(tf);
436
 
227 aurelien 437
		Button supp = new Button("-");
505 jp_milcent 438
		supp.addSelectionListener(new SelectionListener<ButtonEvent>() {
227 aurelien 439
			@Override
505 jp_milcent 440
			public void componentSelected(ButtonEvent be) {
705 aurelien 441
				int nbAuteurs = 1;
442
				if(listeAuteurs.size() != 1) {
443
					for(Iterator<ComboBox<Personne>> it = listeAuteurs.iterator(); it.hasNext();) {
444
							it.next().setFieldLabel("Auteur "+nbAuteurs);
445
							nbAuteurs++;
239 aurelien 446
					}
227 aurelien 447
				}
705 aurelien 448
				listeAuteurs.remove(tf);
449
				conteneurChamps.remove(p);
450
				fieldSetAuteurs.layout(true);
227 aurelien 451
			}
452
 
453
		});
705 aurelien 454
		p.add(lc);
227 aurelien 455
		p.add(supp);
705 aurelien 456
		conteneurChamps.add(p);
457
		fieldSetAuteurs.layout(true);
227 aurelien 458
 
505 jp_milcent 459
		return p;
227 aurelien 460
	}
705 aurelien 461
 
462
	public void obtenirListeAuteurs() {
463
		mediateur.clicObtenirListeAuteurs(this);
464
	}
465
 
505 jp_milcent 466
}