Subversion Repositories eFlore/Applications.coel

Rev

Rev 1383 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
997 jpm 1
package org.tela_botanica.client.vues.collection;
2
 
3
import java.util.ArrayList;
4
import java.util.List;
5
 
6
import org.tela_botanica.client.Mediateur;
1031 jpm 7
import org.tela_botanica.client.composants.ChampComboBoxMultiSelect;
1470 cyprien 8
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
1239 cyprien 9
import org.tela_botanica.client.composants.InfoLogger;
1470 cyprien 10
import org.tela_botanica.client.composants.pagination.ProxyCommentaires;
11
import org.tela_botanica.client.composants.pagination.ProxyPublications;
997 jpm 12
import org.tela_botanica.client.images.Images;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
14
import org.tela_botanica.client.modeles.Information;
15
import org.tela_botanica.client.modeles.Valeur;
16
import org.tela_botanica.client.modeles.ValeurListe;
17
import org.tela_botanica.client.modeles.aDonnee;
18
import org.tela_botanica.client.modeles.collection.Collection;
19
import org.tela_botanica.client.modeles.collection.CollectionACommentaire;
20
import org.tela_botanica.client.modeles.collection.CollectionACommentaireListe;
21
import org.tela_botanica.client.modeles.commentaire.Commentaire;
22
import org.tela_botanica.client.modeles.commentaire.CommentaireListe;
1470 cyprien 23
import org.tela_botanica.client.modeles.publication.Publication;
1322 gduche 24
import org.tela_botanica.client.synchronisation.Sequenceur;
997 jpm 25
import org.tela_botanica.client.util.Debug;
26
import org.tela_botanica.client.vues.FenetreForm;
27
import org.tela_botanica.client.vues.Formulaire;
28
import org.tela_botanica.client.vues.FormulaireBarreValidation;
29
import org.tela_botanica.client.vues.FormulaireOnglet;
30
import org.tela_botanica.client.vues.commentaire.CommentaireForm;
31
 
1031 jpm 32
import com.extjs.gxt.ui.client.Style.SortDir;
1470 cyprien 33
import com.extjs.gxt.ui.client.data.ModelData;
34
import com.extjs.gxt.ui.client.data.ModelType;
997 jpm 35
import com.extjs.gxt.ui.client.event.BaseEvent;
36
import com.extjs.gxt.ui.client.event.ButtonEvent;
37
import com.extjs.gxt.ui.client.event.ComponentEvent;
38
import com.extjs.gxt.ui.client.event.Events;
39
import com.extjs.gxt.ui.client.event.KeyListener;
40
import com.extjs.gxt.ui.client.event.Listener;
41
import com.extjs.gxt.ui.client.event.SelectionListener;
42
import com.extjs.gxt.ui.client.store.ListStore;
43
import com.extjs.gxt.ui.client.store.Store;
44
import com.extjs.gxt.ui.client.store.StoreEvent;
45
import com.extjs.gxt.ui.client.widget.ContentPanel;
46
import com.extjs.gxt.ui.client.widget.Info;
47
import com.extjs.gxt.ui.client.widget.Text;
48
import com.extjs.gxt.ui.client.widget.button.Button;
49
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
50
import com.extjs.gxt.ui.client.widget.form.ComboBox;
1470 cyprien 51
import com.extjs.gxt.ui.client.widget.form.Field;
997 jpm 52
import com.extjs.gxt.ui.client.widget.form.FormPanel;
1470 cyprien 53
import com.extjs.gxt.ui.client.widget.form.Validator;
997 jpm 54
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
55
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
56
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
57
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
58
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
59
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
60
import com.extjs.gxt.ui.client.widget.grid.Grid;
61
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
62
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
63
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
64
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
65
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
66
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
67
import com.google.gwt.core.client.GWT;
68
 
