Subversion Repositories eFlore/Applications.coel

Rev

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