Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | 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;
1329 cyprien 9
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
1284 gduche 10
import org.tela_botanica.client.composants.InfoLogger;
1369 cyprien 11
import org.tela_botanica.client.composants.pagination.ProxyPersonnes;
1329 cyprien 12
import org.tela_botanica.client.composants.pagination.ProxyProjets;
13
import org.tela_botanica.client.composants.pagination.ProxyStructures;
822 jpm 14
import org.tela_botanica.client.images.Images;
219 aurelien 15
import org.tela_botanica.client.interfaces.Rafraichissable;
705 aurelien 16
import org.tela_botanica.client.modeles.Information;
775 jpm 17
import org.tela_botanica.client.modeles.MenuApplicationId;
1329 cyprien 18
import org.tela_botanica.client.modeles.Valeur;
1284 gduche 19
import org.tela_botanica.client.modeles.aDonnee;
1375 cyprien 20
import org.tela_botanica.client.modeles.collection.CollectionAPersonne;
935 jpm 21
import org.tela_botanica.client.modeles.personne.Personne;
22
import org.tela_botanica.client.modeles.personne.PersonneListe;
1032 jpm 23
import org.tela_botanica.client.modeles.projet.Projet;
24
import org.tela_botanica.client.modeles.projet.ProjetListe;
935 jpm 25
import org.tela_botanica.client.modeles.publication.Publication;
26
import org.tela_botanica.client.modeles.publication.PublicationAPersonne;
27
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
28
import org.tela_botanica.client.modeles.structure.Structure;
29
import org.tela_botanica.client.modeles.structure.StructureListe;
1322 gduche 30
import org.tela_botanica.client.synchronisation.Sequenceur;
1329 cyprien 31
import org.tela_botanica.client.util.Debug;
792 jpm 32
import org.tela_botanica.client.util.Pattern;
782 jpm 33
import org.tela_botanica.client.util.UtilArray;
884 jpm 34
import org.tela_botanica.client.util.UtilString;
1284 gduche 35
import org.tela_botanica.client.vues.FenetreForm;
935 jpm 36
import org.tela_botanica.client.vues.Formulaire;
1284 gduche 37
import org.tela_botanica.client.vues.FormulaireBarreValidation;
38
import org.tela_botanica.client.vues.personne.PersonneForm;
219 aurelien 39
 
1284 gduche 40
import com.extjs.gxt.ui.client.Style.Scroll;
41
import com.extjs.gxt.ui.client.Style.SortDir;
1329 cyprien 42
import com.extjs.gxt.ui.client.core.XTemplate;
43
import com.extjs.gxt.ui.client.data.ModelData;
44
import com.extjs.gxt.ui.client.data.ModelType;
1284 gduche 45
import com.extjs.gxt.ui.client.event.BaseEvent;
505 jp_milcent 46
import com.extjs.gxt.ui.client.event.ButtonEvent;
1284 gduche 47
import com.extjs.gxt.ui.client.event.ComponentEvent;
980 jpm 48
import com.extjs.gxt.ui.client.event.Events;
1284 gduche 49
import com.extjs.gxt.ui.client.event.KeyListener;
50
import com.extjs.gxt.ui.client.event.Listener;
219 aurelien 51
import com.extjs.gxt.ui.client.event.SelectionListener;
52
import com.extjs.gxt.ui.client.store.ListStore;
1284 gduche 53
import com.extjs.gxt.ui.client.store.Store;
54
import com.extjs.gxt.ui.client.store.StoreEvent;
1329 cyprien 55
import com.extjs.gxt.ui.client.widget.ContentPanel;
56
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
1095 jpm 57
import com.extjs.gxt.ui.client.widget.Info;
219 aurelien 58
import com.extjs.gxt.ui.client.widget.LayoutContainer;
705 aurelien 59
import com.extjs.gxt.ui.client.widget.MessageBox;
1284 gduche 60
import com.extjs.gxt.ui.client.widget.Text;
219 aurelien 61
import com.extjs.gxt.ui.client.widget.button.Button;
1284 gduche 62
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
219 aurelien 63
import com.extjs.gxt.ui.client.widget.form.ComboBox;
1032 jpm 64
import com.extjs.gxt.ui.client.widget.form.Field;
219 aurelien 65
import com.extjs.gxt.ui.client.widget.form.FieldSet;
1284 gduche 66
import com.extjs.gxt.ui.client.widget.form.FormPanel;
219 aurelien 67
import com.extjs.gxt.ui.client.widget.form.TextField;
1032 jpm 68
import com.extjs.gxt.ui.client.widget.form.Validator;
219 aurelien 69
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
1329 cyprien 70
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
1284 gduche 71
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
1329 cyprien 72
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
1284 gduche 73
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
74
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
1329 cyprien 75
import com.extjs.gxt.ui.client.widget.grid.Grid;
76
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
1284 gduche 77
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
1329 cyprien 78
import com.extjs.gxt.ui.client.widget.grid.RowExpander;
79
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
1284 gduche 80
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
219 aurelien 81
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
82
import com.extjs.gxt.ui.client.widget.layout.FormData;
83
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
1284 gduche 84
import com.extjs.gxt.ui.client.widget.layout.RowData;
85
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
86
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
87
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
705 aurelien 88
import com.google.gwt.core.client.GWT;
219 aurelien 89
 
877 aurelien 90
 
