Subversion Repositories eFlore/Applications.coel

Rev

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