Subversion Repositories eFlore/Applications.coel

Rev

Rev 1124 | Rev 1133 | 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;
52
	private PublicationAPersonneListe publicationAPersonneListe = 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;
786 jpm 71
	private TextField<String> datePublicationChp = null;
72
	private TextField<String> tomeChp = null;
73
	private TextField<String> fasciculeChp = null;
74
	private TextField<String> pagesChp = null;
219 aurelien 75
 
775 jpm 76
	private String idStructureEdition = "";
786 jpm 77
 
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) {
905 jpm 95
		publicationAPersonneListe = new PublicationAPersonneListe();
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();
219 aurelien 168
 
822 jpm 169
		if (mode.equals(Formulaire.MODE_AJOUTER)) {
170
			creerChampAuteurEtBoutonSupprimer(null);
775 jpm 171
		}
172
	}
173
 
822 jpm 174
	public void creerChampAuteurEtBoutonSupprimer(Personne auteur) {
775 jpm 175
		final HorizontalPanel panneauHorizontal = new HorizontalPanel();
176
		panneauHorizontal.setLayout(new FormLayout());
219 aurelien 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());
758 aurelien 185
 
822 jpm 186
		LayoutContainer panneauChampTxtEtBouton = new LayoutContainer();
187
		panneauChampTxtEtBouton.setLayout(new FormLayout());
188
		panneauChampTxtEtBouton.add(auteursSaisisComboBox, new FormData(300, 0));
189
		panneauHorizontal.add(panneauChampTxtEtBouton);
219 aurelien 190
 
822 jpm 191
		Button supprimerAuteurBouton = new Button();
192
		supprimerAuteurBouton.setIcon(Images.ICONES.supprimer());
193
		supprimerAuteurBouton.setToolTip(i18nC.supprimer());
194
		supprimerAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
775 jpm 195
			@Override
196
			public void componentSelected(ButtonEvent be) {
197
				auteurComboboxListe.remove(auteursSaisisComboBox);
198
				conteneurChamps.remove(panneauHorizontal);
822 jpm 199
 
200
				int numeroAuteurs = 1;
201
				for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) {
989 jpm 202
					it.next().setFieldLabel(i18nC.publicationAuteurSingulier()+" "+numeroAuteurs);
822 jpm 203
					numeroAuteurs++;
204
				}
205
 
1131 jpm 206
				auteursFieldset.layout();
775 jpm 207
			}
208
		});
822 jpm 209
		panneauHorizontal.add(supprimerAuteurBouton);
210
 
775 jpm 211
		conteneurChamps.add(panneauHorizontal);
1131 jpm 212
		auteursFieldset.layout();
775 jpm 213
	}
214
 
215
	private ComboBox<Personne> creerComboBoxAuteursSaisis() {
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);
223
		comboBox.setStore(auteursStorePartage);
981 jpm 224
		comboBox.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 225
		comboBox.addListener(Events.Valid, creerEcouteurChampObligatoire());
775 jpm 226
 
227
		return comboBox;
228
	}
229
 
