Subversion Repositories eFlore/Applications.coel

Rev

Rev 1176 | Rev 1197 | 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
 
981 jpm 7
import org.tela_botanica.client.ComposantClass;
219 aurelien 8
import org.tela_botanica.client.Mediateur;
822 jpm 9
import org.tela_botanica.client.images.Images;
219 aurelien 10
import org.tela_botanica.client.interfaces.Rafraichissable;
705 aurelien 11
import org.tela_botanica.client.modeles.Information;
775 jpm 12
import org.tela_botanica.client.modeles.MenuApplicationId;
935 jpm 13
import org.tela_botanica.client.modeles.personne.Personne;
14
import org.tela_botanica.client.modeles.personne.PersonneListe;
1032 jpm 15
import org.tela_botanica.client.modeles.projet.Projet;
16
import org.tela_botanica.client.modeles.projet.ProjetListe;
935 jpm 17
import org.tela_botanica.client.modeles.publication.Publication;
18
import org.tela_botanica.client.modeles.publication.PublicationAPersonne;
19
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
20
import org.tela_botanica.client.modeles.structure.Structure;
21
import org.tela_botanica.client.modeles.structure.StructureListe;
1131 jpm 22
import org.tela_botanica.client.util.Debug;
792 jpm 23
import org.tela_botanica.client.util.Pattern;
782 jpm 24
import org.tela_botanica.client.util.UtilArray;
884 jpm 25
import org.tela_botanica.client.util.UtilString;
935 jpm 26
import org.tela_botanica.client.vues.Formulaire;
219 aurelien 27
 
505 jp_milcent 28
import com.extjs.gxt.ui.client.event.ButtonEvent;
980 jpm 29
import com.extjs.gxt.ui.client.event.Events;
219 aurelien 30
import com.extjs.gxt.ui.client.event.SelectionListener;
31
import com.extjs.gxt.ui.client.store.ListStore;
227 aurelien 32
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
1095 jpm 33
import com.extjs.gxt.ui.client.widget.Info;
219 aurelien 34
import com.extjs.gxt.ui.client.widget.LayoutContainer;
705 aurelien 35
import com.extjs.gxt.ui.client.widget.MessageBox;
219 aurelien 36
import com.extjs.gxt.ui.client.widget.button.Button;
37
import com.extjs.gxt.ui.client.widget.form.ComboBox;
1032 jpm 38
import com.extjs.gxt.ui.client.widget.form.Field;
219 aurelien 39
import com.extjs.gxt.ui.client.widget.form.FieldSet;
40
import com.extjs.gxt.ui.client.widget.form.TextField;
1032 jpm 41
import com.extjs.gxt.ui.client.widget.form.Validator;
219 aurelien 42
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
43
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
44
import com.extjs.gxt.ui.client.widget.layout.FormData;
45
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
705 aurelien 46
import com.google.gwt.core.client.GWT;
219 aurelien 47
 
877 aurelien 48
 
775 jpm 49
public class PublicationForm extends Formulaire implements Rafraichissable {
219 aurelien 50
 
786 jpm 51
	private Publication publication;
1133 jpm 52
	private PersonneListe auteursInitialListe = null;
901 jpm 53
	private static boolean publicationAPersonneListeChargementOk = false;
54
	private PublicationAPersonneListe auteursAjoutes = null;
55
	private PublicationAPersonneListe auteursSupprimes = null;
219 aurelien 56
 
775 jpm 57
	private FieldSet auteursFieldset = null;
1032 jpm 58
	private ComboBox<Projet> projetsCombo = null;
775 jpm 59
	private ArrayList<ComboBox<Personne>> auteurComboboxListe = null;
60
	private LayoutContainer conteneurChamps;
61
	private ListStore<Personne> auteursStorePartage = null;
901 jpm 62
	private static boolean auteurStorePartageChargementOk = false;
227 aurelien 63
 
775 jpm 64
	private FieldSet generalitesFieldset = null;
786 jpm 65
	private TextField<String> titreChp = null;
66
	private TextField<String> collectionChp = null;
67
	private TextField<String> uriChp = null;
219 aurelien 68
 
775 jpm 69
	private FieldSet editionFieldset = null;
792 jpm 70
	private ComboBox<Structure> editeurCombobox = null;
1180 jpm 71
	private static boolean editeursOk = false;
786 jpm 72
	private TextField<String> datePublicationChp = null;
73
	private TextField<String> tomeChp = null;
74
	private TextField<String> fasciculeChp = null;
75
	private TextField<String> pagesChp = null;
219 aurelien 76
 
1180 jpm 77
	boolean auteursAffiches = false;
901 jpm 78
	private static boolean formulaireValideOk = false;
79
	private static boolean publicationValideOk = false;
80
	private static boolean auteursValideOk = false;
1131 jpm 81
	private static boolean publicationOk = false;
901 jpm 82
	private static boolean attenteAjoutAuteursOk = true;
83
	private static boolean attenteSuppressionAuteursOk = true;
786 jpm 84
 
781 jpm 85
	public PublicationForm(Mediateur mediateurCourrant, String publicationId) {
782 jpm 86
		initialiserPublicationForm(mediateurCourrant, publicationId);
87
	}
88
 
89
	public PublicationForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) {
822 jpm 90
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
782 jpm 91
		initialiserPublicationForm(mediateurCourrant, publicationId);
92
	}
