Subversion Repositories eFlore/Applications.coel

Rev

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