230
	private void creerZoneGeneralites() {
231
		FormLayout layout = new FormLayout();
232
		layout.setLabelWidth(200);
219 aurelien 233
 
234
		// Fieldset Infos Générales
775 jpm 235
		generalitesFieldset = new FieldSet();
236
		generalitesFieldset.setHeading("Informations générales");
237
		generalitesFieldset.setCollapsible(true);
238
		generalitesFieldset.setLayout(layout);
219 aurelien 239
 
1032 jpm 240
		projetsCombo = new ComboBox<Projet>();
241
		projetsCombo.setTabIndex(tabIndex++);
242
		projetsCombo.setFieldLabel(i18nC.projetChamp());
243
		projetsCombo.setDisplayField("nom");
244
		projetsCombo.setForceSelection(true);
245
		projetsCombo.setValidator(new Validator() {
246
			@Override
247
			public String validate(Field<?> field, String value) {
248
				String retour = null;
249
				if (field.getRawValue().equals("")) {
250
					field.setValue(null);
251
				} else if (projetsCombo.getStore().findModel("nom", field.getRawValue()) == null) {
252
					String contenuBrut = field.getRawValue();
253
					field.setValue(null);
254
					field.setRawValue(contenuBrut);
255
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
256
				}
257
				return retour;
258
			}
259
		});
260
		projetsCombo.setTriggerAction(TriggerAction.ALL);
261
		projetsCombo.setStore(new ListStore<Projet>());
262
		projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
263
		projetsCombo.addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
264
		generalitesFieldset.add(projetsCombo, new FormData(450, 0));
265
		mediateur.selectionnerProjet(this, null);
266
 
786 jpm 267
		titreChp = new TextField<String>();
268
		titreChp.setName("cpu");
269
		titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
981 jpm 270
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 271
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
792 jpm 272
		generalitesFieldset.add(titreChp, new FormData(450, 0));
219 aurelien 273
 
786 jpm 274
		collectionChp = new TextField<String>();
792 jpm 275
		collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
276
		generalitesFieldset.add(collectionChp, new FormData(450, 0));
219 aurelien 277
 
786 jpm 278
		uriChp = new TextField<String>();
792 jpm 279
		uriChp.setFieldLabel("URL de la publication");
280
		generalitesFieldset.add(uriChp, new FormData(450, 0));
775 jpm 281
	}
282
 
283
	private void creerZoneEdition() {
284
		FormLayout layout = new FormLayout();
285
		layout.setLabelWidth(200);
286
 
219 aurelien 287
		// Fieldset Edition
775 jpm 288
		editionFieldset = new FieldSet();
792 jpm 289
		editionFieldset.setHeading("Édition");
775 jpm 290
		editionFieldset.setCollapsible(true);
291
		editionFieldset.setLayout(layout);
219 aurelien 292
 
792 jpm 293
		ListStore<Structure> editeurStore = new ListStore<Structure>();
294
		editeurCombobox = new ComboBox<Structure>();
295
		editeurCombobox.setEmptyText("Sélectionner un éditeur...");
296
		editeurCombobox.setFieldLabel("Éditeur de la publication");
297
		editeurCombobox.setDisplayField("nom");
298
		editeurCombobox.setStore(editeurStore);
299
		editeurCombobox.setEditable(true);
300
		editeurCombobox.setTriggerAction(TriggerAction.ALL);
301
		editionFieldset.add(editeurCombobox, new FormData(450, 0));
302
		mediateur.clicObtenirListeEditeurs(this);
219 aurelien 303
 
786 jpm 304
		datePublicationChp = new TextField<String>();
305
		datePublicationChp.setMaxLength(4);
306
		datePublicationChp.setMinLength(4);
307
		datePublicationChp.setFieldLabel("Année de publication");
981 jpm 308
		datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 309
		datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
792 jpm 310
		editionFieldset.add(datePublicationChp, new FormData(40, 0));
219 aurelien 311
 
786 jpm 312
		tomeChp = new TextField<String>();
792 jpm 313
		tomeChp.setFieldLabel("Série de la revue ou tome");
314
		editionFieldset.add(tomeChp, new FormData(75, 0));
219 aurelien 315
 
786 jpm 316
		fasciculeChp = new TextField<String>();
792 jpm 317
		fasciculeChp.setFieldLabel("Fascicule de la revue");
318
		editionFieldset.add(fasciculeChp, new FormData(75, 0));
219 aurelien 319
 
786 jpm 320
		pagesChp = new TextField<String>();
321
		pagesChp.setFieldLabel("Pages");
887 aurelien 322
		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 323
		editionFieldset.add(pagesChp, new FormData(100, 0));
219 aurelien 324
	}
775 jpm 325
 