93
 
94
	private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
1133 jpm 95
		auteursInitialListe = new PersonneListe();
901 jpm 96
		initialiserValidation();
97
		initialiserAffichageAuteurs();
98
 
799 jpm 99
		publication = new Publication();
822 jpm 100
		publication.setId(publicationId);
101
 
884 jpm 102
		String modeDeCreation = (UtilString.isEmpty(publication.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
775 jpm 103
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
781 jpm 104
 
775 jpm 105
		panneauFormulaire.setLayout(new FlowLayout());
1095 jpm 106
		genererTitreFormulaire();
107
 
775 jpm 108
		creerZoneAuteurs();
109
		panneauFormulaire.add(auteursFieldset);
219 aurelien 110
 
775 jpm 111
		creerZoneGeneralites();
112
		panneauFormulaire.add(generalitesFieldset);
239 aurelien 113
 
775 jpm 114
		creerZoneEdition();
115
		panneauFormulaire.add(editionFieldset);
822 jpm 116
 
117
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
118
			mediateurCourrant.selectionnerPublication(this, publicationId);
119
			mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR);
120
		}
781 jpm 121
	}
782 jpm 122
 
1095 jpm 123
	private void genererTitreFormulaire() {
989 jpm 124
		String titre = i18nC.publicationTitreFormAjout();
822 jpm 125
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1095 jpm 126
			 titre = i18nC.publicationTitreFormModif();
127
			 if (publication != null) {
128
				 titre += " - "+i18nC.id()+": "+publication.getId();
129
			 }
822 jpm 130
		}
1095 jpm 131
		panneauFormulaire.setHeading(titre);
822 jpm 132
	}
133
 
775 jpm 134
	private void creerZoneAuteurs() {
135
		FormLayout layout = new FormLayout();
136
		layout.setLabelWidth(200);
137
 
138
		// Fieldset Auteur
139
		auteursFieldset = new FieldSet();
989 jpm 140
		auteursFieldset.setHeading(i18nC.publicationAuteursTitre());
775 jpm 141
		auteursFieldset.setCollapsible(true);
142
		auteursFieldset.setLayout(layout);
143
 
1131 jpm 144
		Debug.log("Dans creerZoneAuteurs");
775 jpm 145
		auteurComboboxListe = new ArrayList<ComboBox<Personne>>(0);
146
		auteursStorePartage = new ListStore<Personne>();
792 jpm 147
		mediateur.clicObtenirListeAuteurs(this);
775 jpm 148
 
822 jpm 149
		creerChampsAuteur();
775 jpm 150
	}
151
 
822 jpm 152
	private void creerChampsAuteur() {
775 jpm 153
		auteursFieldset.removeAll();
154
		conteneurChamps = new LayoutContainer();
155
 
989 jpm 156
		Button ajouterAuteurBouton = new Button(i18nC.publicationAuteurBoutonAjouter());
822 jpm 157
		ajouterAuteurBouton.setIcon(Images.ICONES.ajouter());
158
		ajouterAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
775 jpm 159
			@Override
160
			public void componentSelected(ButtonEvent be) {
822 jpm 161
				creerChampAuteurEtBoutonSupprimer(null);
775 jpm 162
			}
163
		});
219 aurelien 164
 
775 jpm 165
		auteursFieldset.add(conteneurChamps);
822 jpm 166
		auteursFieldset.add(ajouterAuteurBouton);
1131 jpm 167
		auteursFieldset.layout();
775 jpm 168
	}
169
 
822 jpm 170
	public void creerChampAuteurEtBoutonSupprimer(Personne auteur) {
775 jpm 171
		final HorizontalPanel panneauHorizontal = new HorizontalPanel();
1134 jpm 172
 
173
		LayoutContainer panneauChampTxt = new LayoutContainer();
174
		panneauChampTxt.setLayout(new FormLayout());
175
 
775 jpm 176
		final ComboBox<Personne> auteursSaisisComboBox = creerComboBoxAuteursSaisis();
177
		if (auteur != null) {
1131 jpm 178
			auteursSaisisComboBox.setValue(auteur);
901 jpm 179
			auteursSaisisComboBox.validate();
775 jpm 180
		}
181
		auteurComboboxListe.add(auteursSaisisComboBox);
989 jpm 182
		auteursSaisisComboBox.setFieldLabel(i18nC.publicationAuteurSingulier()+" "+auteurComboboxListe.size());
1134 jpm 183
		panneauChampTxt.add(auteursSaisisComboBox, new FormData(300, 0));
184
		panneauHorizontal.add(panneauChampTxt);
758 aurelien 185
 
822 jpm 186
		Button supprimerAuteurBouton = new Button();
187
		supprimerAuteurBouton.setIcon(Images.ICONES.supprimer());
188
		supprimerAuteurBouton.setToolTip(i18nC.supprimer());
189
		supprimerAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
775 jpm 190
			@Override
191
			public void componentSelected(ButtonEvent be) {
192
				auteurComboboxListe.remove(auteursSaisisComboBox);
193
				conteneurChamps.remove(panneauHorizontal);
822 jpm 194
 
195
				int numeroAuteurs = 1;
196
				for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) {
989 jpm 197
					it.next().setFieldLabel(i18nC.publicationAuteurSingulier()+" "+numeroAuteurs);
822 jpm 198
					numeroAuteurs++;
199
				}
200
 
1131 jpm 201
				auteursFieldset.layout();
775 jpm 202
			}
