Subversion Repositories eFlore/Applications.coel

Rev

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