705 aurelien 326
	public void rafraichir(Object nouvellesDonnees) {
327
		if (nouvellesDonnees instanceof Publication) {
782 jpm 328
			// Si on a reçu les details d'une publication
329
			rafraichirPublication((Publication) nouvellesDonnees);
330
		} else if (nouvellesDonnees instanceof StructureListe) {
331
			// Si on a reçu une liste des editeurs
332
			rafraichirListeEditeurs((StructureListe) nouvellesDonnees);
333
		} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {
334
			rafraichirListeAuteurs((PublicationAPersonneListe) nouvellesDonnees);
335
		} else if (nouvellesDonnees instanceof Information) {
336
			rafraichirInformation((Information) nouvellesDonnees);
1032 jpm 337
		} else if (nouvellesDonnees instanceof ProjetListe) {
338
			ProjetListe projets = (ProjetListe) nouvellesDonnees;
339
			Formulaire.rafraichirComboBox(projets, projetsCombo);
340
			setValeurComboProjets();
782 jpm 341
		} else {
342
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
227 aurelien 343
		}
344
 
822 jpm 345
		if (etrePretAAfficherAuteurs()) {
1131 jpm 346
			afficherAuteurs();
901 jpm 347
			initialiserAffichageAuteurs();
822 jpm 348
		}
349
 
782 jpm 350
		if (etreValide()) {
822 jpm 351
			initialiserValidation();
782 jpm 352
			repandreRafraichissement();
353
			controlerFermetureApresRafraichissement();
219 aurelien 354
		}
782 jpm 355
	}
901 jpm 356
 
357
	private void miseAJourPublicationAPersonneListe() {
358
		Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
359
		while (clesAjoutees.hasNext()) {
360
			String id = clesAjoutees.next();
361
			publicationAPersonneListe.put(id, auteursAjoutes.get(id));
362
		}
363
 
364
		Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
365
		while (clesSupprimees.hasNext()) {
366
			String id = clesSupprimees.next();
367
			publicationAPersonneListe.remove(id);
368
		}
369
	}
370
 
786 jpm 371
	private void rafraichirPublication(Publication publi) {
1131 jpm 372
		publicationOk = true;
786 jpm 373
		publication = publi;
822 jpm 374
		peuplerFormulaire();
1095 jpm 375
		genererTitreFormulaire();
782 jpm 376
	}
377
 
378
	private void rafraichirListeEditeurs(StructureListe editeurs) {
792 jpm 379
		editeurCombobox.getStore().removeAll();
380
		editeurCombobox.getStore().add((List<Structure>) editeurs.toList());
782 jpm 381
 
382
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
792 jpm 383
			editeurCombobox.setValue((Structure) editeurs.get(idStructureEdition));
782 jpm 384
		}
792 jpm 385
		editeurCombobox.expand();
782 jpm 386
	}
387
 
388
	private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) {
786 jpm 389
		publicationAPersonneListe = auteurs;
822 jpm 390
		publicationAPersonneListeChargementOk = true;
782 jpm 391
	}
392
 
393
	private void rafraichirInformation(Information info) {
1095 jpm 394
		String type = info.getType();
395
		if (type.equals("ajout_publication") || type.equals("modif_publication")) {
396
			publicationValideOk = true;
397
			if (vueExterneARafraichirApresValidation != null) {
398
				publication.setId((String) info.getDonnee(0));
399
			}
400
 
401
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
402
				attenteAjoutAuteursOk = true;
403
				mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
404
			}
405
		}
406
 
782 jpm 407
		if (info.getType().equals("liste_personne")) {
822 jpm 408
			PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0);
409
 
782 jpm 410
			List<Personne> liste = listePersonneAuteur.toList();
411
			auteursStorePartage.removeAll();
412
			auteursStorePartage.add(liste);
822 jpm 413
 
414
			auteurStorePartageChargementOk = true;
901 jpm 415
		} else if (info.getType().equals("ajout_publication_a_personne")) {
416
			attenteAjoutAuteursOk = false;
417
			GWT.log("attenteAjoutAuteursOk", null);
418
		} else if (info.getType().equals("suppression_publication_a_personne")) {
419
			attenteSuppressionAuteursOk = false;
420
			GWT.log("attenteSuppressionAuteursOk", null);
1095 jpm 421
		} else if (info.getType().equals("modif_publication")) {
422
			Info.display("Modification d'une publication", info.toString());
423
		} else if (info.getType().equals("ajout_publication")) {
424
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
425
				String publicationId = (String) info.getDonnee(0);
426
				Info.display("Ajout d'une publication", "La publication '"+publicationId+"' a bien été ajoutée");
427
				if (vueExterneARafraichirApresValidation != null) {
428
					publication.setId(publicationId);
429
				}
430
			} else {
431
				Info.display("Ajout d'une publication", info.toString());
432
			}