775 jpm 91
public class PublicationForm extends Formulaire implements Rafraichissable {
219 aurelien 92
 
1322 gduche 93
	//Variables de classe:
94
	// Relatives à la publication
786 jpm 95
	private Publication publication;
1322 gduche 96
 
97
	// Relatives aux auteurs
1133 jpm 98
	private PersonneListe auteursInitialListe = null;
1284 gduche 99
	private PersonneListe auteursAjoutes = null;
100
	private PersonneListe auteursSupprimes = null;
219 aurelien 101
 
1329 cyprien 102
	private ContentPanel auteursFieldset = null;
103
	private ChampComboBoxRechercheTempsReelPaginable projetsCombo = null;
775 jpm 104
	private ArrayList<ComboBox<Personne>> auteurComboboxListe = null;
105
	private ListStore<Personne> auteursStorePartage = null;
227 aurelien 106
 
775 jpm 107
	private FieldSet generalitesFieldset = null;
786 jpm 108
	private TextField<String> titreChp = null;
109
	private TextField<String> collectionChp = null;
110
	private TextField<String> uriChp = null;
219 aurelien 111
 
775 jpm 112
	private FieldSet editionFieldset = null;
1329 cyprien 113
	private ChampComboBoxRechercheTempsReelPaginable editeurCombobox = null;
786 jpm 114
	private TextField<String> datePublicationChp = null;
115
	private TextField<String> tomeChp = null;
116
	private TextField<String> fasciculeChp = null;
117
	private TextField<String> pagesChp = null;
219 aurelien 118
 
1284 gduche 119
	private LayoutContainer zoneHaut, zoneBas;
120
 
121
	private ToolBar barreOutils = null;
122
	private EditorGrid<Personne> grille;
1375 cyprien 123
	private ChampComboBoxRechercheTempsReelPaginable personnesSaisiesComboBox = null;
1284 gduche 124
	private Button personnesBoutonSupprimer = null;
125
	private Button personnesBoutonModifier = null;
126
	private PersonneListe listePersonne = new PersonneListe();
127
 
128
	private FenetreForm fenetreFormulaire = null;
1322 gduche 129
	private Sequenceur sequenceur;
1284 gduche 130
 
781 jpm 131
	public PublicationForm(Mediateur mediateurCourrant, String publicationId) {
782 jpm 132
		initialiserPublicationForm(mediateurCourrant, publicationId);
133
	}
134
 
135
	public PublicationForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) {
822 jpm 136
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
782 jpm 137
		initialiserPublicationForm(mediateurCourrant, publicationId);
138
	}
139
 
140
	private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
1322 gduche 141
		sequenceur = new Sequenceur();
799 jpm 142
		publication = new Publication();
822 jpm 143
		publication.setId(publicationId);
1322 gduche 144
		auteursInitialListe = new PersonneListe();
145
		initialiserAuteurs();	// Crée les listes d'auteurs ajoutés et supprimés
822 jpm 146
 
1322 gduche 147
		String modeDeCreation = (UtilString.isEmpty(publicationId) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
775 jpm 148
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
1284 gduche 149
		panneauFormulaire.setLayout(new RowLayout());
150
		panneauFormulaire.setStyleAttribute("padding", "0");
1322 gduche 151
 
1284 gduche 152
		zoneHaut = new LayoutContainer(new FitLayout());
153
		zoneBas = new LayoutContainer(new FlowLayout());
154
		panneauFormulaire.add(zoneHaut, new RowData(1, 0.3));
155
		panneauFormulaire.add(zoneBas, new RowData(1, 0.5));
156
		panneauFormulaire.setScrollMode(Scroll.AUTO);
1095 jpm 157
		genererTitreFormulaire();
158
 
775 jpm 159
		creerZoneAuteurs();
1284 gduche 160
		zoneHaut.add(auteursFieldset);
219 aurelien 161
 
775 jpm 162
		creerZoneGeneralites();
1284 gduche 163
		zoneBas.add(generalitesFieldset);
239 aurelien 164
 
775 jpm 165
		creerZoneEdition();
1284 gduche 166
		zoneBas.add(editionFieldset);
822 jpm 167
 
168
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
1322 gduche 169
			mediateurCourrant.selectionnerPublication(this, publicationId, sequenceur);
170
			mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR, sequenceur);
1373 cyprien 171
			sequenceur.enfilerRafraichissement(this, new Information("chargement_modifier_ok"));
822 jpm 172
		}
781 jpm 173
	}
782 jpm 174
 
1284 gduche 175
	public void actualiserEtatBoutonsBarreOutils() {
176
			// Activation des boutons si la grille contient un élément
177
			if (grille.getStore().getCount() > 0) {
178
				personnesBoutonSupprimer.enable();
179
				personnesBoutonModifier.enable();
180
			}
181
			// Désactivation des boutons si la grille ne contient plus d'élément
182
			if (grille.getStore().getCount() == 0) {
183
				personnesBoutonSupprimer.disable();
184
				personnesBoutonModifier.disable();
185
			}
186
		}
187
 
188
	private ToolBar creerBarreOutilsGrille() {
189
		ToolBar barreOutils = new ToolBar();
190
 
191
		Button ajouterBouton = creerBoutonAjouter();
192
		barreOutils.add(ajouterBouton);
193
 
194
		barreOutils.add(new Text(" ou "));
195
 
1375 cyprien 196
		creerComboBoxPersonnesSaisies();
1284 gduche 197
		barreOutils.add(personnesSaisiesComboBox);
198
 
199
		barreOutils.add(new SeparatorToolItem());
200
 
201
		personnesBoutonModifier = creerBoutonModifier();
202
		barreOutils.add(personnesBoutonModifier);
203
 
204
		barreOutils.add(new SeparatorToolItem());
205
 
206
		personnesBoutonSupprimer = creerBoutonSupprimer();
207
		barreOutils.add(personnesBoutonSupprimer);
208
 
209
		barreOutils.add(new SeparatorToolItem());
210
 
211
		Button rafraichirBouton = creerBoutonRafraichir();
212
		barreOutils.add(rafraichirBouton);
213
 
214
		return barreOutils;
215
	}
216
 
217
	private Button creerBoutonAjouter() {
218
		Button bouton = new Button(i18nC.ajouter());
219
		bouton.setIcon(Images.ICONES.vcardAjouter());
220
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
221
			public void componentSelected(ButtonEvent ce) {
222
				fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);
223
				fenetreFormulaire.show();
224
			}
225
		});
226
		return bouton;
227
	}
228
 
229
	private Button creerBoutonModifier() {
230
		Button bouton = new Button(i18nC.modifier());
231
		bouton.setIcon(Images.ICONES.vcardModifier());
232
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
233
			public void componentSelected(ButtonEvent ce) {
234
				Personne personneSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
235
 
236
				if (personneSaisieSelectionnee == null) {
237
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
238
				} else {
239
					fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);
240
					fenetreFormulaire.show();
241
				}
242
			}
243
		});
244
		return bouton;
245
	}
246
 