203
		});
822 jpm 204
		panneauHorizontal.add(supprimerAuteurBouton);
1134 jpm 205
 
775 jpm 206
		conteneurChamps.add(panneauHorizontal);
1131 jpm 207
		auteursFieldset.layout();
775 jpm 208
	}
209
 
210
	private ComboBox<Personne> creerComboBoxAuteursSaisis() {
1134 jpm 211
		ListStore<Personne> auteursStore = new ListStore<Personne>();
212
		auteursStore.add(auteursStorePartage.getModels());
213
 
775 jpm 214
		ComboBox<Personne> comboBox = new ComboBox<Personne>();
860 jpm 215
		comboBox.setEmptyText(i18nC.chercherPersonneSaisi());
775 jpm 216
		comboBox.setEditable(true);
1131 jpm 217
		comboBox.setAllowBlank(false);
775 jpm 218
		comboBox.setForceSelection(true);
219
		comboBox.setDisplayField("fmt_nom_complet");
220
		comboBox.setTriggerAction(TriggerAction.ALL);
1134 jpm 221
		comboBox.setStore(auteursStore);
1176 jpm 222
		comboBox.setMessageTarget("tooltip");
981 jpm 223
		comboBox.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 224
		comboBox.addListener(Events.Valid, creerEcouteurChampObligatoire());
775 jpm 225
 
226
		return comboBox;
227
	}
228
 
229
	private void creerZoneGeneralites() {
230
		FormLayout layout = new FormLayout();
231
		layout.setLabelWidth(200);
219 aurelien 232
 
233
		// Fieldset Infos Générales
775 jpm 234
		generalitesFieldset = new FieldSet();
235
		generalitesFieldset.setHeading("Informations générales");
236
		generalitesFieldset.setCollapsible(true);
237
		generalitesFieldset.setLayout(layout);
219 aurelien 238
 
1032 jpm 239
		projetsCombo = new ComboBox<Projet>();
240
		projetsCombo.setTabIndex(tabIndex++);
241
		projetsCombo.setFieldLabel(i18nC.projetChamp());
242
		projetsCombo.setDisplayField("nom");
243
		projetsCombo.setForceSelection(true);
244
		projetsCombo.setValidator(new Validator() {
245
			@Override
246
			public String validate(Field<?> field, String value) {
247
				String retour = null;
248
				if (field.getRawValue().equals("")) {
249
					field.setValue(null);
250
				} else if (projetsCombo.getStore().findModel("nom", field.getRawValue()) == null) {
251
					String contenuBrut = field.getRawValue();
252
					field.setValue(null);
253
					field.setRawValue(contenuBrut);
254
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
255
				}
256
				return retour;
257
			}
258
		});
259
		projetsCombo.setTriggerAction(TriggerAction.ALL);
260
		projetsCombo.setStore(new ListStore<Projet>());
261
		projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
262
		projetsCombo.addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
263
		generalitesFieldset.add(projetsCombo, new FormData(450, 0));
264
		mediateur.selectionnerProjet(this, null);
265
 
786 jpm 266
		titreChp = new TextField<String>();
267
		titreChp.setName("cpu");
268
		titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
981 jpm 269
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 270
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
792 jpm 271
		generalitesFieldset.add(titreChp, new FormData(450, 0));
219 aurelien 272
 
786 jpm 273
		collectionChp = new TextField<String>();
792 jpm 274
		collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
275
		generalitesFieldset.add(collectionChp, new FormData(450, 0));
219 aurelien 276
 
786 jpm 277
		uriChp = new TextField<String>();
792 jpm 278
		uriChp.setFieldLabel("URL de la publication");
279
		generalitesFieldset.add(uriChp, new FormData(450, 0));
775 jpm 280
	}
281
 