901 jpm 433
		}
434
 
435
		if (avoirAuteursMiseAJourCorrectement()) {
1131 jpm 436
			Debug.log("Mise à jour liste auteur");
901 jpm 437
			miseAJourPublicationAPersonneListe();
438
			initialiserAuteurs();
1131 jpm 439
			auteursValideOk = true;
782 jpm 440
		}
441
	}
442
 
901 jpm 443
	private boolean avoirAuteursMiseAJourCorrectement() {
444
		boolean ok = false;
445
		if (attenteAjoutAuteursOk == false && attenteSuppressionAuteursOk == false) {
446
			ok = true;
447
		}
448
		return ok;
449
	}
450
 
822 jpm 451
	private void afficherAuteurs() {
452
		Iterator<String> itap = publicationAPersonneListe.keySet().iterator();
453
		while (itap.hasNext()) {
454
			creerChampAuteurEtBoutonSupprimer(publicationAPersonneListe.get(itap.next()).getPersonne());
455
		}
456
	}
457
 
458
	private void initialiserAffichageAuteurs() {
1131 jpm 459
		publicationOk = false;
822 jpm 460
		auteurStorePartageChargementOk = false;
461
		publicationAPersonneListeChargementOk = false;
462
	}
463
 
464
	private boolean etrePretAAfficherAuteurs() {
465
		boolean ok = false;
1131 jpm 466
		if (publicationOk && auteurStorePartageChargementOk && publicationAPersonneListeChargementOk) {
822 jpm 467
			ok = true;
468
		}
469
		return ok;
470
	}
471
 
782 jpm 472
	private Boolean etreValide() {
473
		Boolean valide = false;
989 jpm 474
		//Debug.log("formulaire"+formulaireValideOk+" - Publication :"+publicationValideOk+" - Auteurs :"+auteursValideOk, null);
822 jpm 475
		if (formulaireValideOk && publicationValideOk && auteursValideOk) {
782 jpm 476
			valide = true;
477
		}
478
		return valide;
479
	}
480
 
822 jpm 481
	private void initialiserValidation() {
482
		formulaireValideOk = false;
483
		publicationValideOk = false;
901 jpm 484
		initialiserAuteurs();
822 jpm 485
		auteursValideOk = false;
782 jpm 486
	}
487
 
901 jpm 488
	private void initialiserAuteurs() {
489
		attenteAjoutAuteursOk = true;
490
		auteursAjoutes = new PublicationAPersonneListe();
491
		attenteSuppressionAuteursOk = true;
492
		auteursSupprimes = new PublicationAPersonneListe();
493
	}
494
 
782 jpm 495
	private void repandreRafraichissement() {
496
		if (vueExterneARafraichirApresValidation != null) {
786 jpm 497
			String type = "publication_modifiee";
498
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
499
				type = "publication_ajoutee";
500
			}
501
			Information info = new Information(type);
502
			info.setDonnee(0, publication);
782 jpm 503
			vueExterneARafraichirApresValidation.rafraichir(info);
504
		}
505
	}
506
 
786 jpm 507
	public boolean soumettreFormulaire() {
822 jpm 508
		formulaireValideOk = verifierFormulaire();
509
		if (formulaireValideOk) {
901 jpm 510
			soumettrePublication();
511
			soumettreAuteurs();
512
		}
513
		return formulaireValideOk;
514
	}
515
 
516
	private void soumettrePublication() {
517
		Publication publicationCollectee = collecterPublication();
518
		if (publicationCollectee != null) {
519
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
520
				mediateur.ajouterPublication(this, publicationCollectee);
521
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
522
				mediateur.modifierPublication(this, publicationCollectee);
523
			}
524
		}
525
	}
526
 
