Subversion Repositories eFlore/Applications.coel

Rev

Rev 985 | Rev 999 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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