Subversion Repositories eFlore/Applications.coel

Rev

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