527
	private void soumettreAuteurs() {
528
		attenteAjoutAuteursOk = false;
529
		attenteSuppressionAuteursOk = false;
530
 
531
		PersonneListe personnesInitiales = new PersonneListe();
532
		if (publicationAPersonneListe != null) {
533
			Iterator<String> itap = publicationAPersonneListe.keySet().iterator();
534
			while (itap.hasNext()) {
535
				Personne personne = publicationAPersonneListe.get(itap.next()).getPersonne();
536
				personnesInitiales.put(personne.getId(), personne);
537
			}
538
		}
539
 
540
		PersonneListe personnesActuelles = new PersonneListe();
1131 jpm 541
		if (auteurComboboxListe != null) {
542
			Iterator<ComboBox<Personne>> itcp = auteurComboboxListe.iterator();
543
			while (itcp.hasNext()) {
544
				Personne personne = itcp.next().getValue();
545
				if (personne != null) {
546
					personnesActuelles.put(personne.getId(), personne);
547
				} else {
548
					Debug.log(itcp.next().getRawValue());
549
				}
901 jpm 550
			}
551
		}
552
 
553
		// Auteurs ajoutés
554
		Iterator<String> clesActuelles = personnesActuelles.keySet().iterator();
555
		while (clesActuelles.hasNext()) {
556
			String idActuel = clesActuelles.next();
557
			if (personnesInitiales.size() == 0 || personnesInitiales.get(idActuel) == null) {
558
				Personne personne = personnesActuelles.get(idActuel);
559
				PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
560
				if (mode.equals(Formulaire.MODE_MODIFIER)) {
561
					publicationAAuteur.setIdPublication(publication.getId());
741 aurelien 562
				}
901 jpm 563
				publicationAAuteur.setPersonne(personne);
564
				publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
565
				auteursAjoutes.put(publicationAAuteur.getId(), publicationAAuteur);
566
				attenteAjoutAuteursOk = true;
239 aurelien 567
			}
568
		}
901 jpm 569
 
570
		// Auteurs supprimés
571
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
572
			Iterator<String> clesInitiales = personnesInitiales.keySet().iterator();
573
			while (clesInitiales.hasNext()) {
574
				String idInitial = clesInitiales.next();
575
				if (personnesActuelles.size() == 0 || personnesActuelles.get(idInitial) == null) {
576
					Personne personne = personnesInitiales.get(idInitial);
577
					PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
578
					publicationAAuteur.setIdPublication(publication.getId());
579
					publicationAAuteur.setPersonne(personne);
580
					publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
581
					auteursSupprimes.put(publicationAAuteur.getId(), publicationAAuteur);
582
					attenteSuppressionAuteursOk = true;
583
				}
584
			}
585
		}
586
 
587
		// Execution de les mise à jour pour le mode MODIFICATION
588
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
589
			if (auteursAjoutes != null && auteursAjoutes.size() != 0) {
590
				mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
591
			}
592
 
593
			if (auteursSupprimes != null && auteursSupprimes.size() != 0) {
594
				mediateur.supprimerPublicationAPersonne(this, auteursSupprimes);
595
			}
596
		}
1131 jpm 597
		Debug.log("personnesInitiales:"+personnesInitiales.size()+" - personnesActuelles :"+personnesActuelles.size()+" - auteursSupprimes :"+auteursSupprimes.size()+" - auteursAjoutes :"+auteursAjoutes.size());
219 aurelien 598
	}
599
 
934 jpm 600
	public boolean verifierFormulaire() {
782 jpm 601
		boolean valide = true;
602
		ArrayList<String> messages = new ArrayList<String>();
603
 
786 jpm 604
		boolean auteurErreur = true;
775 jpm 605
		for (int i = 0; i < auteurComboboxListe.size(); i++) {
606
			if (auteurComboboxListe.get(i).getValue() != null) {
786 jpm 607
				auteurErreur = false;
782 jpm 608
				break;
227 aurelien 609
			}
610
		}
782 jpm 611
		if (auteurErreur) {
612
			messages.add("Veuillez saisir au moins un auteur !");
705 aurelien 613
		}
614
 
786 jpm 615
		String titre = titreChp.getValue();
782 jpm 616
		if (titre == null || titre.equals("")) {
617
			messages.add("Veuillez saisir le titre de la publication !");
705 aurelien 618
		}
619
 
792 jpm 620
		String uri = uriChp.getValue();
621
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
622
			messages.add("L'URL saisie n'est pas valide !");
623
		}