247
	private FenetreForm creerFenetreModaleAvecFormulairePersonne(String mode) {
248
		String personneId = null;
249
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
250
			Personne personneSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
251
			personneId = personneSaisieSelectionnee.getId();
252
		}
253
 
254
		final FenetreForm fenetre = new FenetreForm("");
255
		final PersonneForm formulaire = creerFormulairePersonne(fenetre, personneId);
256
		fenetre.add(formulaire);
257
		return fenetre;
258
	}
259
 
260
	private PersonneForm creerFormulairePersonne(final FenetreForm fenetre, final String personneId) {
261
		PersonneForm formulairePersonne = new PersonneForm(mediateur, personneId, this);
262
		FormPanel panneauFormulaire = formulairePersonne.getFormulaire();
263
		fenetre.setHeading(panneauFormulaire.getHeading());
264
		panneauFormulaire.setHeaderVisible(false);
265
		panneauFormulaire.setTopComponent(null);
266
 
267
		// FIXME : avec GXT-2.1.0 la redéfinition du bottom component ne marche plus. Nous le cachons et en créeons un dans la fenêtre.
268
		panneauFormulaire.getBottomComponent().hide();
269
		SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePersonne(fenetre, formulairePersonne);
270
		final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
271
		fenetre.setBottomComponent(barreValidation);
272
 
273
		return formulairePersonne;
274
	}
275
 
276
	private SelectionListener<ButtonEvent> creerEcouteurValidationFormulairePersonne(final FenetreForm fenetre, final PersonneForm formulaire) {
277
		SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
278
			public void componentSelected(ButtonEvent ce) {
279
				String code = ((Button) ce.getComponent()).getData("code");
280
				if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
281
					if (formulaire.soumettreFormulaire()) {
282
						fenetre.hide();
283
					}
284
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
285
					formulaire.soumettreFormulaire();
286
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
287
					fenetre.hide();
288
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
289
					fenetreFormulaire.hide();
290
					fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(formulaire.mode);
291
					fenetreFormulaire.show();
292
				}
293
			}
294
		};
295
 
296
		return ecouteur;
297
	}
298
 
299
	private Button creerBoutonSupprimer() {
300
		Button bouton = new Button(i18nC.supprimer());
301
		bouton.setIcon(Images.ICONES.vcardSupprimer());
302
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
303
			public void componentSelected(ButtonEvent ce) {
304
				Personne personneSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
305
				if (personneSaisieSelectionnee == null) {
306
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
307
				} else {
308
					supprimerDansGrille(personneSaisieSelectionnee);
309
				}
310
			}
311
		});
312
		return bouton;
313
	}
314
 
315
	private Button creerBoutonRafraichir() {
316
		Button bouton = new Button(i18nC.rafraichir());
317
		bouton.setIcon(Images.ICONES.rafraichir());
318
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
319
			public void componentSelected(ButtonEvent ce) {
320
				actualiserGrille();
321
			}
322
		});
323
		return bouton;
324
	}
325
 
326
	private void actualiserGrille() {
327
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
328
			// FIXME : c'est la merde
329
			//mediateur.selectionner(this, null, personneSelectionnee.getId(), "%");
330
		} else {
331
			grille.getStore().removeAll();
332
			layout();
333
		}
334
	}
335
 
1375 cyprien 336
	private void creerComboBoxPersonnesSaisies() {
337
		ModelType modelTypePersonnes = new ModelType();
338
		modelTypePersonnes.setRoot("personnes");
339
		modelTypePersonnes.setTotalName("nbElements");
340
		modelTypePersonnes.addField("cp_fmt_nom_complet");
341
		modelTypePersonnes.addField("cp_id_personne");
342
		modelTypePersonnes.addField("cp_code_postal");
343
		modelTypePersonnes.addField("cp_ville");
344
		modelTypePersonnes.addField("cp_truk_courriel");
1284 gduche 345
 
1375 cyprien 346
		String displayNamePersonnes = "cp_fmt_nom_complet";
347
		ProxyPersonnes<ModelData> proxyPersonnes = new ProxyPersonnes<ModelData>(sequenceur);
348
 
349
		personnesSaisiesComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyPersonnes, modelTypePersonnes, displayNamePersonnes);
350
 
351
		personnesSaisiesComboBox.getCombo().addListener(Events.Select, new Listener<BaseEvent>() {
352
			public void handleEvent(BaseEvent be) {
353
				if (personnesSaisiesComboBox.getValeur() instanceof ModelData) {
1284 gduche 354
					// N'ajouter l'auteur que s'il n'est pas déjà présent dans la grille et dans les valeurs initiales
1375 cyprien 355
					Personne personneSaisieSelectionnee = new Personne(personnesSaisiesComboBox.getValeur());
356
					if (grille.getStore().findModel(personneSaisieSelectionnee) != null)	{
1284 gduche 357
						Info.display("Information", "La personne est déjà présente dans la liste d'auteurs");
358
					} else {
1375 cyprien 359
						if (!auteursInitialListe.containsValue(personneSaisieSelectionnee))	{
360
							auteursAjoutes.put(personneSaisieSelectionnee.getId(), personneSaisieSelectionnee);
1284 gduche 361
						}
1375 cyprien 362
						ajouterDansGrille(personneSaisieSelectionnee);
363
						personnesSaisiesComboBox.getCombo().setValue(null);
1284 gduche 364
					}
365
				}
366
			}
367
		});
368
	}
369
 
370
	private void obtenirPersonnesSaisies(String nom) {
1367 cyprien 371
		mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%", null);
1284 gduche 372
	}
373
 
374
	private void ajouterDansGrille(Personne personne) {
375
		ajouterDansGrille(personne, 0);
376
	}
377
 
378
	private void ajouterDansGrille(Personne personne, int index) {
379
		if (personne != null) {
380
			if (!grille.getStore().contains(personne))	{
381
				//1) si elle ne fait pas partie des initiaux, ajouter à la liste à ajouter
382
				if (!auteursInitialListe.containsValue(personne))	{
383
					auteursAjoutes.put(personne.getId(), personne);
384
				}
385
 
386
				// L'enlever de la liste à supprimer
387
				if (auteursSupprimes.containsValue(personne))	{
388
					auteursSupprimes.remove(personne);
389
				}
390
				//2) Ajouter a la grille
391
				grille.getStore().insert(personne, index);
392
				grille.getSelectionModel().select(index, false);
393
			} else {
394
				InfoLogger.display("Information", "La personne choisie existe déjà dans la liste.");
395
			}
396
		}
397
	}