69
public class CollectionFormCommentaire extends FormulaireOnglet implements Rafraichissable {
70
 
1083 jpm 71
	public static final String ID = "commentaire";
997 jpm 72
	private Collection collection = null;
73
	private static int idGenere = 1;
74
 
75
	private ContentPanel panneauPrincipal = null;
76
	private ToolBar barreOutils = null;
77
	private EditorGrid<CollectionACommentaire> grille;
1031 jpm 78
	private ChampComboBoxMultiSelect<Valeur> typeCombo = null;
997 jpm 79
 
1081 jpm 80
	private CollectionACommentaireListe commentairesAjoutes = null;
81
	private CollectionACommentaireListe commentairesModifies = null;
82
	private CollectionACommentaireListe commentairesSupprimes = null;
1470 cyprien 83
	private ChampComboBoxRechercheTempsReelPaginable commentairesSaisisComboBox = null;
997 jpm 84
	private Button commentairesBoutonSupprimer = null;
85
	private Button commentairesBoutonModifier = null;
86
 
87
	private static boolean chargementTypesOk = false;
88
	private static boolean chargementCommentairesOk = false;
89
 
90
	private FenetreForm fenetreFormulaire = null;
1322 gduche 91
	private Sequenceur sequenceur;
997 jpm 92
 
93
	public CollectionFormCommentaire(Formulaire formulaireCourrant) {
94
		initialiserOnglet(formulaireCourrant);
1083 jpm 95
		setId(ID);
997 jpm 96
		setText(Mediateur.i18nC.collectionCommentaire());
97
		setStyleAttribute("padding", "0");
98
 
99
		panneauPrincipal = creerPanneauContenantGrille();
100
		barreOutils = creerBarreOutilsGrille();
101
		panneauPrincipal.setTopComponent(barreOutils);
102
		grille = creerGrille();
103
  		panneauPrincipal.add(grille);
104
 
1322 gduche 105
		mediateur.obtenirListeValeurEtRafraichir(this, "typeCommentaireCollection", null);
997 jpm 106
		add(panneauPrincipal);
107
 
108
		initialiser();
109
	}
110
 
111
	private void initialiser() {
1081 jpm 112
		// Remise à zéro des modification dans la liste des commentaires
113
		initialiserGestionCommentaires();
997 jpm 114
 
115
		// Actualisation de l'état des boutons de la barre d'outils
116
		actualiserEtatBoutonsBarreOutils();
117
 
118
		collection = ((CollectionForm) formulaire).collection;
119
	}
120
 
1081 jpm 121
	private void initialiserGestionCommentaires() {
122
		idGenere = 1;
123
		commentairesAjoutes = new CollectionACommentaireListe();
124
		commentairesModifies = new CollectionACommentaireListe();
125
		commentairesSupprimes = new CollectionACommentaireListe();
126
	}
127
 
997 jpm 128
	private void initialiserChargement() {
129
		chargementCommentairesOk = false;
130
	}
131
 
132
	private ContentPanel creerPanneauContenantGrille() {
133
		ContentPanel panneau = new ContentPanel();
134
 
135
		panneau.setHeading(i18nC.collectionCommentaireTitre());
136
		panneau.setIcon(Images.ICONES.table());
137
		panneau.setLayout(new FitLayout());
138
		panneau.setFrame(true);
139
 
140
		return panneau;
141
	}
142
 
143
	private ToolBar creerBarreOutilsGrille() {
144
		ToolBar barreOutils = new ToolBar();
145
 
146
		Button ajouterPersonneBouton = creerBoutonAjouter();
147
		barreOutils.add(ajouterPersonneBouton);
148
 
149
		barreOutils.add(new Text(" ou "));
150
 
151
		commentairesSaisisComboBox = creerComboBoxCommentairesSaisies();
152
		barreOutils.add(commentairesSaisisComboBox);
153
 
154
		barreOutils.add(new SeparatorToolItem());
155
 
156
		commentairesBoutonModifier = creerBoutonModifier();
157
		barreOutils.add(commentairesBoutonModifier);
158
 
159
		barreOutils.add(new SeparatorToolItem());
160
 
161
		commentairesBoutonSupprimer = creerBoutonSupprimer();
162
		barreOutils.add(commentairesBoutonSupprimer);
163
 
164
		barreOutils.add(new SeparatorToolItem());
165
 
166
		Button rafraichirPersonneBouton = creerBoutonRafraichir();
167
		barreOutils.add(rafraichirPersonneBouton);
168
 
169
		return barreOutils;
170
	}
171
 
172
	private Button creerBoutonAjouter() {
173
		Button bouton = new Button(i18nC.ajouter());
174
		bouton.setIcon(Images.ICONES.vcardAjouter());
175
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
176
 
177
			@Override
178
			public void componentSelected(ButtonEvent ce) {
179
				fenetreFormulaire = creerFenetreModaleAvecFormulaireCommentaire(Formulaire.MODE_AJOUTER);
180
				fenetreFormulaire.show();
181
			}
182
		});