624
 
799 jpm 625
		String datePublication = datePublicationChp.getRawValue();
626
		if (datePublication == null || datePublication.equals("")) {
627
			messages.add("Veuillez saisir une année de parution !");
725 aurelien 628
		} else {
799 jpm 629
			if (!etreDateValide(datePublication)) {
792 jpm 630
				messages.add("Le format de l'année saisie est incorrect !");
725 aurelien 631
			}
705 aurelien 632
		}
717 aurelien 633
 
792 jpm 634
		String pages = pagesChp.getValue();
635
		String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
799 jpm 636
		if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
792 jpm 637
			messages.add("Le format des pages est incorrect !");
638
		}
639
 
782 jpm 640
		if (messages.size() != 0) {
641
			String[] tableauDeMessages = {};
642
			tableauDeMessages = messages.toArray(tableauDeMessages);
799 jpm 643
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
782 jpm 644
			valide = false;
705 aurelien 645
		}
782 jpm 646
		return valide;
775 jpm 647
	}
648
 
822 jpm 649
	private void peuplerFormulaire() {
650
		creerChampsAuteur();
1032 jpm 651
		setValeurComboProjets();
822 jpm 652
		titreChp.setValue(publication.getTitre());
653
		collectionChp.setValue(publication.getCollection());
654
		uriChp.setValue(publication.getURI());
1032 jpm 655
		datePublicationChp.setValue(reduireDateParAnnee(publication.getDateParution()));
822 jpm 656
		tomeChp.setValue(publication.getIndicationNvt());
657
		fasciculeChp.setValue(publication.getFascicule());
658
		pagesChp.setValue(publication.getPages());
659
 
660
		if (publication.getEditeur().matches("^[0-9]+$")) {
661
			editeurCombobox.setValue(editeurCombobox.getStore().findModel("id_structure", publication.getEditeur()));
662
			idStructureEdition = publication.getEditeur();
663
		} else {
664
			editeurCombobox.setRawValue(publication.getEditeur());
665
		}
666
	}
667
 
786 jpm 668
	private Publication collecterPublication() {
669
		Publication publicationCollectee = (Publication) publication.cloner(new Publication());
670
 
1032 jpm 671
		publicationCollectee.setIdProjet(getValeurComboProjets());
672
 
1124 jpm 673
		publicationCollectee.setAuteur(construireIntituleAuteur());
786 jpm 674
 
675
		String titre = titreChp.getValue();
676
		publicationCollectee.setTitre(titre);
677
 
678
		String collection = collectionChp.getValue();
679
		publicationCollectee.setCollection(collection);
680
 
1124 jpm 681
		publicationCollectee.setNomComplet(construireNomComplet());
786 jpm 682
 
683
		String uri = uriChp.getValue();
684
		publicationCollectee.setUri(uri);
685
 
686
		String editeur = "";
792 jpm 687
		if (editeurCombobox.getValue() != null) {
688
			editeur = editeurCombobox.getValue().getId();
799 jpm 689
			publicationCollectee.setStructureEditeur(editeurCombobox.getValue());
792 jpm 690
		} else if (editeurCombobox.getRawValue() != "") {
691
			editeur = editeurCombobox.getRawValue();
786 jpm 692
		}
693
		publicationCollectee.setEditeur(editeur);
694
 
792 jpm 695
		String anneePublication = datePublicationChp.getRawValue();
696
		String datePublication = anneePublication+"-00-00";
697
		publicationCollectee.setDateParution(datePublication);
786 jpm 698
 
699
		String tome = tomeChp.getValue();
700
		publicationCollectee.setIndicationNvt(tome);
701
 
702
		String fascicule = fasciculeChp.getValue();
703
		publicationCollectee.setFascicule(fascicule);
704
 
705
		String pages = pagesChp.getValue();
706
		publicationCollectee.setPages(pages);
707
 
927 jpm 708
		Publication publicationARetourner = null;
786 jpm 709
		if (!publicationCollectee.comparer(publication)) {
710
			publicationARetourner = publication = publicationCollectee;
711
		}
712
		return publicationARetourner;
713
	}
