Subversion Repositories eFlore/Applications.coel

Rev

Rev 989 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
985 jpm 1
package org.tela_botanica.client.vues.commentaire;
2
 
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.List;
6
 
7
import org.tela_botanica.client.ComposantClass;
8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.images.Images;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.Information;
12
import org.tela_botanica.client.modeles.MenuApplicationId;
13
import org.tela_botanica.client.modeles.personne.Personne;
14
import org.tela_botanica.client.modeles.personne.PersonneListe;
15
import org.tela_botanica.client.modeles.publication.Publication;
16
import org.tela_botanica.client.modeles.publication.PublicationAPersonne;
17
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
18
import org.tela_botanica.client.modeles.structure.Structure;
19
import org.tela_botanica.client.modeles.structure.StructureListe;
20
import org.tela_botanica.client.util.Pattern;
21
import org.tela_botanica.client.util.UtilArray;
22
import org.tela_botanica.client.util.UtilString;
23
import org.tela_botanica.client.vues.Formulaire;
24
 
25
import com.extjs.gxt.ui.client.event.ButtonEvent;
26
import com.extjs.gxt.ui.client.event.Events;
27
import com.extjs.gxt.ui.client.event.SelectionListener;
28
import com.extjs.gxt.ui.client.store.ListStore;
29
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
30
import com.extjs.gxt.ui.client.widget.LayoutContainer;
31
import com.extjs.gxt.ui.client.widget.MessageBox;
32
import com.extjs.gxt.ui.client.widget.button.Button;
33
import com.extjs.gxt.ui.client.widget.form.ComboBox;
34
import com.extjs.gxt.ui.client.widget.form.FieldSet;
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.FlowLayout;
38
import com.extjs.gxt.ui.client.widget.layout.FormData;
39
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
40
import com.google.gwt.core.client.GWT;
41
 
42
 
43
public class CommentaireForm extends Formulaire implements Rafraichissable {
44
 
45
	private Publication publication;
46
	private PublicationAPersonneListe publicationAPersonneListe = null;
47
	private static boolean publicationAPersonneListeChargementOk = false;
48
	private PublicationAPersonneListe auteursAjoutes = null;
49
	private PublicationAPersonneListe auteursSupprimes = null;
50
 
51
	private FieldSet auteursFieldset = null;
52
	private ArrayList<ComboBox<Personne>> auteurComboboxListe = null;
53
	private LayoutContainer conteneurChamps;
54
	private ListStore<Personne> auteursStorePartage = null;
55
	private static boolean auteurStorePartageChargementOk = false;
56
 
57
	private FieldSet generalitesFieldset = null;
58
	private TextField<String> titreChp = null;
59
	private TextField<String> collectionChp = null;
60
	private TextField<String> uriChp = null;
61
 
62
	private FieldSet editionFieldset = null;
63
	private ComboBox<Structure> editeurCombobox = null;
64
	private TextField<String> datePublicationChp = null;
65
	private TextField<String> tomeChp = null;
66
	private TextField<String> fasciculeChp = null;
67
	private TextField<String> pagesChp = null;
68
 
69
	private String idStructureEdition = "";
70
 
71
	private static boolean formulaireValideOk = false;
72
	private static boolean publicationValideOk = false;
73
	private static boolean auteursValideOk = false;
74
	private static boolean attenteAjoutAuteursOk = true;
75
	private static boolean attenteSuppressionAuteursOk = true;
76
 
77
	public CommentaireForm(Mediateur mediateurCourrant, String publicationId) {
78
		initialiserPublicationForm(mediateurCourrant, publicationId);
79
	}
80
 
81
	public CommentaireForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) {
82
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
83
		initialiserPublicationForm(mediateurCourrant, publicationId);
84
	}
85
 
86
	private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
87
		publicationAPersonneListe = new PublicationAPersonneListe();
88
		initialiserValidation();
89
		initialiserAffichageAuteurs();
90
 
91
		publication = new Publication();
92
		publication.setId(publicationId);
93
 