183
		return bouton;
184
	}
185
 
186
	private Button creerBoutonModifier() {
187
		Button bouton = new Button(i18nC.modifier());
188
		bouton.setIcon(Images.ICONES.vcardModifier());
189
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
190
			@Override
191
			public void componentSelected(ButtonEvent ce) {
192
				CollectionACommentaire commentaireSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
193
				if (commentaireSaisiSelectionne == null) {
1239 cyprien 194
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerCommentaire());
997 jpm 195
				} else {
196
					fenetreFormulaire = creerFenetreModaleAvecFormulaireCommentaire(Formulaire.MODE_MODIFIER);
197
					fenetreFormulaire.show();
198
				}
199
			}
200
		});
201
		return bouton;
202
	}
203
 
204
	private FenetreForm creerFenetreModaleAvecFormulaireCommentaire(String mode) {
205
		String commentaireId = null;
206
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
207
			CollectionACommentaire commentaierSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();
208
			commentaireId = commentaierSaisieSelectionnee.getIdCommentaire();
209
		}
210
 
211
		final FenetreForm fenetre = new FenetreForm("");
212
		final CommentaireForm formulaire = creerFormulaireCommentaire(fenetre, commentaireId);
213
		fenetre.add(formulaire);
214
		return fenetre;
215
	}
216
 
217
	private CommentaireForm creerFormulaireCommentaire(final FenetreForm fenetre, String commentaireId) {
218
		CommentaireForm formulaire = new CommentaireForm(mediateur, commentaireId, this);
219
		FormPanel panneauFormulaire = formulaire.getFormulaire();
220
		fenetre.setHeading(panneauFormulaire.getHeading());
221
		panneauFormulaire.setHeaderVisible(false);
222
		panneauFormulaire.setTopComponent(null);
223
 
224
		// 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.
225
		panneauFormulaire.getBottomComponent().hide();
226
		SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulaireCommentaire(fenetre, formulaire);
227
		final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
228
		fenetre.setBottomComponent(barreValidation);
229
 
230
		return formulaire;
231
	}
232
 
233
	private SelectionListener<ButtonEvent> creerEcouteurValidationFormulaireCommentaire(final FenetreForm fenetre, final CommentaireForm formulaire) {
234
		SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
235
			@Override
236
			public void componentSelected(ButtonEvent ce) {
237
				String code = ((Button) ce.getComponent()).getData("code");
238
				if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
239
					if (formulaire.soumettreFormulaire()) {
240
						fenetre.hide();
241
					}
242
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
243
					formulaire.soumettreFormulaire();
244
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
245
					fenetre.hide();
246
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
247
					fenetreFormulaire.hide();
248
					fenetreFormulaire = creerFenetreModaleAvecFormulaireCommentaire(formulaire.mode);
249
					fenetreFormulaire.show();
250
				}
251
			}
252
		};
253
 
254
		return ecouteur;
255
	}
256
 
257
	private Button creerBoutonSupprimer() {
258
		Button bouton = new Button(i18nC.supprimer());
259
		bouton.setIcon(Images.ICONES.vcardSupprimer());
260
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
261
			public void componentSelected(ButtonEvent ce) {
262
				CollectionACommentaire commentaireSaisiSelectionnee = grille.getSelectionModel().getSelectedItem();
263
				if (commentaireSaisiSelectionnee == null) {
1239 cyprien 264
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerCommentaire());
997 jpm 265
				} else {
266
					supprimerDansGrille(commentaireSaisiSelectionnee);
267
				}
268
			}
269
		});
270
		return bouton;
271
	}
272
 
273
	private Button creerBoutonRafraichir() {
274
		Button bouton = new Button(i18nC.rafraichir());
275
		bouton.setIcon(Images.ICONES.rafraichir());
276
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
277
			public void componentSelected(ButtonEvent ce) {
278
				actualiserGrille();
279
			}
280
		});
281
		return bouton;
282
	}
283
 