714
 
1124 jpm 715
	private String construireIntituleEditeur() {
716
		String editeur = "";
717
		if (editeurCombobox.getValue() != null) {
718
			editeur = editeurCombobox.getValue().getNom();
719
		} else if (editeurCombobox.getRawValue() != "") {
720
			editeur = editeurCombobox.getRawValue();
721
		}
722
		return editeur;
723
	}
724
 
725
	private String construireIntituleAuteur() {
726
		String inituleAuteur = "";
727
		int auteursNombre = auteurComboboxListe.size();
728
		for (int i = 0; i < auteursNombre; i++) {
729
			if (auteurComboboxListe.get(i).getValue() != null) {
730
				Personne auteur = auteurComboboxListe.get(i).getValue();
731
				inituleAuteur += auteur.getNom().toUpperCase()+ " "+auteur.getPrenom();
732
				if (i != (auteursNombre - 1)) {
733
					inituleAuteur += ", ";
734
				}
735
			}
736
		}
737
		return inituleAuteur;
738
	}
739
 
740
	private String construireNomComplet() {
741
		// Intitulé de la publication complet : fmt_auteur, date_parution(année). titre. Editeur (nom), collection, fascicule, indication_nvt. pages.
742
		String nomComplet = "";
743
		String auteurs = construireIntituleAuteur();
744
		String annee = datePublicationChp.getRawValue();
745
		String titre = titreChp.getValue();
746
		String editeur = construireIntituleEditeur();
747
 
748
		nomComplet += auteurs+", "+annee+". "+titre+".";
749
 
750
		if (!UtilString.isEmpty(editeur)) {
751
			nomComplet += " Éditeur "+editeur+".";
752
		}
753
 
754
		if (collectionChp.getValue() != null) {
755
			String revue = collectionChp.getValue();
756
			nomComplet += ", "+revue;
757
		}
758
 
759
		if (fasciculeChp.getValue() != null) {
760
			String fascicule = fasciculeChp.getValue();
761
			nomComplet += ", "+fascicule;
762
		}
763
 
764
		if (tomeChp.getValue() != null) {
765
			String tomaison = tomeChp.getValue();
766
			nomComplet += ", "+tomaison;
767
		}
768
 
769
		if (collectionChp.getValue() != null || fasciculeChp.getValue() != null || tomeChp.getValue() != null) {
770
			nomComplet += ".";
771
		}
772
 
773
		if (pagesChp.getValue() != null) {
774
			String pages = pagesChp.getValue();
775
			nomComplet += pages+".";
776
		}
777
 
778
		return nomComplet;
779
	}
780
 
934 jpm 781
	public void reinitialiserFormulaire() {
781 jpm 782
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
786 jpm 783
			mediateur.afficherFormPublication(publication.getId());
775 jpm 784
		} else {
785
			mediateur.afficherFormPublication(null);
219 aurelien 786
		}
787
	}
227 aurelien 788
 
792 jpm 789
	private boolean etreDateValide(String anneePublication) {
782 jpm 790
		boolean valide = true;
792 jpm 791
		if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
782 jpm 792
			valide = false;
725 aurelien 793
		}
782 jpm 794
		return valide;
725 aurelien 795
	}
758 aurelien 796
 
797
	private String reduireDateParAnnee(String datePar) {
775 jpm 798
		if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
758 aurelien 799
			return datePar.split("-")[0];
505 jp_milcent 800
		} else {
758 aurelien 801
			return "";
227 aurelien 802
		}
758 aurelien 803
	}
1032 jpm 804
 
805
	private String getValeurComboProjets() {
806
		String valeur = "";
807
		if (projetsCombo.getValue() != null) {
808
			valeur = projetsCombo.getValue().getId();
809
		}
810
		return valeur;
811
	}
812
	private void setValeurComboProjets() {
813
		if (projetsCombo.getStore() != null ) {
814
			if (mode.equals(Formulaire.MODE_MODIFIER) && publication != null) {
815
				projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", publication.getIdProjet()));
816
			} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
817
				projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", mediateur.getProjetId()));
818
			}
819
		}
820
	}
505 jp_milcent 821
}