Subversion Repositories eFlore/Applications.coel

Rev

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