1470 cyprien 284
	private ChampComboBoxRechercheTempsReelPaginable creerComboBoxCommentairesSaisies() {
997 jpm 285
 
1470 cyprien 286
		ModelType modelTypeCommentaires = new ModelType();
287
		modelTypeCommentaires.setRoot("commentaires");
288
		modelTypeCommentaires.setTotalName("nbElements");
289
		modelTypeCommentaires.addField("ccm_id_commentaire");
290
		modelTypeCommentaires.addField("ccm_ce_pere");
291
		modelTypeCommentaires.addField("ccm_ce_projet");
292
		modelTypeCommentaires.addField("ccm_titre");
293
		modelTypeCommentaires.addField("ccm_texte");
294
		modelTypeCommentaires.addField("ccm_ponderation");
295
		modelTypeCommentaires.addField("ccm_mark_public");
296
 
297
		String displayNameCommentaires = "ccm_titre";
298
		ProxyCommentaires<ModelData> proxyCommentaires = new ProxyCommentaires<ModelData>(null);
299
 
300
		final ChampComboBoxRechercheTempsReelPaginable commentairesCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyCommentaires, modelTypeCommentaires, displayNameCommentaires);
301
		commentairesCombo.getCombo().setTabIndex(tabIndex++);
302
		commentairesCombo.getCombo().setForceSelection(true);
303
 
304
		commentairesCombo.getCombo().setValidator(new Validator() {
305
			public String validate(Field<?> field, String value) {
306
				String retour = null;
307
				if (field.getRawValue().equals("")) {
308
					field.setValue(null);
309
				} else if (commentairesCombo.getStore().findModel("ccm_titre", field.getRawValue()) == null) {
310
					String contenuBrut = field.getRawValue();
311
					field.setValue(null);
312
					field.setRawValue(contenuBrut);
313
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
997 jpm 314
				}
1470 cyprien 315
				return retour;
997 jpm 316
			}
317
		});
1470 cyprien 318
 
319
		commentairesCombo.getCombo().addListener(Events.Select, new Listener<BaseEvent>() {
997 jpm 320
			public void handleEvent(BaseEvent be) {
1470 cyprien 321
				if (commentairesSaisisComboBox.getValeur() instanceof ModelData) {
322
					Commentaire commentaireSaisiSelectionnee = new Commentaire(commentairesSaisisComboBox.getValeur());
997 jpm 323
					ajouterDansGrille(commentaireSaisiSelectionnee);
1470 cyprien 324
					commentairesSaisisComboBox.getCombo().setValue(null);
997 jpm 325
				}
326
			}
327
		});
1470 cyprien 328
 
329
		return commentairesCombo;
997 jpm 330
	}
331
 
332
	private void ajouterDansGrille(Commentaire commentaire) {
333
		ajouterDansGrille(commentaire, null, 0);
334
	}
335
 
336
	private void ajouterDansGrille(Commentaire commentaire, String type, int index) {
337
		if (commentaire != null) {
338
			CollectionACommentaire relationCollectionACommentaire = new CollectionACommentaire();
339
			relationCollectionACommentaire.setCommentaire(commentaire);
340
			relationCollectionACommentaire.setIdCommentaire(commentaire.getId());
341
			if (type != null) {
342
				relationCollectionACommentaire.set("_type_", type);
343
			}
344
			// Gestion de l'id de la collection
345
			if (mode.equals(Formulaire.MODE_MODIFIER)) {
346
				relationCollectionACommentaire.setIdCollection(collection.getId());
347
			}
348
			relationCollectionACommentaire.set("_etat_", aDonnee.ETAT_AJOUTE);
349
			corrigerChampsGrille(relationCollectionACommentaire);
350
 
351
			// Ajout à la grille
352
			grille.stopEditing();
353
			grille.getStore().insert(relationCollectionACommentaire, index);
354
			grille.startEditing(index, 0);
355
			grille.getSelectionModel().select(index, false);
356
		}
357
	}
358
 
359
	private void supprimerDansGrille(CollectionACommentaire relationCollectionACommentaire) {
360
		if (relationCollectionACommentaire != null) {
361
			// Ajout de la personne supprimée à la liste
362
			if ((relationCollectionACommentaire.get("_etat_").equals("") || !relationCollectionACommentaire.get("_etat_").equals(aDonnee.ETAT_AJOUTE))
363
					&& relationCollectionACommentaire.getId() != null
364
					&& !relationCollectionACommentaire.getId().equals("")) {
1081 jpm 365
				commentairesSupprimes.put("id"+idGenere++, relationCollectionACommentaire);
997 jpm 366
			}
367
 
368
			// Suppression de l'enregistrement de la grille
369
			grille.getStore().remove(relationCollectionACommentaire);
370
		}
371
	}