282
	private void creerZoneEdition() {
283
		FormLayout layout = new FormLayout();
284
		layout.setLabelWidth(200);
285
 
219 aurelien 286
		// Fieldset Edition
775 jpm 287
		editionFieldset = new FieldSet();
792 jpm 288
		editionFieldset.setHeading("Édition");
775 jpm 289
		editionFieldset.setCollapsible(true);
290
		editionFieldset.setLayout(layout);
219 aurelien 291
 
792 jpm 292
		ListStore<Structure> editeurStore = new ListStore<Structure>();
293
		editeurCombobox = new ComboBox<Structure>();
294
		editeurCombobox.setEmptyText("Sélectionner un éditeur...");
295
		editeurCombobox.setFieldLabel("Éditeur de la publication");
296
		editeurCombobox.setDisplayField("nom");
297
		editeurCombobox.setStore(editeurStore);
298
		editeurCombobox.setEditable(true);
299
		editeurCombobox.setTriggerAction(TriggerAction.ALL);
300
		editionFieldset.add(editeurCombobox, new FormData(450, 0));
301
		mediateur.clicObtenirListeEditeurs(this);
219 aurelien 302
 
786 jpm 303
		datePublicationChp = new TextField<String>();
304
		datePublicationChp.setMaxLength(4);
305
		datePublicationChp.setMinLength(4);
306
		datePublicationChp.setFieldLabel("Année de publication");
981 jpm 307
		datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 308
		datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
792 jpm 309
		editionFieldset.add(datePublicationChp, new FormData(40, 0));
219 aurelien 310
 
786 jpm 311
		tomeChp = new TextField<String>();
792 jpm 312
		tomeChp.setFieldLabel("Série de la revue ou tome");
313
		editionFieldset.add(tomeChp, new FormData(75, 0));
219 aurelien 314
 
786 jpm 315
		fasciculeChp = new TextField<String>();
792 jpm 316
		fasciculeChp.setFieldLabel("Fascicule de la revue");
317
		editionFieldset.add(fasciculeChp, new FormData(75, 0));
219 aurelien 318
 
786 jpm 319
		pagesChp = new TextField<String>();
320
		pagesChp.setFieldLabel("Pages");
887 aurelien 321
		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 322
		editionFieldset.add(pagesChp, new FormData(100, 0));
219 aurelien 323
	}
775 jpm 324
 
705 aurelien 325
	public void rafraichir(Object nouvellesDonnees) {
326
		if (nouvellesDonnees instanceof Publication) {
782 jpm 327
			// Si on a reçu les details d'une publication
328
			rafraichirPublication((Publication) nouvellesDonnees);
329
		} else if (nouvellesDonnees instanceof StructureListe) {
330
			// Si on a reçu une liste des editeurs
331
			rafraichirListeEditeurs((StructureListe) nouvellesDonnees);
332
		} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {
333
			rafraichirListeAuteurs((PublicationAPersonneListe) nouvellesDonnees);
334
		} else if (nouvellesDonnees instanceof Information) {
335
			rafraichirInformation((Information) nouvellesDonnees);
1032 jpm 336
		} else if (nouvellesDonnees instanceof ProjetListe) {
337
			ProjetListe projets = (ProjetListe) nouvellesDonnees;
338
			Formulaire.rafraichirComboBox(projets, projetsCombo);
339
			setValeurComboProjets();
782 jpm 340
		} else {
341
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
227 aurelien 342
		}
343
 
1180 jpm 344
		synchronisation();
345
	}
346
 
347
	private void synchronisation() {
348
		// Respecter l'ordre et faire attention à la réinitialisation des jetons
349
		// 1. gestion des auteurs (Modif ou Ajout)
350
		// 2. peupler le formulaire (Modif)
351
		// 3. initialisation de la gestion des auteurs ajoutés/supprimés (Modif)
352
		// 4. valider le formulaire (Modif ou Ajout)
353
 
822 jpm 354
		if (etrePretAAfficherAuteurs()) {
1131 jpm 355
			afficherAuteurs();
901 jpm 356
			initialiserAffichageAuteurs();
822 jpm 357
		}
1180 jpm 358
 
359
		if (etrePretAPeupler()) {
360
			Debug.log("Entrain de peupler");
361
			peuplerFormulaire();
362
			genererTitreFormulaire();
363
			initialiserPeupler();
1176 jpm 364
		}
822 jpm 365
 
1180 jpm 366
		if (avoirAuteursMiseAJourCorrectement()) {
367
			Debug.log("Mise à jour liste auteur");
368
			miseAJourAuteursInitialListe();
369
			initialiserAuteurs();
370
			auteursValideOk = true;
371
		}
372
 
782 jpm 373
		if (etreValide()) {
822 jpm 374
			initialiserValidation();
782 jpm 375
			repandreRafraichissement();
376
			controlerFermetureApresRafraichissement();
219 aurelien 377
		}
782 jpm 378
	}
901 jpm 379
 
1133 jpm 380
	private void miseAJourAuteursInitialListe() {
901 jpm 381
		Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
382
		while (clesAjoutees.hasNext()) {
1133 jpm 383
			Personne auteurAjoute = auteursAjoutes.get(clesAjoutees.next()).getPersonne();
384
			auteursInitialListe.put(auteurAjoute.getId(), auteurAjoute);
901 jpm 385
		}
386
 
387
		Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
388
		while (clesSupprimees.hasNext()) {
1133 jpm 389
			Personne auteurSupprime = auteursSupprimes.get(clesSupprimees.next()).getPersonne();
390
			auteursInitialListe.remove(auteurSupprime.getId());
901 jpm 391
		}
392
	}
