Subversion Repositories eFlore/Applications.coel

Rev

Rev 1680 | 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;
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_titre");
294
		modelTypeCommentaires.addField("ccm_texte");
295
		modelTypeCommentaires.addField("ccm_ponderation");
296
		modelTypeCommentaires.addField("ccm_mark_public");
297
 
298
		String displayNameCommentaires = "ccm_titre";
299
		ProxyCommentaires<ModelData> proxyCommentaires = new ProxyCommentaires<ModelData>(null);
300
 
301
		final ChampComboBoxRechercheTempsReelPaginable commentairesCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyCommentaires, modelTypeCommentaires, displayNameCommentaires);
302
		commentairesCombo.getCombo().setTabIndex(tabIndex++);
303
		commentairesCombo.getCombo().setForceSelection(true);
304
 
305
		commentairesCombo.getCombo().setValidator(new Validator() {
306
			public String validate(Field<?> field, String value) {
307
				String retour = null;
308
				if (field.getRawValue().equals("")) {
309
					field.setValue(null);
310
				} else if (commentairesCombo.getStore().findModel("ccm_titre", field.getRawValue()) == null) {
311
					String contenuBrut = field.getRawValue();
312
					field.setValue(null);
313
					field.setRawValue(contenuBrut);
314
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
997 jpm 315
				}
1513 jpm 316
				return retour;
997 jpm 317
			}
318
		});
1513 jpm 319
 
320
		commentairesCombo.getCombo().addListener(Events.Select, new Listener<BaseEvent>() {
997 jpm 321
			public void handleEvent(BaseEvent be) {
1513 jpm 322
				if (commentairesSaisisComboBox.getValeur() instanceof ModelData) {
323
					Commentaire commentaireSaisiSelectionnee = new Commentaire(commentairesSaisisComboBox.getValeur());
997 jpm 324
					ajouterDansGrille(commentaireSaisiSelectionnee);
1513 jpm 325
					commentairesSaisisComboBox.getCombo().setValue(null);
997 jpm 326
				}
327
			}
328
		});
1513 jpm 329
 
330
		return commentairesCombo;
997 jpm 331
	}
332
 
333
	private void ajouterDansGrille(Commentaire commentaire) {
334
		ajouterDansGrille(commentaire, null, 0);
335
	}
336
 
337
	private void ajouterDansGrille(Commentaire commentaire, String type, int index) {
338
		if (commentaire != null) {
339
			CollectionACommentaire relationCollectionACommentaire = new CollectionACommentaire();
340
			relationCollectionACommentaire.setCommentaire(commentaire);
341
			relationCollectionACommentaire.setIdCommentaire(commentaire.getId());
342
			if (type != null) {
343
				relationCollectionACommentaire.set("_type_", type);
344
			}
345
			// Gestion de l'id de la collection
346
			if (mode.equals(Formulaire.MODE_MODIFIER)) {
347
				relationCollectionACommentaire.setIdCollection(collection.getId());
348
			}
349
			relationCollectionACommentaire.set("_etat_", aDonnee.ETAT_AJOUTE);
350
			corrigerChampsGrille(relationCollectionACommentaire);
351
 
352
			// Ajout à la grille
1513 jpm 353
			grille.getGrille().stopEditing();
354
			grille.getGrille().getStore().insert(relationCollectionACommentaire, index);
355
			grille.getGrille().startEditing(index, 0);
356
			grille.getGrille().getSelectionModel().select(index, false);
997 jpm 357
		}
358
	}
359
 
360
	private void supprimerDansGrille(CollectionACommentaire relationCollectionACommentaire) {
361
		if (relationCollectionACommentaire != null) {
362
			// Ajout de la personne supprimée à la liste
363
			if ((relationCollectionACommentaire.get("_etat_").equals("") || !relationCollectionACommentaire.get("_etat_").equals(aDonnee.ETAT_AJOUTE))
364
					&& relationCollectionACommentaire.getId() != null
365
					&& !relationCollectionACommentaire.getId().equals("")) {
1081 jpm 366
				commentairesSupprimes.put("id"+idGenere++, relationCollectionACommentaire);
997 jpm 367
			}
368
 
369
			// Suppression de l'enregistrement de la grille
370
			grille.getStore().remove(relationCollectionACommentaire);
371
		}
372
	}
373
 