94
		String modeDeCreation = (UtilString.isEmpty(publication.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
95
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
96
 
97
		panneauFormulaire.setLayout(new FlowLayout());
98
		String titre = genererTitreFormulaire();
99
		panneauFormulaire.setHeading(titre);
100
 
101
		creerZoneAuteurs();
102
		panneauFormulaire.add(auteursFieldset);
103
 
104
		creerZoneGeneralites();
105
		panneauFormulaire.add(generalitesFieldset);
106
 
107
		creerZoneEdition();
108
		panneauFormulaire.add(editionFieldset);
109
 
110
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
111
			mediateurCourrant.selectionnerPublication(this, publicationId);
112
			mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR);
113
		}
114
	}
115
 
116
	private String genererTitreFormulaire() {
117
		String titre = "Ajout d'une publication";
118
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
119
			 titre = "Modification d'une publication - "+i18nC.id()+": "+publication.getId();
120
		}
121
		return titre;
122
	}
123
 
124
	private void creerZoneAuteurs() {
125
		FormLayout layout = new FormLayout();
126
		layout.setLabelWidth(200);
127
 
128
		// Fieldset Auteur
129
		auteursFieldset = new FieldSet();
130
		auteursFieldset.setHeading("Auteur(s)");
131
		auteursFieldset.setCollapsible(true);
132
		auteursFieldset.setLayout(layout);
133
 
134
		auteurComboboxListe = new ArrayList<ComboBox<Personne>>(0);
135
		auteursStorePartage = new ListStore<Personne>();
136
		mediateur.clicObtenirListeAuteurs(this);
137
 
138
		creerChampsAuteur();
139
	}
140
 
141
	private void creerChampsAuteur() {
142
		auteursFieldset.removeAll();
143
 
144
		conteneurChamps = new LayoutContainer();
145
 
146
		Button ajouterAuteurBouton = new Button("Ajouter un auteur");
147
		ajouterAuteurBouton.setIcon(Images.ICONES.ajouter());
148
		ajouterAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
149
			@Override
150
			public void componentSelected(ButtonEvent be) {
151
				creerChampAuteurEtBoutonSupprimer(null);
152
			}
153
		});
154
 
155
		auteursFieldset.add(conteneurChamps);
156
		auteursFieldset.add(ajouterAuteurBouton);
157
		auteursFieldset.layout(true);
158
 
159
		if (mode.equals(Formulaire.MODE_AJOUTER)) {
160
			creerChampAuteurEtBoutonSupprimer(null);
161
		}
162
	}
163
 
164
	public void creerChampAuteurEtBoutonSupprimer(Personne auteur) {
165
		final HorizontalPanel panneauHorizontal = new HorizontalPanel();
166
		panneauHorizontal.setLayout(new FormLayout());
167
 
168
		final ComboBox<Personne> auteursSaisisComboBox = creerComboBoxAuteursSaisis();
169
		if (auteur != null) {
170
			GWT.log("Auteur peuplé : "+auteur.getId(), null);
171
			auteursSaisisComboBox.setValue(auteursStorePartage.findModel("id_personne", auteur.getId()));
172
			auteursSaisisComboBox.validate();
173
		}
174
		auteurComboboxListe.add(auteursSaisisComboBox);
175
		auteursSaisisComboBox.setFieldLabel("Auteur "+auteurComboboxListe.size());
176
		GWT.log("Nbre de combobox auteur dans liste : "+auteurComboboxListe.size(), null);
177
 
178
		LayoutContainer panneauChampTxtEtBouton = new LayoutContainer();
179
		panneauChampTxtEtBouton.setLayout(new FormLayout());
180
		panneauChampTxtEtBouton.add(auteursSaisisComboBox, new FormData(300, 0));
181
		panneauHorizontal.add(panneauChampTxtEtBouton);
182
 
183
		Button supprimerAuteurBouton = new Button();
184
		supprimerAuteurBouton.setIcon(Images.ICONES.supprimer());
185
		supprimerAuteurBouton.setToolTip(i18nC.supprimer());
186
		supprimerAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
187
			@Override
188
			public void componentSelected(ButtonEvent be) {
189
				auteurComboboxListe.remove(auteursSaisisComboBox);
190
				conteneurChamps.remove(panneauHorizontal);
191
 
192
				int numeroAuteurs = 1;
193
				for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) {
194
					it.next().setFieldLabel("Auteur "+numeroAuteurs);
195
					numeroAuteurs++;
196
				}
197
 
198
				auteursFieldset.layout(true);
199
			}