398
 
399
	/**
400
	 * Met à jour la grille avec les informations contenus dans la variable listePublicationsLiees
401
	 */
402
	private void mettreAJourGrille()	{
403
 
404
		grille.getStore().removeAll();
405
		grille.getStore().add(listePersonne.toList());
406
	}
407
 
408
	private void supprimerDansGrille(Personne personne) {
409
		if (personne != null) {
410
			//1) Ajouter a la liste des personne à supprimer uniquement si est présente dans la liste initiale
411
			if (auteursInitialListe.containsValue(personne)) {
412
				auteursSupprimes.put(personne.getId(), personne);
413
			}
414
 
415
			if (auteursAjoutes.containsValue(personne))	{
416
				auteursAjoutes.remove(personne);
417
			}
418
 
419
			//2) Supprimer la personne de la liste
420
			grille.getStore().remove(personne);
421
		} else {
422
			Info.display("Information", "Vous devez sélectionner une personne");
423
		}
424
	}
425
 
426
	private EditorGrid<Personne> creerGrille() {
427
 
428
		ListStore<Personne> storeGrille = new ListStore<Personne>();
429
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<Personne>>() {
430
			public void handleEvent(StoreEvent<Personne> ce) {
431
				actualiserEtatBoutonsBarreOutils();
432
			}
433
		});
434
 
435
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Personne>>() {
436
			public void handleEvent(StoreEvent<Personne> ce) {
437
				actualiserEtatBoutonsBarreOutils();
438
			}
439
		});
440
 
441
		storeGrille.addListener(Store.Update, new Listener<StoreEvent<Personne>>() {
442
			public void handleEvent(StoreEvent<Personne> ce) {
443
				if (ce.getRecord().isModified("_role_") && !ce.getModel().get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
444
					ce.getModel().set("_etat_", aDonnee.ETAT_MODIFIE);
445
				}
446
			}
447
		});
448
 
449
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
450
		colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150));
451
		colonnes.add(new ColumnConfig("code_postal", i18nC.personneCodePostal(), 150));
452
		colonnes.add(new ColumnConfig("ville", i18nC.personneVille(), 75));
453
		colonnes.add(new ColumnConfig("truk_courriel", i18nC.personneCourriel(), 75));
454
 
455
		GridSelectionModel<Personne> modeleDeSelection = new GridSelectionModel<Personne>();
456
 
457
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
458
 
459
		EditorGrid<Personne> grillePublications = new EditorGrid<Personne>(storeGrille, modeleDeColonnes);
460
		grillePublications.setHeight("100%");
461
		grillePublications.setBorders(true);
462
		grillePublications.setSelectionModel(modeleDeSelection);
463
		grillePublications.getView().setForceFit(true);
464
		grillePublications.setAutoExpandColumn("fmt_nom_complet");
465
		grillePublications.setStripeRows(true);
466
		grillePublications.setTrackMouseOver(true);
467
 
468
		return grillePublications;
469
	}
470
 
1095 jpm 471
	private void genererTitreFormulaire() {
989 jpm 472
		String titre = i18nC.publicationTitreFormAjout();
822 jpm 473
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1095 jpm 474
			 titre = i18nC.publicationTitreFormModif();
475
			 if (publication != null) {
1322 gduche 476
				 titre += " - "+i18nC.id()+": "+publication.getId()+" - "+publication.getTitre();
1095 jpm 477
			 }
822 jpm 478
		}
1095 jpm 479
		panneauFormulaire.setHeading(titre);
822 jpm 480
	}
1284 gduche 481
 
822 jpm 482
 
775 jpm 483
	private void creerZoneAuteurs() {
1329 cyprien 484
		auteursFieldset = new ContentPanel();
485
		auteursFieldset.setLayout(new FitLayout());
486
		auteursFieldset.setHeading("Auteurs");
487
 
775 jpm 488
		auteurComboboxListe = new ArrayList<ComboBox<Personne>>(0);
792 jpm 489
		mediateur.clicObtenirListeAuteurs(this);
775 jpm 490
 
822 jpm 491
		creerChampsAuteur();
775 jpm 492
	}
493
 
822 jpm 494
	private void creerChampsAuteur() {
775 jpm 495
		auteursFieldset.removeAll();
1284 gduche 496
		barreOutils = creerBarreOutilsGrille();
1329 cyprien 497
		auteursFieldset.setTopComponent(barreOutils);
1284 gduche 498
		grille = creerGrille();
499
		auteursFieldset.add(grille);
1131 jpm 500
		auteursFieldset.layout();
775 jpm 501
	}
502
 
503
	private ComboBox<Personne> creerComboBoxAuteursSaisis() {
1134 jpm 504
		ListStore<Personne> auteursStore = new ListStore<Personne>();
505
		auteursStore.add(auteursStorePartage.getModels());
506
 
775 jpm 507
		ComboBox<Personne> comboBox = new ComboBox<Personne>();
860 jpm 508
		comboBox.setEmptyText(i18nC.chercherPersonneSaisi());
775 jpm 509
		comboBox.setEditable(true);
1131 jpm 510
		comboBox.setAllowBlank(false);
775 jpm 511
		comboBox.setForceSelection(true);
512
		comboBox.setDisplayField("fmt_nom_complet");
513
		comboBox.setTriggerAction(TriggerAction.ALL);
1134 jpm 514
		comboBox.setStore(auteursStore);
1176 jpm 515
		comboBox.setMessageTarget("tooltip");
981 jpm 516
		comboBox.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 517
		comboBox.addListener(Events.Valid, creerEcouteurChampObligatoire());
775 jpm 518
 
519
		return comboBox;
520
	}
521
 