1513 jpm 374
	private GrillePaginable<ModelData> creerGrille() {
997 jpm 375
 
1513 jpm 376
		GrillePaginable<ModelData> grillePaginable = null;
377
 
378
		// ModelType
379
		ModelType modelTypeCollectionACommentaire = new ModelType();
380
		modelTypeCollectionACommentaire.setRoot("collectionsACommentaire");
381
		modelTypeCollectionACommentaire.setTotalName("nbElements");
382
		modelTypeCollectionACommentaire.addField("ccac_id_commentaire");
383
		modelTypeCollectionACommentaire.addField("ccac_id_collection");
384
		modelTypeCollectionACommentaire.addField("ccac_truk_type");
385
		modelTypeCollectionACommentaire.addField("ccm_id_commentaire");
386
		modelTypeCollectionACommentaire.addField("ccm_titre");
387
		modelTypeCollectionACommentaire.addField("ccm_texte");
388
		modelTypeCollectionACommentaire.addField("ccm_ponderation");
389
		modelTypeCollectionACommentaire.addField("ccm_mark_public");
390
		modelTypeCollectionACommentaire.addField("ccm_ce_pere");
997 jpm 391
 
1513 jpm 392
		// Proxy
393
		ProxyCollectionACommentaire<ModelData> proxyCollectionACommentaire = new ProxyCollectionACommentaire<ModelData>(null, collection.getId());
394
 
395
		// Colonnes
997 jpm 396
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
397
 
1513 jpm 398
		RowNumberer pluginLigneNumero = new RowNumberer();
399
		colonnes.add(pluginLigneNumero);
400
 
997 jpm 401
		colonnes.add(creerColonneType());
402
		colonnes.add(new ColumnConfig("_titre_", i18nC.commentaireTitre(), 150));
403
		colonnes.add(new ColumnConfig("_texte_", i18nC.commentaireTexte(), 75));
404
		colonnes.add(new ColumnConfig("_ponderation_", i18nC.commentairePonderation(), 35));
405
		colonnes.add(creerColonneAcces());
406
 
1513 jpm 407
		// Modèle de colonnes
997 jpm 408
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
1513 jpm 409
		GridSelectionModel<ModelData> modeleDeSelection = new GridSelectionModel<ModelData>();
997 jpm 410
 
1513 jpm 411
		HashMap<String, String> virtualFields = new HashMap<String, String>();
412
		virtualFields.put("_titre_", "ccm_titre");
413
		virtualFields.put("_texte_", "ccm_texte");
414
		virtualFields.put("_ponderation_", "ccm_ponderation");
415
		virtualFields.put("_type_", "ccac_truk_type");
416
		virtualFields.put("_public_", "ccm_mark_public");
417
		virtualFields.put("_etat_", "");
997 jpm 418
 
1513 jpm 419
		// Grille
420
		grillePaginable = new GrillePaginable<ModelData>(modelTypeCollectionACommentaire, virtualFields, proxyCollectionACommentaire, colonnes, modeleDeColonnes);
421
		grillePaginable.getGrille().setBorders(true);
422
		grillePaginable.getGrille().setSelectionModel(modeleDeSelection);
423
		grillePaginable.getGrille().addPlugin(pluginLigneNumero);
424
		grillePaginable.getGrille().getView().setForceFit(true);
425
		grillePaginable.getGrille().setAutoExpandColumn("_titre_");
426
		grillePaginable.getGrille().setStripeRows(true);
427
		grillePaginable.getGrille().setTrackMouseOver(true);
428
 
429
		// Rajouter des écouteurs
430
		grillePaginable.getStore().addListener(Store.Update, new Listener<StoreEvent<ModelData>>() {
431
			public void handleEvent(StoreEvent<ModelData> ce) {
432
				if (ce.getRecord().isModified("_type_") && ce.getModel().get("_etat_") == null || !ce.getModel().get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
433
					ce.getModel().set("_etat_", aDonnee.ETAT_MODIFIE);
434
				}
435
			}
436
		});
437
 
438
		return grillePaginable;
997 jpm 439
	}
440
 
441
	private ColumnConfig creerColonneType() {
1031 jpm 442
		typeCombo = new ChampComboBoxMultiSelect<Valeur>();
997 jpm 443
		typeCombo.setDisplayField("nom");
1031 jpm 444
		typeCombo.setValueField("id_valeur");
997 jpm 445
		typeCombo.setStore(new ListStore<Valeur>());
446
		typeCombo.setEditable(false);
1031 jpm 447
		typeCombo.setForceSelection(true);
997 jpm 448
 
449
		CellEditor typeEditeur = new CellEditor(typeCombo) {
1031 jpm 450
			@SuppressWarnings("unchecked")
997 jpm 451
			@Override
452
			public Object preProcessValue(Object valeur) {
1031 jpm 453
				Valeur retour = new Valeur();
997 jpm 454
				if (valeur != null ) {
1031 jpm 455
					if (valeur instanceof String) {
456
						((ChampComboBoxMultiSelect<Valeur>) getField()).peuplerAvecTexte(valeur.toString());
997 jpm 457
					}
458
				}
459
				return retour;
460
			}
461
 
462
			@Override
463
			public Object postProcessValue(Object valeur) {
464
				String retour = null;
1031 jpm 465
				if (getField().getRawValue() != null ) {
466
					retour = getField().getRawValue();
997 jpm 467
				}
468
				return retour;
469
			}
470
		};
1031 jpm 471
 
1513 jpm 472
		GridCellRenderer<ModelData> typeRendu = new GridCellRenderer<ModelData>() {
473
			public String render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ModelData> store, Grid<ModelData> grid) {
1031 jpm 474
				String type = model.get("_type_");
475
				if (typeCombo.getStore() != null && type != null && (type.matches("[0-9]+") || type.contains(aDonnee.SEPARATEUR_VALEURS))) {
476
					type = typeCombo.formaterIdentifiantsEnTexte(type);
477
					model.set("_type_", type);
997 jpm 478
				}
479
				return type;
480
			}
481
		};