200
		});
201
		panneauHorizontal.add(supprimerAuteurBouton);
202
 
203
		conteneurChamps.add(panneauHorizontal);
204
		auteursFieldset.layout(true);
205
	}
206
 
207
	private ComboBox<Personne> creerComboBoxAuteursSaisis() {
208
		ComboBox<Personne> comboBox = new ComboBox<Personne>();
209
		comboBox.setEmptyText(i18nC.chercherPersonneSaisi());
210
		comboBox.setEditable(true);
211
		comboBox.setForceSelection(true);
212
		comboBox.setDisplayField("fmt_nom_complet");
213
		comboBox.setTriggerAction(TriggerAction.ALL);
214
		comboBox.setStore(auteursStorePartage);
215
		comboBox.addStyleName(ComposantClass.OBLIGATOIRE);
216
		comboBox.addListener(Events.Valid, creerEcouteurChampObligatoire());
217
 
218
		return comboBox;
219
	}
220
 
221
	private void creerZoneGeneralites() {
222
		FormLayout layout = new FormLayout();
223
		layout.setLabelWidth(200);
224
 
225
		// Fieldset Infos Générales
226
		generalitesFieldset = new FieldSet();
227
		generalitesFieldset.setHeading("Informations générales");
228
		generalitesFieldset.setCollapsible(true);
229
		generalitesFieldset.setLayout(layout);
230
 
231
		titreChp = new TextField<String>();
232
		titreChp.setName("cpu");
233
		titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
234
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
235
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
236
		generalitesFieldset.add(titreChp, new FormData(450, 0));
237
 
238
		collectionChp = new TextField<String>();
239
		collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
240
		generalitesFieldset.add(collectionChp, new FormData(450, 0));
241
 
242
		uriChp = new TextField<String>();
243
		uriChp.setFieldLabel("URL de la publication");
244
		generalitesFieldset.add(uriChp, new FormData(450, 0));
245
	}
246
 
247
	private void creerZoneEdition() {
248
		FormLayout layout = new FormLayout();
249
		layout.setLabelWidth(200);
250
 
251
		// Fieldset Edition
252
		editionFieldset = new FieldSet();
253
		editionFieldset.setHeading("Édition");
254
		editionFieldset.setCollapsible(true);
255
		editionFieldset.setLayout(layout);
256
 
257
		ListStore<Structure> editeurStore = new ListStore<Structure>();
258
		editeurCombobox = new ComboBox<Structure>();
259
		editeurCombobox.setEmptyText("Sélectionner un éditeur...");
260
		editeurCombobox.setFieldLabel("Éditeur de la publication");
261
		editeurCombobox.setDisplayField("nom");
262
		editeurCombobox.setStore(editeurStore);
263
		editeurCombobox.setEditable(true);
264
		editeurCombobox.setTriggerAction(TriggerAction.ALL);
265
		editionFieldset.add(editeurCombobox, new FormData(450, 0));
266
		mediateur.clicObtenirListeEditeurs(this);
267
 
268
		datePublicationChp = new TextField<String>();
269
		datePublicationChp.setMaxLength(4);
270
		datePublicationChp.setMinLength(4);
271
		datePublicationChp.setFieldLabel("Année de publication");
272
		datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
273
		datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
274
		editionFieldset.add(datePublicationChp, new FormData(40, 0));
275
 
276
		tomeChp = new TextField<String>();
277
		tomeChp.setFieldLabel("Série de la revue ou tome");
278
		editionFieldset.add(tomeChp, new FormData(75, 0));
279
 
280
		fasciculeChp = new TextField<String>();
281
		fasciculeChp.setFieldLabel("Fascicule de la revue");
282
		editionFieldset.add(fasciculeChp, new FormData(75, 0));
283
 
284
		pagesChp = new TextField<String>();
285
		pagesChp.setFieldLabel("Pages");
286
		pagesChp.setToolTip("Fomat : NBRE ou NBRE-NBRE. ('NBRE' correspond à une suite de chiffres arabes ou romains ou à un point d'interrogation '?' dans le cas d'une donnée inconnue)");
287
		editionFieldset.add(pagesChp, new FormData(100, 0));
288
	}