522
	private void creerZoneGeneralites() {
523
		FormLayout layout = new FormLayout();
524
		layout.setLabelWidth(200);
219 aurelien 525
 
526
		// Fieldset Infos Générales
775 jpm 527
		generalitesFieldset = new FieldSet();
528
		generalitesFieldset.setHeading("Informations générales");
529
		generalitesFieldset.setCollapsible(true);
530
		generalitesFieldset.setLayout(layout);
1329 cyprien 531
 
532
		ModelType modelTypeProjets = new ModelType();
533
		modelTypeProjets.setRoot("projets");
534
		modelTypeProjets.setTotalName("nbElements");
535
		modelTypeProjets.addField("cpr_nom");
536
		modelTypeProjets.addField("cpr_id_projet");
219 aurelien 537
 
1329 cyprien 538
		String displayNameProjets = "cpr_nom";
1367 cyprien 539
		ProxyProjets<ModelData> proxyProjets = new ProxyProjets<ModelData>(sequenceur);
1329 cyprien 540
 
541
		projetsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyProjets, modelTypeProjets, displayNameProjets);
542
		projetsCombo.setWidth(200, 600);
543
		projetsCombo.getCombo().setTabIndex(tabIndex++);
544
		projetsCombo.getCombo().setFieldLabel(i18nC.projetChamp());
545
		projetsCombo.getCombo().setForceSelection(true);
546
		projetsCombo.getCombo().addStyleName(ComposantClass.OBLIGATOIRE);
547
		projetsCombo.getCombo().addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
548
 
549
		projetsCombo.getCombo().setValidator(new Validator() {
1032 jpm 550
			public String validate(Field<?> field, String value) {
551
				String retour = null;
552
				if (field.getRawValue().equals("")) {
553
					field.setValue(null);
1329 cyprien 554
				} else if (projetsCombo.getStore().findModel("cpr_nom", field.getRawValue()) == null) {
1032 jpm 555
					String contenuBrut = field.getRawValue();
556
					field.setValue(null);
557
					field.setRawValue(contenuBrut);
558
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
559
				}
560
				return retour;
561
			}
1329 cyprien 562
		});
563
		generalitesFieldset.add(projetsCombo, new FormData(600, 0));
1032 jpm 564
 
786 jpm 565
		titreChp = new TextField<String>();
566
		titreChp.setName("cpu");
567
		titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
981 jpm 568
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 569
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
792 jpm 570
		generalitesFieldset.add(titreChp, new FormData(450, 0));
219 aurelien 571
 
786 jpm 572
		collectionChp = new TextField<String>();
792 jpm 573
		collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
574
		generalitesFieldset.add(collectionChp, new FormData(450, 0));
219 aurelien 575
 
786 jpm 576
		uriChp = new TextField<String>();
792 jpm 577
		uriChp.setFieldLabel("URL de la publication");
578
		generalitesFieldset.add(uriChp, new FormData(450, 0));
775 jpm 579
	}
580
 
581
	private void creerZoneEdition() {
582
		FormLayout layout = new FormLayout();
583
		layout.setLabelWidth(200);
584
 
219 aurelien 585
		// Fieldset Edition
775 jpm 586
		editionFieldset = new FieldSet();
792 jpm 587
		editionFieldset.setHeading("Édition");
775 jpm 588
		editionFieldset.setCollapsible(true);
589
		editionFieldset.setLayout(layout);
219 aurelien 590
 
1329 cyprien 591
 
592
		/*****************************************************/
593
		/**			Champ 'Editeur de la publication'		**/
594
		/*****************************************************/
595
		ModelType modelTypeStructures = new ModelType();
596
		modelTypeStructures.setRoot("structures");
597
		modelTypeStructures.setTotalName("nbElements");
598
		modelTypeStructures.addField("cs_nom");
599
		modelTypeStructures.addField("cs_id_structure");
219 aurelien 600
 
1329 cyprien 601
		String displayNameStructures = "cs_nom";
1367 cyprien 602
		ProxyStructures<ModelData> proxyStructures = new ProxyStructures<ModelData>(sequenceur);
1329 cyprien 603
 
604
		editeurCombobox = new ChampComboBoxRechercheTempsReelPaginable(proxyStructures, modelTypeStructures, displayNameStructures);
605
		editeurCombobox.setWidth(200, 600);
606
		editeurCombobox.getCombo().setTabIndex(tabIndex++);
607
		editeurCombobox.getCombo().setEmptyText("Sélectionner un éditeur...");
608
		editeurCombobox.getCombo().setFieldLabel("Éditeur de la publication");
609
		editeurCombobox.getCombo().setEditable(true);
610
		editionFieldset.add(editeurCombobox, new FormData(600, 0));
611
 
612
		/*********************************************/
613
		/**			Champ 'Date de publication'		**/
614
		/*********************************************/
786 jpm 615
		datePublicationChp = new TextField<String>();
616
		datePublicationChp.setMaxLength(4);
617
		datePublicationChp.setMinLength(4);
618
		datePublicationChp.setFieldLabel("Année de publication");
981 jpm 619
		datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
980 jpm 620
		datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
792 jpm 621
		editionFieldset.add(datePublicationChp, new FormData(40, 0));
219 aurelien 622
 
1329 cyprien 623
		/*****************************/
624
		/**			Champ ''		**/
625
		/*****************************/
786 jpm 626
		tomeChp = new TextField<String>();
792 jpm 627
		tomeChp.setFieldLabel("Série de la revue ou tome");
628
		editionFieldset.add(tomeChp, new FormData(75, 0));
1329 cyprien 629
 
630
		/*****************************/
631
		/**			Champ ''		**/
632
		/*****************************/
786 jpm 633
		fasciculeChp = new TextField<String>();
792 jpm 634
		fasciculeChp.setFieldLabel("Fascicule de la revue");
635
		editionFieldset.add(fasciculeChp, new FormData(75, 0));
1329 cyprien 636
 
637
		/*****************************/
638
		/**			Champ ''		**/
639
		/*****************************/
786 jpm 640
		pagesChp = new TextField<String>();
641
		pagesChp.setFieldLabel("Pages");
887 aurelien 642
		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 643
		editionFieldset.add(pagesChp, new FormData(100, 0));
219 aurelien 644
	}
775 jpm 645
 