482
		ColumnConfig typeColonne = new ColumnConfig("_type_", i18nC.commentaireType(), 100);
483
		typeColonne.setEditor(typeEditeur);
484
		typeColonne.setRenderer(typeRendu);
485
		return typeColonne;
486
	}
487
 
488
	private ColumnConfig creerColonneAcces() {
1513 jpm 489
		GridCellRenderer<ModelData> accesRendu = new GridCellRenderer<ModelData>() {
490
			public String render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ModelData> store, Grid<ModelData> grid) {
491
				CollectionACommentaire cac = new CollectionACommentaire(model, true);
492
				String acces = (cac.getCommentaire().etrePublic() ? i18nC.donneePublic() : i18nC.donneePrivee());
997 jpm 493
				model.set("_public_", acces);
494
				return acces;
495
			}
496
		};
497
		ColumnConfig accesColonne = new ColumnConfig("_public_", i18nC.commentairePublic(), 30);
498
		accesColonne.setRenderer(accesRendu);
499
		return accesColonne;
500
	}
501
 
502
	public void actualiserEtatBoutonsBarreOutils() {
503
		// Activation des boutons si la grille contient un élément
504
		if (grille.getStore().getCount() > 0) {
505
			commentairesBoutonSupprimer.enable();
506
			commentairesBoutonModifier.enable();
507
		}
508
		// Désactivation des boutons si la grille ne contient plus d'élément
509
		if (grille.getStore().getCount() == 0) {
510
			commentairesBoutonSupprimer.disable();
511
			commentairesBoutonModifier.disable();
512
		}
513
	}
514
 
515
	public void rafraichir(Object nouvellesDonnees) {
516
		if (nouvellesDonnees instanceof ValeurListe) {
517
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
518
			rafraichirValeurListe(listeValeurs);
519
		} else if (nouvellesDonnees instanceof Information) {
520
			Information info = (Information) nouvellesDonnees;
521
			rafraichirInformation(info);
522
		} else {
523
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
524
		}
525
 
526
		if (chargementTypesOk && chargementCommentairesOk) {
527
			peupler();
528
			initialiserChargement();
529
		}
530
	}
531
 
532
	private void rafraichirValeurListe(ValeurListe listeValeurs) {
533
		if (listeValeurs.getId().equals(config.getListeId("typeCommentaireCollection"))) {
1031 jpm 534
			List<Valeur> liste = listeValeurs.toList();
535
			if (liste.size() > 0) {
536
				ListStore<Valeur> store = typeCombo.getStore();
537
				store.removeAll();
538
				store.add(liste);
539
				store.sort("nom", SortDir.ASC);
540
				typeCombo.setStore(store);
541
			}
997 jpm 542
			chargementTypesOk = true;
543
		} else {
544
			GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
545
		}
546
	}
547
 
548
	public void rafraichirInformation(Information info) {
549
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
550
			GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
551
		}
552
		String type = info.getType();
1098 jpm 553
		if (info.getType().equals("liste_collection_a_commentaire")) {
554
			if (info.getDonnee(0) != null) {
555
				initialiser();
556
				collection.setCommentairesLiees((CollectionACommentaireListe) info.getDonnee(0));
557
				chargementCommentairesOk = true;
558
			}
559
		} else if (info.getType().equals("ajout_collection")) {
997 jpm 560
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
561
				String collectionId = (String) info.getDonnee(0);
562
 
563
				// Suite à la récupération de l'id de la collection nouvellement ajoutée nous ajoutons les personnes liées
564
				// En mode AJOUT, il ne peut que y avoir des personnes liées ajoutées
1081 jpm 565
				mediateur.ajouterCollectionACommentaire(this, collectionId, commentairesAjoutes);
997 jpm 566
			}