372
 
373
	private EditorGrid<CollectionACommentaire> creerGrille() {
374
		ListStore<CollectionACommentaire> storeGrille = new ListStore<CollectionACommentaire>();
375
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<CollectionACommentaire>>() {
376
			public void handleEvent(StoreEvent<CollectionACommentaire> ce) {
377
				actualiserEtatBoutonsBarreOutils();
378
			}
379
		});
380
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<CollectionACommentaire>>() {
381
			public void handleEvent(StoreEvent<CollectionACommentaire> ce) {
382
				actualiserEtatBoutonsBarreOutils();
383
			}
384
		});
385
		storeGrille.addListener(Store.Update, new Listener<StoreEvent<CollectionACommentaire>>() {
386
			public void handleEvent(StoreEvent<CollectionACommentaire> ce) {
387
				if (ce.getRecord().isModified("_type_") && !ce.getModel().get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
388
					ce.getModel().set("_etat_", aDonnee.ETAT_MODIFIE);
389
				}
390
			}
391
		});
392
 
393
		RowNumberer pluginLigneNumero = new RowNumberer();
394
 
395
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
396
		colonnes.add(pluginLigneNumero);
397
 
398
		colonnes.add(creerColonneType());
399
		colonnes.add(new ColumnConfig("_titre_", i18nC.commentaireTitre(), 150));
400
		colonnes.add(new ColumnConfig("_texte_", i18nC.commentaireTexte(), 75));
401
		colonnes.add(new ColumnConfig("_ponderation_", i18nC.commentairePonderation(), 35));
402
		colonnes.add(creerColonneAcces());
403
 
404
		GridSelectionModel<CollectionACommentaire> modeleDeSelection = new GridSelectionModel<CollectionACommentaire>();
405
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
406
 
407
		EditorGrid<CollectionACommentaire> grille = new EditorGrid<CollectionACommentaire>(storeGrille, modeleDeColonnes);
408
		grille.setHeight("100%");
409
		grille.setBorders(true);
410
		grille.setSelectionModel(modeleDeSelection);
411
		grille.addPlugin(pluginLigneNumero);
412
		grille.getView().setForceFit(true);
413
		grille.setAutoExpandColumn("_titre_");
414
		grille.setStripeRows(true);
415
		grille.setTrackMouseOver(true);
416
 
417
		return grille;
418
	}
419
 
420
	private ColumnConfig creerColonneType() {
1031 jpm 421
		typeCombo = new ChampComboBoxMultiSelect<Valeur>();
997 jpm 422
		typeCombo.setDisplayField("nom");
1031 jpm 423
		typeCombo.setValueField("id_valeur");
997 jpm 424
		typeCombo.setStore(new ListStore<Valeur>());
425
		typeCombo.setEditable(false);
1031 jpm 426
		typeCombo.setForceSelection(true);
997 jpm 427
 
428
		CellEditor typeEditeur = new CellEditor(typeCombo) {
1031 jpm 429
			@SuppressWarnings("unchecked")
997 jpm 430
			@Override
431
			public Object preProcessValue(Object valeur) {
1031 jpm 432
				Valeur retour = new Valeur();
997 jpm 433
				if (valeur != null ) {
1031 jpm 434
					if (valeur instanceof String) {
435
						((ChampComboBoxMultiSelect<Valeur>) getField()).peuplerAvecTexte(valeur.toString());
997 jpm 436
					}
437
				}
438
				return retour;
439
			}
440
 
441
			@Override
442
			public Object postProcessValue(Object valeur) {
443
				String retour = null;
1031 jpm 444
				if (getField().getRawValue() != null ) {
445
					retour = getField().getRawValue();
997 jpm 446
				}
447
				return retour;
448
			}
449
		};
1031 jpm 450
 
997 jpm 451
		GridCellRenderer<CollectionACommentaire> typeRendu = new GridCellRenderer<CollectionACommentaire>() {
452
			public String render(CollectionACommentaire model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<CollectionACommentaire> store, Grid<CollectionACommentaire> grid) {
1031 jpm 453
				String type = model.get("_type_");
454
				if (typeCombo.getStore() != null && type != null && (type.matches("[0-9]+") || type.contains(aDonnee.SEPARATEUR_VALEURS))) {
455
					type = typeCombo.formaterIdentifiantsEnTexte(type);
456
					model.set("_type_", type);
997 jpm 457
				}
458
				return type;
459
			}
460
		};
461
		ColumnConfig typeColonne = new ColumnConfig("_type_", i18nC.commentaireType(), 100);
462
		typeColonne.setEditor(typeEditeur);
463
		typeColonne.setRenderer(typeRendu);
464
		return typeColonne;
465
	}