705 aurelien 646
	public void rafraichir(Object nouvellesDonnees) {
647
		if (nouvellesDonnees instanceof Publication) {
782 jpm 648
			// Si on a reçu les details d'une publication
1322 gduche 649
			publication = (Publication) nouvellesDonnees;
782 jpm 650
		} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {
651
			rafraichirListeAuteurs((PublicationAPersonneListe) nouvellesDonnees);
652
		} else if (nouvellesDonnees instanceof Information) {
1375 cyprien 653
			rafraichirInformation((Information) nouvellesDonnees);
782 jpm 654
		} else {
655
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
227 aurelien 656
		}
1180 jpm 657
	}
658
 
659
	private void synchronisation() {
660
 
782 jpm 661
	}
901 jpm 662
 
1133 jpm 663
	private void miseAJourAuteursInitialListe() {
901 jpm 664
		Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
665
		while (clesAjoutees.hasNext()) {
1284 gduche 666
			Personne auteurAjoute = auteursAjoutes.get(clesAjoutees.next());
1133 jpm 667
			auteursInitialListe.put(auteurAjoute.getId(), auteurAjoute);
901 jpm 668
		}
669
 
670
		Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
671
		while (clesSupprimees.hasNext()) {
1284 gduche 672
			Personne auteurSupprime = auteursSupprimes.get(clesSupprimees.next());
1133 jpm 673
			auteursInitialListe.remove(auteurSupprime.getId());
901 jpm 674
		}
675
	}
676
 
782 jpm 677
	private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) {
1133 jpm 678
		Iterator<String> it = auteurs.keySet().iterator();
679
		while (it.hasNext()) {
680
			Personne auteur = auteurs.get(it.next()).getPersonne();
681
			auteursInitialListe.put(auteur.getId(), auteur);
682
		}
1284 gduche 683
 
684
		grille.getStore().removeAll();
685
		grille.getStore().add(auteursInitialListe.toList());
1322 gduche 686
		layout();
782 jpm 687
	}
688
 
1322 gduche 689
	private void rafraichirInformation(Information info) {
1095 jpm 690
		String type = info.getType();
1322 gduche 691
		if (type.equals("publication_enregistree"))	{
692
			// la publication vien d'etre enregistrée, on soumet les auteurs
1284 gduche 693
			soumettreAuteurs();
1322 gduche 694
		} else if (type.equals("auteurs_enregistres")) {
695
			miseAJourAuteursInitialListe();
696
			initialiserAuteurs();
697
			repandreRafraichissement();
698
			controlerFermeture();
699
		} else if (type.equals("chargement_modifier_ok"))	{
700
			peuplerFormulaire();
701
			genererTitreFormulaire();
1095 jpm 702
		}
703
 
1375 cyprien 704
		/*if (info.getType().equals("liste_personne")) {
822 jpm 705
			PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0);
1284 gduche 706
			ListStore store = personnesSaisiesComboBox.getStore();
707
			store.removeAll();
708
			store.add(listePersonneAuteur.toList());
709
 
1375 cyprien 710
		} else */
711
		if (type.equals("personne_ajoutee")) {
712
			if (info.getDonnee(0) != null) {
713
				Personne personne = (Personne) info.getDonnee(0);
714
				ajouterDansGrille(personne);
715
			}
716
		} else if (type.equals("personne_modifiee")) {
717
			if (info.getDonnee(0) != null) {
718
				Personne personne = (Personne) info.getDonnee(0);
719
				Personne personneDansGrille = grille.getStore().findModel("id_personne", personne.getId());
720
				int index = grille.getStore().indexOf(personneDansGrille);
721
				grille.getStore().remove(personneDansGrille);
722
				ajouterDansGrille(personne, index);
723
			}
1095 jpm 724
		} else if (info.getType().equals("modif_publication")) {
1284 gduche 725
			InfoLogger.display("Modification d'une publication", info.toString());
1095 jpm 726
		} else if (info.getType().equals("ajout_publication")) {
1197 jpm 727
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String && ((String) info.getDonnee(0)).matches("[0-9]+")) {
1095 jpm 728
				String publicationId = (String) info.getDonnee(0);
1284 gduche 729
				InfoLogger.display("Ajout d'une publication", "La publication '"+publicationId+"' a bien été ajoutée");
1095 jpm 730
			} else {
1284 gduche 731
				InfoLogger.display("Ajout d'une publication", info.toString());
1095 jpm 732
			}
1284 gduche 733
		}
782 jpm 734
	}
735
 
901 jpm 736
	private void initialiserAuteurs() {
1284 gduche 737
		auteursAjoutes = new PersonneListe();
738
		auteursSupprimes = new PersonneListe();
901 jpm 739
	}
740
 
782 jpm 741
	private void repandreRafraichissement() {
742
		if (vueExterneARafraichirApresValidation != null) {
786 jpm 743
			String type = "publication_modifiee";
744
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
745
				type = "publication_ajoutee";
746
			}
747
			Information info = new Information(type);
748
			info.setDonnee(0, publication);
782 jpm 749
			vueExterneARafraichirApresValidation.rafraichir(info);
750
		}
751
	}
752
 
786 jpm 753
	public boolean soumettreFormulaire() {
1322 gduche 754
		boolean formulaireValideOk = verifierFormulaire();
822 jpm 755
		if (formulaireValideOk) {
901 jpm 756
			soumettrePublication();
757
		}
1322 gduche 758
 
759
 
901 jpm 760
		return formulaireValideOk;
761
	}
1322 gduche 762
 
901 jpm 763
	private void soumettrePublication() {
764
		Publication publicationCollectee = collecterPublication();
765
		if (publicationCollectee != null) {
1322 gduche 766
 
767
			// Pour l'enregistrement des collections, on utilise le séquenceur
768
			// Il doit attendre le retour de l'enregistrement pour poursuivre
769
			sequenceur = new Sequenceur();
770
			int seqId = sequenceur.lancerRequeteSynchrone(this);
901 jpm 771
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
1322 gduche 772
				mediateur.ajouterPublication(sequenceur, publicationCollectee, seqId);
901 jpm 773
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
1322 gduche 774
				mediateur.modifierPublication(sequenceur, publicationCollectee, seqId);
901 jpm 775
			}
1373 cyprien 776
			sequenceur.enfilerRafraichissement(this, new Information("publication_enregistree"));
901 jpm 777
		}