393
 
786 jpm 394
	private void rafraichirPublication(Publication publi) {
1131 jpm 395
		publicationOk = true;
786 jpm 396
		publication = publi;
782 jpm 397
	}
398
 
399
	private void rafraichirListeEditeurs(StructureListe editeurs) {
1180 jpm 400
		editeursOk = true;
792 jpm 401
		editeurCombobox.getStore().removeAll();
402
		editeurCombobox.getStore().add((List<Structure>) editeurs.toList());
782 jpm 403
	}
404
 
405
	private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) {
1133 jpm 406
		Iterator<String> it = auteurs.keySet().iterator();
407
		while (it.hasNext()) {
408
			Personne auteur = auteurs.get(it.next()).getPersonne();
409
			auteursInitialListe.put(auteur.getId(), auteur);
410
		}
1180 jpm 411
		Debug.log("Réception liste des auteurs : "+auteurs.size());
822 jpm 412
		publicationAPersonneListeChargementOk = true;
782 jpm 413
	}
414
 
415
	private void rafraichirInformation(Information info) {
1095 jpm 416
		String type = info.getType();
417
		if (type.equals("ajout_publication") || type.equals("modif_publication")) {
418
			publicationValideOk = true;
419
			if (vueExterneARafraichirApresValidation != null) {
420
				publication.setId((String) info.getDonnee(0));
421
			}
422
 
423
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
424
				attenteAjoutAuteursOk = true;
425
				mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
426
			}
427
		}
428
 
782 jpm 429
		if (info.getType().equals("liste_personne")) {
822 jpm 430
			PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0);
431
 
782 jpm 432
			List<Personne> liste = listePersonneAuteur.toList();
433
			auteursStorePartage.removeAll();
434
			auteursStorePartage.add(liste);
1134 jpm 435
			Debug.log("Reception nouvelle liste auteurs");
822 jpm 436
			auteurStorePartageChargementOk = true;
901 jpm 437
		} else if (info.getType().equals("ajout_publication_a_personne")) {
438
			attenteAjoutAuteursOk = false;
439
			GWT.log("attenteAjoutAuteursOk", null);
440
		} else if (info.getType().equals("suppression_publication_a_personne")) {
441
			attenteSuppressionAuteursOk = false;
442
			GWT.log("attenteSuppressionAuteursOk", null);
1095 jpm 443
		} else if (info.getType().equals("modif_publication")) {
444
			Info.display("Modification d'une publication", info.toString());
445
		} else if (info.getType().equals("ajout_publication")) {
446
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
447
				String publicationId = (String) info.getDonnee(0);
448
				Info.display("Ajout d'une publication", "La publication '"+publicationId+"' a bien été ajoutée");
449
				if (vueExterneARafraichirApresValidation != null) {
450
					publication.setId(publicationId);
451
				}
452
			} else {
453
				Info.display("Ajout d'une publication", info.toString());
454
			}
901 jpm 455
		}
782 jpm 456
	}
457
 
901 jpm 458
	private boolean avoirAuteursMiseAJourCorrectement() {
459
		boolean ok = false;
460
		if (attenteAjoutAuteursOk == false && attenteSuppressionAuteursOk == false) {
461
			ok = true;
462
		}
463
		return ok;
464
	}
465
 
822 jpm 466
	private void afficherAuteurs() {
1180 jpm 467
		if (mode.equals(Formulaire.MODE_AJOUTER)) {
468
			creerChampAuteurEtBoutonSupprimer(null);
469
		} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
470
			Iterator<String> itap = auteursInitialListe.keySet().iterator();
471
			while (itap.hasNext()) {
472
				creerChampAuteurEtBoutonSupprimer(auteursInitialListe.get(itap.next()));
473
			}
822 jpm 474
		}
1180 jpm 475
		auteursAffiches = true;
822 jpm 476
	}
477
 
478
	private void initialiserAffichageAuteurs() {
479
		auteurStorePartageChargementOk = false;
480
		publicationAPersonneListeChargementOk = false;
481
	}
1176 jpm 482
 
1180 jpm 483
	private void initialiserPeupler() {
484
		publicationOk = false;
485
		editeursOk = false;
486
		auteursAffiches = false;
1176 jpm 487
	}
822 jpm 488
 
489
	private boolean etrePretAAfficherAuteurs() {
490
		boolean ok = false;
1180 jpm 491
		if (auteurStorePartageChargementOk
492
				&& ((mode.equals(Formulaire.MODE_MODIFIER) && publicationOk && publicationAPersonneListeChargementOk)
493
						|| (mode.equals(Formulaire.MODE_AJOUTER)))) {
822 jpm 494
			ok = true;
495
		}
496
		return ok;
497
	}
1176 jpm 498
 