466
 
467
	private ColumnConfig creerColonneAcces() {
468
		GridCellRenderer<CollectionACommentaire> accesRendu = new GridCellRenderer<CollectionACommentaire>() {
469
			public String render(CollectionACommentaire model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<CollectionACommentaire> store, Grid<CollectionACommentaire> grid) {
470
				String acces = (model.getCommentaire().etrePublic() ? i18nC.donneePublic() : i18nC.donneePrivee());
471
				model.set("_public_", acces);
472
				return acces;
473
			}
474
		};
475
		ColumnConfig accesColonne = new ColumnConfig("_public_", i18nC.commentairePublic(), 30);
476
		accesColonne.setRenderer(accesRendu);
477
		return accesColonne;
478
	}
479
 
480
	public void actualiserEtatBoutonsBarreOutils() {
481
		// Activation des boutons si la grille contient un élément
482
		if (grille.getStore().getCount() > 0) {
483
			commentairesBoutonSupprimer.enable();
484
			commentairesBoutonModifier.enable();
485
		}
486
		// Désactivation des boutons si la grille ne contient plus d'élément
487
		if (grille.getStore().getCount() == 0) {
488
			commentairesBoutonSupprimer.disable();
489
			commentairesBoutonModifier.disable();
490
		}
491
	}
492
 
493
	public void rafraichir(Object nouvellesDonnees) {
494
		if (nouvellesDonnees instanceof ValeurListe) {
495
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
496
			rafraichirValeurListe(listeValeurs);
497
		} else if (nouvellesDonnees instanceof Information) {
498
			Information info = (Information) nouvellesDonnees;
499
			rafraichirInformation(info);
500
		} else {
501
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
502
		}
503
 
504
		if (chargementTypesOk && chargementCommentairesOk) {
505
			peupler();
506
			initialiserChargement();
507
		}
508
	}
509
 
510
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
511
		if (listeValeurs.getId().equals(config.getListeId("typeCommentaireCollection"))) {
1031 jpm 512
			List<Valeur> liste = listeValeurs.toList();
513
			if (liste.size() > 0) {
514
				ListStore<Valeur> store = typeCombo.getStore();
515
				store.removeAll();
516
				store.add(liste);
517
				store.sort("nom", SortDir.ASC);
518
				typeCombo.setStore(store);
519
			}
997 jpm 520
			chargementTypesOk = true;
521
		} else {
522
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
523
		}
524
	}
525
 
526
	public void rafraichirInformation(Information info) {
527
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
528
			GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
529
		}
530
		String type = info.getType();
1098 jpm 531
		if (info.getType().equals("liste_collection_a_commentaire")) {
532
			if (info.getDonnee(0) != null) {
533
				initialiser();
534
				collection.setCommentairesLiees((CollectionACommentaireListe) info.getDonnee(0));
535
				chargementCommentairesOk = true;
536
			}
537
		} else if (info.getType().equals("ajout_collection")) {
997 jpm 538
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
539
				String collectionId = (String) info.getDonnee(0);
540
 
541
				// Suite à la récupération de l'id de la collection nouvellement ajoutée nous ajoutons les personnes liées
542
				// En mode AJOUT, il ne peut que y avoir des personnes liées ajoutées
1081 jpm 543
				mediateur.ajouterCollectionACommentaire(this, collectionId, commentairesAjoutes);
997 jpm 544
			}