567
		} else if (type.equals("commentaire_modifiee")) {
568
			if (info.getDonnee(0) != null) {
569
				Commentaire commentaire = (Commentaire) info.getDonnee(0);
1513 jpm 570
				ModelData commentaireDansGrille = grille.getStore().findModel("ccm_id_commentaire", commentaire.getId());
997 jpm 571
				int index = grille.getStore().indexOf(commentaireDansGrille);
572
				grille.getStore().remove(commentaireDansGrille);
573
				String typeCommentaire = (String) commentaireDansGrille.get("_type_");
574
				ajouterDansGrille(commentaire, typeCommentaire, index);
575
			}
576
		} else if (type.equals("commentaire_ajoutee")) {
577
			if (info.getDonnee(0) != null) {
578
				Commentaire commentaire = (Commentaire) info.getDonnee(0);
579
				ajouterDansGrille(commentaire);
580
			}
581
		} else if (info.getType().equals("modif_collection_a_commentaire")) {
1239 cyprien 582
			InfoLogger.display("Modification des notes liées à la collection", info.toString());
1081 jpm 583
			initialiserGestionCommentaires();
997 jpm 584
		} else if (info.getType().equals("suppression_collection_a_commentaire")) {
1239 cyprien 585
			InfoLogger.display("Suppression des notes liées à la collection", info.toString());
1081 jpm 586
			initialiserGestionCommentaires();
997 jpm 587
		} else if (info.getType().equals("ajout_collection_a_commentaire")) {
1239 cyprien 588
			InfoLogger.display("Ajout des notes liées à la collection", info.toString());
1081 jpm 589
			initialiserGestionCommentaires();
997 jpm 590
		}
591
	}
592
 
593
	public void peupler() {
594
		grille.getStore().removeAll();
595
		grille.getStore().add(collection.getCommentairesLiees().toList());
1031 jpm 596
		grille.recalculate();
997 jpm 597
		layout();
1239 cyprien 598
		InfoLogger.display(i18nC.chargementCommentaire(), i18nC.ok());
997 jpm 599
	}
600
 
601
	public void collecter() {
602
		if (etreAccede()) {
603
			int nbreCommentaire = grille.getStore().getCount();
604
			for (int i = 0; i < nbreCommentaire; i++) {
1513 jpm 605
				ModelData relationCollectionACommentaire = grille.getStore().getAt(i);
606
				CollectionACommentaire cac = new CollectionACommentaire(relationCollectionACommentaire, false);
997 jpm 607
				if (relationCollectionACommentaire.get("_etat_") != null) {
608
					if (relationCollectionACommentaire.get("_etat_").equals(aDonnee.ETAT_MODIFIE)) {
1513 jpm 609
						corrigerChampsGrille(cac);// Nous modifions l'id_type
610
						commentairesModifies.put("id"+idGenere++, cac);
997 jpm 611
					}
612
					if (relationCollectionACommentaire.get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
1513 jpm 613
						corrigerChampsGrille(cac);// Nous modifions l'id_type
614
						commentairesAjoutes.put("id"+idGenere++, cac);
997 jpm 615
					}
616
					// Initialisation de la grille
617
					relationCollectionACommentaire.set("_etat_", "");
618
				}
619
			}
620
			grille.getStore().commitChanges();
621
		}
622
	}
623
 
624
	private void corrigerChampsGrille(CollectionACommentaire relationCollectionACommentaire) {
625
		String type = relationCollectionACommentaire.get("_type_");
1077 jpm 626
		relationCollectionACommentaire.setType(typeCombo.formaterTexteEnIdentifiants(type));
1513 jpm 627
		relationCollectionACommentaire.setIdCollection(collection.getId());
997 jpm 628
	}
629
 
630
	public void soumettre() {
631
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1081 jpm 632
			if (commentairesAjoutes.size() == 0 && commentairesModifies.size() == 0 && commentairesSupprimes.size() == 0) {
1630 aurelien 633
				//InfoLogger.display("Modification des notes liées", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
997 jpm 634
			} else {
1081 jpm 635
				mediateur.ajouterCollectionACommentaire(this, collection.getId(), commentairesAjoutes);
1513 jpm 636
				mediateur.modifierCollectionACommentaire(this, commentairesModifies);
1081 jpm 637
				mediateur.supprimerCollectionACommentaire(this, commentairesSupprimes);
997 jpm 638
			}
639
		}
640
	}
641
 
642
	private void actualiserGrille() {
643
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1367 cyprien 644
			mediateur.selectionnerCollectionACommentaire(this, collection.getId(), null);
997 jpm 645
		} else {
646
			grille.getStore().removeAll();
647
			layout();
648
		}
649
	}
650
}