289
 
290
	public void rafraichir(Object nouvellesDonnees) {
291
		if (nouvellesDonnees instanceof Publication) {
292
			// Si on a reçu les details d'une publication
293
			rafraichirPublication((Publication) nouvellesDonnees);
294
		} else if (nouvellesDonnees instanceof StructureListe) {
295
			// Si on a reçu une liste des editeurs
296
			rafraichirListeEditeurs((StructureListe) nouvellesDonnees);
297
		} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {
298
			rafraichirListeAuteurs((PublicationAPersonneListe) nouvellesDonnees);
299
		} else if (nouvellesDonnees instanceof Information) {
300
			rafraichirInformation((Information) nouvellesDonnees);
301
		} else {
302
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
303
		}
304
 
305
		if (etrePretAAfficherAuteurs()) {
306
			initialiserAffichageAuteurs();
307
			afficherAuteurs();
308
		}
309
 
310
		if (etreValide()) {
311
			initialiserValidation();
312
			repandreRafraichissement();
313
			controlerFermetureApresRafraichissement();
314
		}
315
	}
316
 
317
	private void miseAJourPublicationAPersonneListe() {
318
		GWT.log("Mise à jour liste publication à personne", null);
319
		Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
320
		while (clesAjoutees.hasNext()) {
321
			String id = clesAjoutees.next();
322
			publicationAPersonneListe.put(id, auteursAjoutes.get(id));
323
			GWT.log("Auteurs ajouté :"+publicationAPersonneListe.get(id).getPersonne().getNomComplet(), null);
324
		}
325
 
326
		Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
327
		while (clesSupprimees.hasNext()) {
328
			String id = clesSupprimees.next();
329
			publicationAPersonneListe.remove(id);
330
			GWT.log("Personne surpprimé :"+id, null);
331
		}
332
		GWT.log("Nbre auteurs après maj :"+publicationAPersonneListe.size(), null);
333
	}
334
 
335
	private void rafraichirPublication(Publication publi) {
336
		publication = publi;
337
		peuplerFormulaire();
338
	}
339
 
340
	private void rafraichirListeEditeurs(StructureListe editeurs) {
341
		editeurCombobox.getStore().removeAll();
342
		editeurCombobox.getStore().add((List<Structure>) editeurs.toList());
343
 
344
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
345
			editeurCombobox.setValue((Structure) editeurs.get(idStructureEdition));
346
		}
347
		editeurCombobox.expand();
348
	}
349
 
350
	private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) {
351
		publicationAPersonneListe = auteurs;
352
		publicationAPersonneListeChargementOk = true;
353
	}
354
 
355
	private void rafraichirInformation(Information info) {
356
		if (info.getType().equals("liste_personne")) {
357
			PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0);
358
 
359
			List<Personne> liste = listePersonneAuteur.toList();
360
			auteursStorePartage.removeAll();
361
			auteursStorePartage.add(liste);
362
 
363
			auteurStorePartageChargementOk = true;
364
		} else if (info.getType().equals("publication_valide")) {
365
			publicationValideOk = true;
366
			publication.setId((String) info.getDonnee(0));
367
 
368
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
369
				attenteAjoutAuteursOk = true;
370
				mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
371
			}
372
		} else if (info.getType().equals("ajout_publication_a_personne")) {
373
			attenteAjoutAuteursOk = false;
374
			GWT.log("attenteAjoutAuteursOk", null);
375
		} else if (info.getType().equals("suppression_publication_a_personne")) {
376
			attenteSuppressionAuteursOk = false;
377
			GWT.log("attenteSuppressionAuteursOk", null);
378
		}
379
 