778
	}
779
 
780
	private void soumettreAuteurs() {
781
 
1284 gduche 782
		//1) Auteurs ajoutés :
783
		// - Créer une PublicationAAuteurListe
784
		PublicationAPersonneListe listeDesAuteurs = new PublicationAPersonneListe();
785
		Iterator<String> itAuteur = auteursAjoutes.keySet().iterator();
786
		while (itAuteur.hasNext())	{
787
			PublicationAPersonne publiAPersonne = new PublicationAPersonne();
788
			String cle = itAuteur.next();
789
			publiAPersonne.setIdPersonne(cle);
790
			publiAPersonne.setIdPublication(publication.getId());
791
			listeDesAuteurs.put(cle, publiAPersonne);
792
		}
793
 
794
		// - envoyer au mediateur SSI personnes à ajouter
795
		if (listeDesAuteurs.size() > 0)	{
1322 gduche 796
			int seqId = sequenceur.lancerRequeteSynchrone(this);
797
			mediateur.ajouterPublicationAPersonne(sequenceur, publication.getId(), listeDesAuteurs, PublicationAPersonne.ROLE_AUTEUR, seqId);
798
			//attenteAjoutAuteursOk = true;
1284 gduche 799
		}
800
 
801
		//2) Auteurs supprimés :
802
		// - Créer une PublicationAPersonneListe
803
		listeDesAuteurs = new PublicationAPersonneListe();
804
		itAuteur = auteursSupprimes.keySet().iterator();
805
		while (itAuteur.hasNext())	{
806
			PublicationAPersonne publiAPersonne = new PublicationAPersonne();
807
			String cle = itAuteur.next();
808
			publiAPersonne.setIdPersonne(cle);
809
			publiAPersonne.setIdPublication(publication.getId());
810
			listeDesAuteurs.put(cle, publiAPersonne);
811
		}
812
 
813
		// - Envoyer au médiateur SSI personnes à supprimer
814
		if (listeDesAuteurs.size() > 0) {
1322 gduche 815
			// Pour une suppression des auteurs, on a pas besoin d'attendre le retour
1284 gduche 816
			mediateur.supprimerPublicationAPersonne(this, listeDesAuteurs);
1322 gduche 817
			//attenteSuppressionAuteursOk = true;
1284 gduche 818
		}
819
 
1373 cyprien 820
		sequenceur.enfilerRafraichissement(this, new Information("auteurs_enregistres"));
219 aurelien 821
	}
822
 
934 jpm 823
	public boolean verifierFormulaire() {
782 jpm 824
		boolean valide = true;
825
		ArrayList<String> messages = new ArrayList<String>();
826
 
1284 gduche 827
		// Tester si au moins un auteur est présent
828
		if (grille.getStore().getModels().size() == 0) {
829
			messages.add("Veuillez saisir au moins un auteur.");
227 aurelien 830
		}
705 aurelien 831
 
786 jpm 832
		String titre = titreChp.getValue();
782 jpm 833
		if (titre == null || titre.equals("")) {
834
			messages.add("Veuillez saisir le titre de la publication !");
705 aurelien 835
		}
836
 
792 jpm 837
		String uri = uriChp.getValue();
838
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
839
			messages.add("L'URL saisie n'est pas valide !");
840
		}
841
 
799 jpm 842
		String datePublication = datePublicationChp.getRawValue();
843
		if (datePublication == null || datePublication.equals("")) {
844
			messages.add("Veuillez saisir une année de parution !");
725 aurelien 845
		} else {
799 jpm 846
			if (!etreDateValide(datePublication)) {
792 jpm 847
				messages.add("Le format de l'année saisie est incorrect !");
725 aurelien 848
			}
705 aurelien 849
		}
717 aurelien 850
 
792 jpm 851
		String pages = pagesChp.getValue();
852
		String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
799 jpm 853
		if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
792 jpm 854
			messages.add("Le format des pages est incorrect !");
855
		}
856
 
782 jpm 857
		if (messages.size() != 0) {
858
			String[] tableauDeMessages = {};
859
			tableauDeMessages = messages.toArray(tableauDeMessages);
799 jpm 860
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
782 jpm 861
			valide = false;
705 aurelien 862
		}
782 jpm 863
		return valide;
775 jpm 864
	}
865
 
822 jpm 866
	private void peuplerFormulaire() {
1032 jpm 867
		setValeurComboProjets();
822 jpm 868
		titreChp.setValue(publication.getTitre());
869
		collectionChp.setValue(publication.getCollection());
870
		uriChp.setValue(publication.getURI());
1032 jpm 871
		datePublicationChp.setValue(reduireDateParAnnee(publication.getDateParution()));
822 jpm 872
		tomeChp.setValue(publication.getIndicationNvt());
873
		fasciculeChp.setValue(publication.getFascicule());
874
		pagesChp.setValue(publication.getPages());
875
 
876
		if (publication.getEditeur().matches("^[0-9]+$")) {
1329 cyprien 877
			editeurCombobox.getCombo().setValue(editeurCombobox.getStore().findModel("cs_id_structure", publication.getEditeur()));
822 jpm 878
		} else {
1329 cyprien 879
			editeurCombobox.getCombo().setRawValue(publication.getEditeur());
822 jpm 880
		}
881
	}
882
 