1180 jpm 499
	private boolean etrePretAPeupler() {
1176 jpm 500
		boolean ok = false;
1180 jpm 501
		Debug.log("Mode :"+mode.equals(Formulaire.MODE_MODIFIER)+" - PublicationOk :"+publicationOk+" - AuteursAffiches :"+auteursAffiches);
502
		if (mode.equals(Formulaire.MODE_MODIFIER) && publicationOk && auteursAffiches && editeursOk) {
1176 jpm 503
			ok = true;
504
		}
505
		return ok;
506
	}
1180 jpm 507
 
782 jpm 508
	private Boolean etreValide() {
509
		Boolean valide = false;
989 jpm 510
		//Debug.log("formulaire"+formulaireValideOk+" - Publication :"+publicationValideOk+" - Auteurs :"+auteursValideOk, null);
822 jpm 511
		if (formulaireValideOk && publicationValideOk && auteursValideOk) {
782 jpm 512
			valide = true;
513
		}
514
		return valide;
515
	}
516
 
822 jpm 517
	private void initialiserValidation() {
518
		formulaireValideOk = false;
519
		publicationValideOk = false;
901 jpm 520
		initialiserAuteurs();
822 jpm 521
		auteursValideOk = false;
782 jpm 522
	}
523
 
901 jpm 524
	private void initialiserAuteurs() {
525
		attenteAjoutAuteursOk = true;
526
		auteursAjoutes = new PublicationAPersonneListe();
527
		attenteSuppressionAuteursOk = true;
528
		auteursSupprimes = new PublicationAPersonneListe();
529
	}
530
 
782 jpm 531
	private void repandreRafraichissement() {
532
		if (vueExterneARafraichirApresValidation != null) {
786 jpm 533
			String type = "publication_modifiee";
534
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
535
				type = "publication_ajoutee";
536
			}
537
			Information info = new Information(type);
538
			info.setDonnee(0, publication);
782 jpm 539
			vueExterneARafraichirApresValidation.rafraichir(info);
540
		}
541
	}
542
 
786 jpm 543
	public boolean soumettreFormulaire() {
822 jpm 544
		formulaireValideOk = verifierFormulaire();
545
		if (formulaireValideOk) {
901 jpm 546
			soumettrePublication();
547
			soumettreAuteurs();
548
		}
549
		return formulaireValideOk;
550
	}
551
 
552
	private void soumettrePublication() {
553
		Publication publicationCollectee = collecterPublication();
554
		if (publicationCollectee != null) {
555
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
556
				mediateur.ajouterPublication(this, publicationCollectee);
557
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
558
				mediateur.modifierPublication(this, publicationCollectee);
559
			}
560
		}
561
	}
562
 
563
	private void soumettreAuteurs() {
564
		attenteAjoutAuteursOk = false;
565
		attenteSuppressionAuteursOk = false;
566
 
1133 jpm 567
		PersonneListe personnesInitiales = auteursInitialListe;
901 jpm 568
 
569
		PersonneListe personnesActuelles = new PersonneListe();
1131 jpm 570
		if (auteurComboboxListe != null) {
571
			Iterator<ComboBox<Personne>> itcp = auteurComboboxListe.iterator();
572
			while (itcp.hasNext()) {
1133 jpm 573
				ComboBox<Personne> combobox = itcp.next();
574
				Personne personne = combobox.getValue();
1131 jpm 575
				if (personne != null) {
576
					personnesActuelles.put(personne.getId(), personne);
577
				} else {
1134 jpm 578
					Debug.log("Etre valide :"+combobox.isValid()+" - "+combobox.getRawValue());
1131 jpm 579
				}
901 jpm 580
			}
581
		}
582
 
583
		// Auteurs ajoutés
584
		Iterator<String> clesActuelles = personnesActuelles.keySet().iterator();
585
		while (clesActuelles.hasNext()) {
586
			String idActuel = clesActuelles.next();
587
			if (personnesInitiales.size() == 0 || personnesInitiales.get(idActuel) == null) {
588
				Personne personne = personnesActuelles.get(idActuel);
589
				PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
590
				if (mode.equals(Formulaire.MODE_MODIFIER)) {
591
					publicationAAuteur.setIdPublication(publication.getId());
741 aurelien 592
				}
901 jpm 593
				publicationAAuteur.setPersonne(personne);
594
				publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
595
				auteursAjoutes.put(publicationAAuteur.getId(), publicationAAuteur);
596
				attenteAjoutAuteursOk = true;
239 aurelien 597
			}
598
		}
901 jpm 599
 
600
		// Auteurs supprimés
601
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
602
			Iterator<String> clesInitiales = personnesInitiales.keySet().iterator();
603
			while (clesInitiales.hasNext()) {
604
				String idInitial = clesInitiales.next();
605
				if (personnesActuelles.size() == 0 || personnesActuelles.get(idInitial) == null) {
606
					Personne personne = personnesInitiales.get(idInitial);
607
					PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
608
					publicationAAuteur.setIdPublication(publication.getId());
609
					publicationAAuteur.setPersonne(personne);
610
					publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
611
					auteursSupprimes.put(publicationAAuteur.getId(), publicationAAuteur);
612
					attenteSuppressionAuteursOk = true;
613
				}
614
			}
615
		}