380
		if (avoirAuteursMiseAJourCorrectement()) {
381
			auteursValideOk = true;
382
			miseAJourPublicationAPersonneListe();
383
			initialiserAuteurs();
384
		}
385
	}
386
 
387
	private boolean avoirAuteursMiseAJourCorrectement() {
388
		boolean ok = false;
389
		if (attenteAjoutAuteursOk == false && attenteSuppressionAuteursOk == false) {
390
			ok = true;
391
		}
392
		return ok;
393
	}
394
 
395
	private void afficherAuteurs() {
396
		Iterator<String> itap = publicationAPersonneListe.keySet().iterator();
397
		GWT.log("Auteur"+publicationAPersonneListe.size(), null);
398
		while (itap.hasNext()) {
399
			creerChampAuteurEtBoutonSupprimer(publicationAPersonneListe.get(itap.next()).getPersonne());
400
		}
401
	}
402
 
403
	private void initialiserAffichageAuteurs() {
404
		auteurStorePartageChargementOk = false;
405
		publicationAPersonneListeChargementOk = false;
406
	}
407
 
408
	private boolean etrePretAAfficherAuteurs() {
409
		boolean ok = false;
410
		if (auteurStorePartageChargementOk && publicationAPersonneListeChargementOk) {
411
			ok = true;
412
		}
413
		return ok;
414
	}
415
 
416
	private Boolean etreValide() {
417
		Boolean valide = false;
418
		GWT.log("formulaire"+formulaireValideOk+" - Publication :"+publicationValideOk+" - Auteurs :"+auteursValideOk, null);
419
		if (formulaireValideOk && publicationValideOk && auteursValideOk) {
420
			valide = true;
421
		}
422
		return valide;
423
	}
424
 
425
	private void initialiserValidation() {
426
		formulaireValideOk = false;
427
		publicationValideOk = false;
428
		initialiserAuteurs();
429
		auteursValideOk = false;
430
	}
431
 
432
	private void initialiserAuteurs() {
433
		attenteAjoutAuteursOk = true;
434
		auteursAjoutes = new PublicationAPersonneListe();
435
		attenteSuppressionAuteursOk = true;
436
		auteursSupprimes = new PublicationAPersonneListe();
437
	}
438
 
439
	private void repandreRafraichissement() {
440
		if (vueExterneARafraichirApresValidation != null) {
441
			String type = "publication_modifiee";
442
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
443
				type = "publication_ajoutee";
444
			}
445
			Information info = new Information(type);
446
			info.setDonnee(0, publication);
447
			vueExterneARafraichirApresValidation.rafraichir(info);
448
		}
449
	}
450
 
451
	public boolean soumettreFormulaire() {
452
		formulaireValideOk = verifierFormulaire();
453
		GWT.log("Form?"+formulaireValideOk, null);
454
		if (formulaireValideOk) {
455
			soumettrePublication();
456
			soumettreAuteurs();
457
		}
458
		return formulaireValideOk;
459
	}
460
 
461
	private void soumettrePublication() {
462
		Publication publicationCollectee = collecterPublication();
463
		if (publicationCollectee != null) {
464
			GWT.log("Info public collectée ? ok", null);
465
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
466
				mediateur.ajouterPublication(this, publicationCollectee);
467
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
468
				mediateur.modifierPublication(this, publicationCollectee);
469
			}
470
		}
471
	}
472
 