786 jpm 883
	private Publication collecterPublication() {
1284 gduche 884
 
786 jpm 885
		Publication publicationCollectee = (Publication) publication.cloner(new Publication());
1032 jpm 886
		publicationCollectee.setIdProjet(getValeurComboProjets());
1124 jpm 887
		publicationCollectee.setAuteur(construireIntituleAuteur());
786 jpm 888
 
889
		String titre = titreChp.getValue();
890
		publicationCollectee.setTitre(titre);
891
 
892
		String collection = collectionChp.getValue();
893
		publicationCollectee.setCollection(collection);
894
 
1124 jpm 895
		publicationCollectee.setNomComplet(construireNomComplet());
786 jpm 896
 
897
		String uri = uriChp.getValue();
898
		publicationCollectee.setUri(uri);
899
 
900
		String editeur = "";
1329 cyprien 901
		if (editeurCombobox.getValeur() != null) {
902
			Structure structure = new Structure(editeurCombobox.getValeur());
903
			editeur = structure.getId();
904
			publicationCollectee.setStructureEditeur(structure);
905
		} else if (!UtilString.isEmpty(editeurCombobox.getCombo().getRawValue())) {
906
			editeur = editeurCombobox.getCombo().getRawValue();
786 jpm 907
		}
908
		publicationCollectee.setEditeur(editeur);
909
 
792 jpm 910
		String anneePublication = datePublicationChp.getRawValue();
911
		String datePublication = anneePublication+"-00-00";
912
		publicationCollectee.setDateParution(datePublication);
786 jpm 913
 
914
		String tome = tomeChp.getValue();
915
		publicationCollectee.setIndicationNvt(tome);
916
 
917
		String fascicule = fasciculeChp.getValue();
918
		publicationCollectee.setFascicule(fascicule);
919
 
920
		String pages = pagesChp.getValue();
921
		publicationCollectee.setPages(pages);
922
 
927 jpm 923
		Publication publicationARetourner = null;
786 jpm 924
		if (!publicationCollectee.comparer(publication)) {
925
			publicationARetourner = publication = publicationCollectee;
926
		}
927
		return publicationARetourner;
928
	}
929
 
1124 jpm 930
	private String construireIntituleEditeur() {
931
		String editeur = "";
1329 cyprien 932
		if (editeurCombobox.getValeur() != null) {
933
			Structure structure = new Structure(editeurCombobox.getValeur());
934
			editeur = structure.getNom();
935
		} else if (!UtilString.isEmpty(editeurCombobox.getCombo().getRawValue())) {
936
			editeur = editeurCombobox.getCombo().getRawValue();
1124 jpm 937
		}
938
		return editeur;
939
	}
940
 
941
	private String construireIntituleAuteur() {
1284 gduche 942
		String intituleAuteur = "";
943
 
944
		// TODO : ranger par ordre non-alphabétique
945
		grille.getStore().sort("nom", SortDir.ASC);
946
		List<Personne> auteurs = grille.getStore().getModels();
947
 
948
		Iterator<Personne> itAuteurs = auteurs.iterator();
949
		while (itAuteurs.hasNext())	{
950
			Personne personneCourante = itAuteurs.next();
951
			intituleAuteur += personneCourante.getNom().toUpperCase() + " " + personneCourante.getPrenom();
952
			if (itAuteurs.hasNext())	{
953
				intituleAuteur+=", ";
954
			}
955
		}
956
		return intituleAuteur;
1124 jpm 957
	}
958
 
959
	private String construireNomComplet() {
960
		// Intitulé de la publication complet : fmt_auteur, date_parution(année). titre. Editeur (nom), collection, fascicule, indication_nvt. pages.
961
		String nomComplet = "";
962
		String auteurs = construireIntituleAuteur();
963
		String annee = datePublicationChp.getRawValue();
964
		String titre = titreChp.getValue();
965
		String editeur = construireIntituleEditeur();
966
 
967
		nomComplet += auteurs+", "+annee+". "+titre+".";
968
 
969
		if (!UtilString.isEmpty(editeur)) {
970
			nomComplet += " Éditeur "+editeur+".";
971
		}
972
 
973
		if (collectionChp.getValue() != null) {
974
			String revue = collectionChp.getValue();
975
			nomComplet += ", "+revue;
976
		}
977
 
978
		if (fasciculeChp.getValue() != null) {
979
			String fascicule = fasciculeChp.getValue();
980
			nomComplet += ", "+fascicule;
981
		}
982
 
983
		if (tomeChp.getValue() != null) {
984
			String tomaison = tomeChp.getValue();
985
			nomComplet += ", "+tomaison;
986
		}
987
 
988
		if (collectionChp.getValue() != null || fasciculeChp.getValue() != null || tomeChp.getValue() != null) {
989
			nomComplet += ".";
990
		}
991
 
992
		if (pagesChp.getValue() != null) {
993
			String pages = pagesChp.getValue();
994
			nomComplet += pages+".";
995
		}
996
 
997
		return nomComplet;
998
	}
999
 
934 jpm 1000
	public void reinitialiserFormulaire() {
781 jpm 1001
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
786 jpm 1002
			mediateur.afficherFormPublication(publication.getId());
775 jpm 1003
		} else {
1004
			mediateur.afficherFormPublication(null);
219 aurelien 1005
		}
1006
	}
227 aurelien 1007
 
792 jpm 1008
	private boolean etreDateValide(String anneePublication) {
782 jpm 1009
		boolean valide = true;
792 jpm 1010
		if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
782 jpm 1011
			valide = false;
725 aurelien 1012
		}
782 jpm 1013
		return valide;
725 aurelien 1014
	}
758 aurelien 1015
 
1016
	private String reduireDateParAnnee(String datePar) {
775 jpm 1017
		if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
758 aurelien 1018
			return datePar.split("-")[0];
505 jp_milcent 1019
		} else {
758 aurelien 1020
			return "";
227 aurelien 1021
		}
758 aurelien 1022
	}
1032 jpm 1023
 
1024
	private String getValeurComboProjets() {
1025
		String valeur = "";
1329 cyprien 1026
		if (projetsCombo.getValeur() != null) {
1027
			Projet projet = new Projet(projetsCombo.getValeur());
1028
			valeur = projet.getId();
1032 jpm 1029
		}
1030
		return valeur;
1031
	}
1032
	private void setValeurComboProjets() {
1033
		if (projetsCombo.getStore() != null ) {
1034
			if (mode.equals(Formulaire.MODE_MODIFIER) && publication != null) {
1329 cyprien 1035
				projetsCombo.getCombo().setValue(projetsCombo.getStore().findModel("cpr_id_projet", publication.getIdProjet()));
1032 jpm 1036
			} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
1329 cyprien 1037
				projetsCombo.getCombo().setValue(projetsCombo.getStore().findModel("cpr_id_projet", mediateur.getProjetId()));
1032 jpm 1038
			}
1039
		}
1040
	}
505 jp_milcent 1041
}