616
 
617
		// Execution de les mise à jour pour le mode MODIFICATION
618
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
619
			if (auteursAjoutes != null && auteursAjoutes.size() != 0) {
620
				mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
621
			}
622
 
623
			if (auteursSupprimes != null && auteursSupprimes.size() != 0) {
624
				mediateur.supprimerPublicationAPersonne(this, auteursSupprimes);
625
			}
626
		}
1131 jpm 627
		Debug.log("personnesInitiales:"+personnesInitiales.size()+" - personnesActuelles :"+personnesActuelles.size()+" - auteursSupprimes :"+auteursSupprimes.size()+" - auteursAjoutes :"+auteursAjoutes.size());
219 aurelien 628
	}
629
 
934 jpm 630
	public boolean verifierFormulaire() {
782 jpm 631
		boolean valide = true;
632
		ArrayList<String> messages = new ArrayList<String>();
633
 
786 jpm 634
		boolean auteurErreur = true;
775 jpm 635
		for (int i = 0; i < auteurComboboxListe.size(); i++) {
636
			if (auteurComboboxListe.get(i).getValue() != null) {
786 jpm 637
				auteurErreur = false;
782 jpm 638
				break;
227 aurelien 639
			}
640
		}
782 jpm 641
		if (auteurErreur) {
642
			messages.add("Veuillez saisir au moins un auteur !");
705 aurelien 643
		}
644
 
786 jpm 645
		String titre = titreChp.getValue();
782 jpm 646
		if (titre == null || titre.equals("")) {
647
			messages.add("Veuillez saisir le titre de la publication !");
705 aurelien 648
		}
649
 
792 jpm 650
		String uri = uriChp.getValue();
651
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
652
			messages.add("L'URL saisie n'est pas valide !");
653
		}
654
 
799 jpm 655
		String datePublication = datePublicationChp.getRawValue();
656
		if (datePublication == null || datePublication.equals("")) {
657
			messages.add("Veuillez saisir une année de parution !");
725 aurelien 658
		} else {
799 jpm 659
			if (!etreDateValide(datePublication)) {
792 jpm 660
				messages.add("Le format de l'année saisie est incorrect !");
725 aurelien 661
			}
705 aurelien 662
		}
717 aurelien 663
 
792 jpm 664
		String pages = pagesChp.getValue();
665
		String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
799 jpm 666
		if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
792 jpm 667
			messages.add("Le format des pages est incorrect !");
668
		}
669
 
782 jpm 670
		if (messages.size() != 0) {
671
			String[] tableauDeMessages = {};
672
			tableauDeMessages = messages.toArray(tableauDeMessages);
799 jpm 673
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
782 jpm 674
			valide = false;
705 aurelien 675
		}
782 jpm 676
		return valide;
775 jpm 677
	}
678
 
822 jpm 679
	private void peuplerFormulaire() {
1032 jpm 680
		setValeurComboProjets();
822 jpm 681
		titreChp.setValue(publication.getTitre());
682
		collectionChp.setValue(publication.getCollection());
683
		uriChp.setValue(publication.getURI());
1032 jpm 684
		datePublicationChp.setValue(reduireDateParAnnee(publication.getDateParution()));
822 jpm 685
		tomeChp.setValue(publication.getIndicationNvt());
686
		fasciculeChp.setValue(publication.getFascicule());
687
		pagesChp.setValue(publication.getPages());
688
 
689
		if (publication.getEditeur().matches("^[0-9]+$")) {
690
			editeurCombobox.setValue(editeurCombobox.getStore().findModel("id_structure", publication.getEditeur()));
691
		} else {
692
			editeurCombobox.setRawValue(publication.getEditeur());
693
		}
694
	}
695
 
786 jpm 696
	private Publication collecterPublication() {
697
		Publication publicationCollectee = (Publication) publication.cloner(new Publication());
698
 
1032 jpm 699
		publicationCollectee.setIdProjet(getValeurComboProjets());
700
 
1124 jpm 701
		publicationCollectee.setAuteur(construireIntituleAuteur());
786 jpm 702
 
703
		String titre = titreChp.getValue();
704
		publicationCollectee.setTitre(titre);
705
 
706
		String collection = collectionChp.getValue();
707
		publicationCollectee.setCollection(collection);
708
 
1124 jpm 709
		publicationCollectee.setNomComplet(construireNomComplet());
786 jpm 710
 
711
		String uri = uriChp.getValue();
712
		publicationCollectee.setUri(uri);
713
 
714
		String editeur = "";
792 jpm 715
		if (editeurCombobox.getValue() != null) {
716
			editeur = editeurCombobox.getValue().getId();
799 jpm 717
			publicationCollectee.setStructureEditeur(editeurCombobox.getValue());
792 jpm 718
		} else if (editeurCombobox.getRawValue() != "") {
719
			editeur = editeurCombobox.getRawValue();
786 jpm 720
		}
721
		publicationCollectee.setEditeur(editeur);
722
 
792 jpm 723
		String anneePublication = datePublicationChp.getRawValue();
724
		String datePublication = anneePublication+"-00-00";
725
		publicationCollectee.setDateParution(datePublication);
786 jpm 726
 
727
		String tome = tomeChp.getValue();
728
		publicationCollectee.setIndicationNvt(tome);
729
 
730
		String fascicule = fasciculeChp.getValue();
731
		publicationCollectee.setFascicule(fascicule);
732
 
733
		String pages = pagesChp.getValue();
734
		publicationCollectee.setPages(pages);
735
 
927 jpm 736
		Publication publicationARetourner = null;
786 jpm 737
		if (!publicationCollectee.comparer(publication)) {
738
			publicationARetourner = publication = publicationCollectee;
739
		}
740
		return publicationARetourner;
741
	}