473
	private void soumettreAuteurs() {
474
		attenteAjoutAuteursOk = false;
475
		attenteSuppressionAuteursOk = false;
476
 
477
		PersonneListe personnesInitiales = new PersonneListe();
478
		if (publicationAPersonneListe != null) {
479
			GWT.log("Nbre auteur initial :"+publicationAPersonneListe.size(), null);
480
			Iterator<String> itap = publicationAPersonneListe.keySet().iterator();
481
			while (itap.hasNext()) {
482
				Personne personne = publicationAPersonneListe.get(itap.next()).getPersonne();
483
				GWT.log("Auteur initial :"+personne.getNomComplet(), null);
484
				personnesInitiales.put(personne.getId(), personne);
485
			}
486
		}
487
 
488
		PersonneListe personnesActuelles = new PersonneListe();
489
		GWT.log("Nbre auteur actuel :"+auteurComboboxListe.size(), null);
490
		for (int i = 0; i < auteurComboboxListe.size(); i++) {
491
			if (auteurComboboxListe.get(i).getValue() != null) {
492
				Personne personne = auteurComboboxListe.get(i).getValue();
493
				personnesActuelles.put(personne.getId(), personne);
494
			}
495
		}
496
 
497
		// Auteurs ajoutés
498
		Iterator<String> clesActuelles = personnesActuelles.keySet().iterator();
499
		while (clesActuelles.hasNext()) {
500
			String idActuel = clesActuelles.next();
501
			if (personnesInitiales.size() == 0 || personnesInitiales.get(idActuel) == null) {
502
				Personne personne = personnesActuelles.get(idActuel);
503
				GWT.log("Auteur ajouté :"+personne.getNomComplet(), null);
504
				PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
505
				if (mode.equals(Formulaire.MODE_MODIFIER)) {
506
					publicationAAuteur.setIdPublication(publication.getId());
507
				}
508
				publicationAAuteur.setPersonne(personne);
509
				publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
510
				auteursAjoutes.put(publicationAAuteur.getId(), publicationAAuteur);
511
				attenteAjoutAuteursOk = true;
512
			}
513
		}
514
 
515
		// Auteurs supprimés
516
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
517
			Iterator<String> clesInitiales = personnesInitiales.keySet().iterator();
518
			while (clesInitiales.hasNext()) {
519
				String idInitial = clesInitiales.next();
520
				if (personnesActuelles.size() == 0 || personnesActuelles.get(idInitial) == null) {
521
					Personne personne = personnesInitiales.get(idInitial);
522
					GWT.log("Auteur supprimé :"+personne.getNomComplet(), null);
523
					PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
524
					publicationAAuteur.setIdPublication(publication.getId());
525
					publicationAAuteur.setPersonne(personne);
526
					publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
527
					auteursSupprimes.put(publicationAAuteur.getId(), publicationAAuteur);
528
					attenteSuppressionAuteursOk = true;
529
				}
530
			}
531
		}
532
 
533
		// Execution de les mise à jour pour le mode MODIFICATION
534
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
535
			if (auteursAjoutes != null && auteursAjoutes.size() != 0) {
536
				mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
537
			}
538
 
539
			if (auteursSupprimes != null && auteursSupprimes.size() != 0) {
540
				mediateur.supprimerPublicationAPersonne(this, auteursSupprimes);
541
			}
542
		}
543
	}
544
 
545
	public boolean verifierFormulaire() {
546
		boolean valide = true;
547
		ArrayList<String> messages = new ArrayList<String>();
548
 
549
		boolean auteurErreur = true;
550
		for (int i = 0; i < auteurComboboxListe.size(); i++) {
551
			if (auteurComboboxListe.get(i).getValue() != null) {
552
				auteurErreur = false;
553
				break;
554
			}
555
		}
556
		if (auteurErreur) {
557
			messages.add("Veuillez saisir au moins un auteur !");
558
		}
559
 
560
		String titre = titreChp.getValue();
561
		if (titre == null || titre.equals("")) {
562
			messages.add("Veuillez saisir le titre de la publication !");
563
		}
564
 
565
		String uri = uriChp.getValue();
566
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
567
			messages.add("L'URL saisie n'est pas valide !");
568
		}
569
 
570
		String datePublication = datePublicationChp.getRawValue();
571
		if (datePublication == null || datePublication.equals("")) {
572
			messages.add("Veuillez saisir une année de parution !");
573
		} else {
574
			if (!etreDateValide(datePublication)) {
575
				messages.add("Le format de l'année saisie est incorrect !");
576
			}
577
		}
578
 
579
		String pages = pagesChp.getValue();
580
		String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
581
		if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
582
			messages.add("Le format des pages est incorrect !");
583
		}
584
 
585
		if (messages.size() != 0) {
586
			String[] tableauDeMessages = {};
587
			tableauDeMessages = messages.toArray(tableauDeMessages);
588
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
589
			valide = false;
590
		}