545
		} else if (type.equals("commentaire_modifiee")) {
546
			if (info.getDonnee(0) != null) {
547
				Commentaire commentaire = (Commentaire) info.getDonnee(0);
548
				CollectionACommentaire commentaireDansGrille = grille.getStore().findModel("id_commentaire", commentaire.getId());
549
				int index = grille.getStore().indexOf(commentaireDansGrille);
550
				grille.getStore().remove(commentaireDansGrille);
551
				String typeCommentaire = (String) commentaireDansGrille.get("_type_");
552
				ajouterDansGrille(commentaire, typeCommentaire, index);
553
			}
554
		} else if (type.equals("commentaire_ajoutee")) {
555
			if (info.getDonnee(0) != null) {
556
				Commentaire commentaire = (Commentaire) info.getDonnee(0);
557
				ajouterDansGrille(commentaire);
558
			}
559
		} else if (info.getType().equals("modif_collection_a_commentaire")) {
1239 cyprien 560
			InfoLogger.display("Modification des notes liées à la collection", info.toString());
1081 jpm 561
			initialiserGestionCommentaires();
997 jpm 562
		} else if (info.getType().equals("suppression_collection_a_commentaire")) {
1239 cyprien 563
			InfoLogger.display("Suppression des notes liées à la collection", info.toString());
1081 jpm 564
			initialiserGestionCommentaires();
997 jpm 565
		} else if (info.getType().equals("ajout_collection_a_commentaire")) {
1239 cyprien 566
			InfoLogger.display("Ajout des notes liées à la collection", info.toString());
1081 jpm 567
			initialiserGestionCommentaires();
997 jpm 568
		}
569
	}
570
 
571
	public void peupler() {
572
		grille.getStore().removeAll();
573
		grille.getStore().add(collection.getCommentairesLiees().toList());
1031 jpm 574
		grille.recalculate();
997 jpm 575
		layout();
1239 cyprien 576
		InfoLogger.display(i18nC.chargementCommentaire(), i18nC.ok());
997 jpm 577
	}
578
 
579
	public void collecter() {
580
		if (etreAccede()) {
581
			int nbreCommentaire = grille.getStore().getCount();
582
			for (int i = 0; i < nbreCommentaire; i++) {
583
				CollectionACommentaire relationCollectionACommentaire = grille.getStore().getAt(i);
584
				if (relationCollectionACommentaire.get("_etat_") != null) {
585
					if (relationCollectionACommentaire.get("_etat_").equals(aDonnee.ETAT_MODIFIE)) {
1081 jpm 586
						corrigerChampsGrille(relationCollectionACommentaire);// Nous modifions l'id_type
587
						commentairesModifies.put("id"+idGenere++, relationCollectionACommentaire);
997 jpm 588
					}
589
					if (relationCollectionACommentaire.get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
590
						corrigerChampsGrille(relationCollectionACommentaire);// Nous modifions l'id_type
1081 jpm 591
						commentairesAjoutes.put("id"+idGenere++, relationCollectionACommentaire);
997 jpm 592
					}
593
					// Initialisation de la grille
594
					relationCollectionACommentaire.set("_etat_", "");
595
				}
596
			}
597
			grille.getStore().commitChanges();
598
		}
599
	}
600
 
601
	private void corrigerChampsGrille(CollectionACommentaire relationCollectionACommentaire) {
602
		String type = relationCollectionACommentaire.get("_type_");
1077 jpm 603
		relationCollectionACommentaire.setType(typeCombo.formaterTexteEnIdentifiants(type));
997 jpm 604
	}
605
 
606
	public void soumettre() {
607
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1081 jpm 608
			if (commentairesAjoutes.size() == 0 && commentairesModifies.size() == 0 && commentairesSupprimes.size() == 0) {
1239 cyprien 609
				InfoLogger.display("Modification des notes liées", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
997 jpm 610
			} else {
1081 jpm 611
				mediateur.ajouterCollectionACommentaire(this, collection.getId(), commentairesAjoutes);
612
				mediateur.modifierCollectionACommentaire(this, commentairesModifies);
613
				mediateur.supprimerCollectionACommentaire(this, commentairesSupprimes);
997 jpm 614
			}
615
		}
616
	}
617
 
618
	private void actualiserGrille() {
619
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1367 cyprien 620
			mediateur.selectionnerCollectionACommentaire(this, collection.getId(), null);
997 jpm 621
		} else {
622
			grille.getStore().removeAll();
623
			layout();
624
		}
625
	}
626
}