742
 
1124 jpm 743
	private String construireIntituleEditeur() {
744
		String editeur = "";
745
		if (editeurCombobox.getValue() != null) {
746
			editeur = editeurCombobox.getValue().getNom();
747
		} else if (editeurCombobox.getRawValue() != "") {
748
			editeur = editeurCombobox.getRawValue();
749
		}
750
		return editeur;
751
	}
752
 
753
	private String construireIntituleAuteur() {
754
		String inituleAuteur = "";
755
		int auteursNombre = auteurComboboxListe.size();
756
		for (int i = 0; i < auteursNombre; i++) {
757
			if (auteurComboboxListe.get(i).getValue() != null) {
758
				Personne auteur = auteurComboboxListe.get(i).getValue();
759
				inituleAuteur += auteur.getNom().toUpperCase()+ " "+auteur.getPrenom();
760
				if (i != (auteursNombre - 1)) {
761
					inituleAuteur += ", ";
762
				}
763
			}
764
		}
765
		return inituleAuteur;
766
	}
767
 
768
	private String construireNomComplet() {
769
		// Intitulé de la publication complet : fmt_auteur, date_parution(année). titre. Editeur (nom), collection, fascicule, indication_nvt. pages.
770
		String nomComplet = "";
771
		String auteurs = construireIntituleAuteur();
772
		String annee = datePublicationChp.getRawValue();
773
		String titre = titreChp.getValue();
774
		String editeur = construireIntituleEditeur();
775
 
776
		nomComplet += auteurs+", "+annee+". "+titre+".";
777
 
778
		if (!UtilString.isEmpty(editeur)) {
779
			nomComplet += " Éditeur "+editeur+".";
780
		}
781
 
782
		if (collectionChp.getValue() != null) {
783
			String revue = collectionChp.getValue();
784
			nomComplet += ", "+revue;
785
		}
786
 
787
		if (fasciculeChp.getValue() != null) {
788
			String fascicule = fasciculeChp.getValue();
789
			nomComplet += ", "+fascicule;
790
		}
791
 
792
		if (tomeChp.getValue() != null) {
793
			String tomaison = tomeChp.getValue();
794
			nomComplet += ", "+tomaison;
795
		}
796
 
797
		if (collectionChp.getValue() != null || fasciculeChp.getValue() != null || tomeChp.getValue() != null) {
798
			nomComplet += ".";
799
		}
800
 
801
		if (pagesChp.getValue() != null) {
802
			String pages = pagesChp.getValue();
803
			nomComplet += pages+".";
804
		}
805
 
806
		return nomComplet;
807
	}
808
 
934 jpm 809
	public void reinitialiserFormulaire() {
781 jpm 810
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
786 jpm 811
			mediateur.afficherFormPublication(publication.getId());
775 jpm 812
		} else {
813
			mediateur.afficherFormPublication(null);
219 aurelien 814
		}
815
	}
227 aurelien 816
 
792 jpm 817
	private boolean etreDateValide(String anneePublication) {
782 jpm 818
		boolean valide = true;
792 jpm 819
		if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
782 jpm 820
			valide = false;
725 aurelien 821
		}
782 jpm 822
		return valide;
725 aurelien 823
	}
758 aurelien 824
 
825
	private String reduireDateParAnnee(String datePar) {
775 jpm 826
		if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
758 aurelien 827
			return datePar.split("-")[0];
505 jp_milcent 828
		} else {
758 aurelien 829
			return "";
227 aurelien 830
		}
758 aurelien 831
	}
1032 jpm 832
 
833
	private String getValeurComboProjets() {
834
		String valeur = "";
835
		if (projetsCombo.getValue() != null) {
836
			valeur = projetsCombo.getValue().getId();
837
		}
838
		return valeur;
839
	}
840
	private void setValeurComboProjets() {
841
		if (projetsCombo.getStore() != null ) {
842
			if (mode.equals(Formulaire.MODE_MODIFIER) && publication != null) {
843
				projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", publication.getIdProjet()));
844
			} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
845
				projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", mediateur.getProjetId()));
846
			}
847
		}
848
	}
505 jp_milcent 849
}