591
		return valide;
592
	}
593
 
594
	private void peuplerFormulaire() {
595
		creerChampsAuteur();
596
		titreChp.setValue(publication.getTitre());
597
		collectionChp.setValue(publication.getCollection());
598
		uriChp.setValue(publication.getURI());
599
		datePublicationChp.setRawValue(reduireDateParAnnee(publication.getDateParution()));
600
		tomeChp.setValue(publication.getIndicationNvt());
601
		fasciculeChp.setValue(publication.getFascicule());
602
		pagesChp.setValue(publication.getPages());
603
 
604
		if (publication.getEditeur().matches("^[0-9]+$")) {
605
			editeurCombobox.setValue(editeurCombobox.getStore().findModel("id_structure", publication.getEditeur()));
606
			idStructureEdition = publication.getEditeur();
607
		} else {
608
			editeurCombobox.setRawValue(publication.getEditeur());
609
		}
610
	}
611
 
612
	private Publication collecterPublication() {
613
		Publication publicationCollectee = (Publication) publication.cloner(new Publication());
614
 
615
		String auteurIntituleFormate = "";
616
		int auteursNombre = auteurComboboxListe.size();
617
		for (int i = 0; i < auteursNombre; i++) {
618
			if (auteurComboboxListe.get(i).getValue() != null) {
619
				Personne auteur = auteurComboboxListe.get(i).getValue();
620
				auteurIntituleFormate += auteur.getNom()+ " "+auteur.getPrenom();
621
				if (i != (auteursNombre - 1)) {
622
					auteurIntituleFormate += ", ";
623
				}
624
			}
625
		}
626
		GWT.log("Auteurs formaté :"+auteurIntituleFormate, null);
627
		publicationCollectee.setAuteur(auteurIntituleFormate);
628
 
629
		String titre = titreChp.getValue();
630
		publicationCollectee.setTitre(titre);
631
 
632
		String collection = collectionChp.getValue();
633
		publicationCollectee.setCollection(collection);
634
 
635
		String nomComplet = titreChp.getValue()+" "+collectionChp.getValue();
636
		publicationCollectee.setNomComplet(nomComplet);
637
 
638
		String uri = uriChp.getValue();
639
		publicationCollectee.setUri(uri);
640
 
641
		String editeur = "";
642
		if (editeurCombobox.getValue() != null) {
643
			editeur = editeurCombobox.getValue().getId();
644
			publicationCollectee.setStructureEditeur(editeurCombobox.getValue());
645
		} else if (editeurCombobox.getRawValue() != "") {
646
			editeur = editeurCombobox.getRawValue();
647
		}
648
		publicationCollectee.setEditeur(editeur);
649
 
650
		String anneePublication = datePublicationChp.getRawValue();
651
		String datePublication = anneePublication+"-00-00";
652
		publicationCollectee.setDateParution(datePublication);
653
 
654
		String tome = tomeChp.getValue();
655
		publicationCollectee.setIndicationNvt(tome);
656
 
657
		String fascicule = fasciculeChp.getValue();
658
		publicationCollectee.setFascicule(fascicule);
659
 
660
		String pages = pagesChp.getValue();
661
		publicationCollectee.setPages(pages);
662
 
663
		Publication publicationARetourner = null;
664
		if (!publicationCollectee.comparer(publication)) {
665
			publicationARetourner = publication = publicationCollectee;
666
		}
667
		return publicationARetourner;
668
	}
669
 
670
	public void reinitialiserFormulaire() {
671
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
672
			mediateur.afficherFormPublication(publication.getId());
673
		} else {
674
			mediateur.afficherFormPublication(null);
675
		}
676
	}
677
 
678
	private boolean etreDateValide(String anneePublication) {
679
		boolean valide = true;
680
		if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
681
			valide = false;
682
		}
683
		return valide;
684
	}
685
 
686
	private String reduireDateParAnnee(String datePar) {
687
		if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
688
			return datePar.split("-")[0];
689
		} else {
690
			return "";
691
		}
692
	}
693
}