Subversion Repositories eFlore/Applications.coel

Rev

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

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