Subversion Repositories eFlore/Applications.coel

Rev

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