Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
985 jpm 1
package org.tela_botanica.client.vues.commentaire;
2
 
3
import java.util.ArrayList;
4
 
5
import org.tela_botanica.client.ComposantClass;
6
import org.tela_botanica.client.Mediateur;
1329 cyprien 7
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
989 jpm 8
import org.tela_botanica.client.composants.ChampSliderPourcentage;
1239 cyprien 9
import org.tela_botanica.client.composants.InfoLogger;
1329 cyprien 10
import org.tela_botanica.client.composants.pagination.ProxyProjets;
985 jpm 11
import org.tela_botanica.client.interfaces.Rafraichissable;
12
import org.tela_botanica.client.modeles.Information;
13
import org.tela_botanica.client.modeles.MenuApplicationId;
989 jpm 14
import org.tela_botanica.client.modeles.commentaire.Commentaire;
999 jpm 15
import org.tela_botanica.client.modeles.projet.Projet;
16
import org.tela_botanica.client.modeles.projet.ProjetListe;
1367 cyprien 17
import org.tela_botanica.client.synchronisation.Sequenceur;
989 jpm 18
import org.tela_botanica.client.util.Debug;
985 jpm 19
import org.tela_botanica.client.util.UtilArray;
20
import org.tela_botanica.client.util.UtilString;
21
import org.tela_botanica.client.vues.Formulaire;
22
 
1329 cyprien 23
import com.extjs.gxt.ui.client.data.ModelData;
24
import com.extjs.gxt.ui.client.data.ModelType;
985 jpm 25
import com.extjs.gxt.ui.client.event.Events;
999 jpm 26
import com.extjs.gxt.ui.client.store.ListStore;
1099 jpm 27
import com.extjs.gxt.ui.client.widget.Info;
985 jpm 28
import com.extjs.gxt.ui.client.widget.MessageBox;
989 jpm 29
import com.extjs.gxt.ui.client.widget.form.CheckBox;
999 jpm 30
import com.extjs.gxt.ui.client.widget.form.ComboBox;
31
import com.extjs.gxt.ui.client.widget.form.Field;
989 jpm 32
import com.extjs.gxt.ui.client.widget.form.TextArea;
985 jpm 33
import com.extjs.gxt.ui.client.widget.form.TextField;
999 jpm 34
import com.extjs.gxt.ui.client.widget.form.Validator;
35
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
985 jpm 36
import com.extjs.gxt.ui.client.widget.layout.FormData;
37
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
38
 
39
 
40
public class CommentaireForm extends Formulaire implements Rafraichissable {
41
 
989 jpm 42
	private Commentaire commentaire;
43
 
1329 cyprien 44
	private ChampComboBoxRechercheTempsReelPaginable projetsCombo = null;
989 jpm 45
	private TextField<String> titreChp;
46
	private TextArea texteChp;
47
	private ChampSliderPourcentage ponderationChp;
48
	private CheckBox publicChp;
985 jpm 49
 
50
	private static boolean formulaireValideOk = false;
989 jpm 51
	private static boolean commentaireValideOk = false;
1367 cyprien 52
 
53
	private Sequenceur sequenceur = new Sequenceur();
985 jpm 54
 
989 jpm 55
	public CommentaireForm(Mediateur mediateurCourrant, String commentaireId) {
56
		initialiserCommentaireForm(mediateurCourrant, commentaireId);
985 jpm 57
	}
58
 
989 jpm 59
	public CommentaireForm(Mediateur mediateurCourrant, String commentaireId, Rafraichissable vueARafraichirApresValidation) {
985 jpm 60
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
989 jpm 61
		initialiserCommentaireForm(mediateurCourrant, commentaireId);
985 jpm 62
	}
63
 
989 jpm 64
	private void initialiserCommentaireForm(Mediateur mediateurCourrant, String commentaireId) {
985 jpm 65
		initialiserValidation();
66
 
989 jpm 67
		commentaire = new Commentaire();
68
		commentaire.setId(commentaireId);
985 jpm 69
 
989 jpm 70
		String modeDeCreation = (UtilString.isEmpty(commentaire.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
71
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.COMMENTAIRE);
985 jpm 72
 
989 jpm 73
		panneauFormulaire.setLayout(new FormLayout());
1099 jpm 74
		genererTitreFormulaire();
989 jpm 75
		creerChamps();
76
 
985 jpm 77
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
1367 cyprien 78
			mediateur.selectionnerCommentaire(this, commentaireId, null);
985 jpm 79
		}
80
	}
81
 
1099 jpm 82
	private void genererTitreFormulaire() {
989 jpm 83
		String titre = i18nC.commentaireTitreFormAjout();
985 jpm 84
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1099 jpm 85
			 titre = i18nC.commentaireTitreFormModif();
86
			 if (commentaire != null) {
87
				 titre += " - "+i18nC.id()+": "+commentaire.getId();
88
			 }
985 jpm 89
		}
1099 jpm 90
		panneauFormulaire.setHeading(titre);
985 jpm 91
	}
92
 
989 jpm 93
	private void creerChamps() {
1329 cyprien 94
 
95
		ModelType modelTypeProjets = new ModelType();
96
		modelTypeProjets.setRoot("projets");
97
		modelTypeProjets.setTotalName("nbElements");
98
		modelTypeProjets.addField("cpr_nom");
99
		modelTypeProjets.addField("cpr_id_projet");
100
 
101
		String displayNameProjets = "cpr_nom";
1468 jpm 102
		ProxyProjets<ModelData> proxyProjets = new ProxyProjets<ModelData>(null);
1329 cyprien 103
 
104
		projetsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyProjets, modelTypeProjets, displayNameProjets);
105
		projetsCombo.setWidth(100, 550);
106
		projetsCombo.getCombo().setTabIndex(tabIndex++);
107
		projetsCombo.getCombo().setFieldLabel(i18nC.projetChamp());
108
		projetsCombo.getCombo().setEmptyText(i18nC.txtListeProjetDefaut());
109
		projetsCombo.getCombo().setForceSelection(true);
110
		projetsCombo.getCombo().setEditable(false);
111
		projetsCombo.getCombo().setAllowBlank(false);
112
		projetsCombo.getCombo().setValidator(new Validator() {
1077 jpm 113
			public String validate(Field<?> champ, String valeurAValider) {
999 jpm 114
				String retour = null;
1077 jpm 115
				if (UtilString.isEmpty(valeurAValider)
1329 cyprien 116
						|| projetsCombo.getStore().findModel("cpr_nom", valeurAValider) == null) {
1077 jpm 117
					champ.setValue(null);
118
					retour = i18nC.selectionnerValeur();
999 jpm 119
				}
120
				return retour;
121
			}
122
		});
1329 cyprien 123
 
999 jpm 124
		panneauFormulaire.add(projetsCombo, new FormData(450, 0));
125
 
985 jpm 126
		titreChp = new TextField<String>();
989 jpm 127
		titreChp.setFieldLabel(i18nC.commentaireTitre());
1077 jpm 128
		titreChp.setAllowBlank(false);
985 jpm 129
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
130
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
1077 jpm 131
		titreChp.addListener(Events.Invalid, creerEcouteurChampObligatoire());
989 jpm 132
		panneauFormulaire.add(titreChp, new FormData(450, 0));
985 jpm 133
 
989 jpm 134
		texteChp = new TextArea();
135
		texteChp.setFieldLabel(i18nC.commentaireTexte());
136
		panneauFormulaire.add(texteChp, new FormData(450, 250));
985 jpm 137
 
989 jpm 138
		ponderationChp = new ChampSliderPourcentage(i18nC.commentairePonderation());
139
		panneauFormulaire.add(ponderationChp, new FormData(450, 0));
140
 
141
		publicChp = new CheckBox();
142
		publicChp.setFieldLabel(i18nC.donneePublic());
143
		panneauFormulaire.add(publicChp, new FormData(50, 0));
985 jpm 144
	}
145
 
146
	public void rafraichir(Object nouvellesDonnees) {
989 jpm 147
		if (nouvellesDonnees instanceof Commentaire) {
985 jpm 148
			// Si on a reçu les details d'une publication
989 jpm 149
			rafraichirCommentaire((Commentaire) nouvellesDonnees);
985 jpm 150
		} else if (nouvellesDonnees instanceof Information) {
151
			rafraichirInformation((Information) nouvellesDonnees);
152
		} else {
989 jpm 153
			Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
985 jpm 154
		}
155
 
156
		if (etreValide()) {
157
			initialiserValidation();
158
			repandreRafraichissement();
1239 cyprien 159
			controlerFermeture();
985 jpm 160
		}
161
	}
162
 
989 jpm 163
	private void rafraichirCommentaire(Commentaire commentaireRecu) {
164
		commentaire = commentaireRecu;
985 jpm 165
		peuplerFormulaire();
1100 jpm 166
		genererTitreFormulaire();
985 jpm 167
	}
168
 
999 jpm 169
	private String getValeurComboProjets() {
170
		String valeur = "";
1329 cyprien 171
		if (projetsCombo.getCombo().getValue() != null && projetsCombo.getCombo().isValid()) {
172
			Projet projet = new Projet (projetsCombo.getValeur());
173
			valeur = projet.getId();
999 jpm 174
		}
175
		return valeur;
176
	}
1468 jpm 177
 
999 jpm 178
	private void setValeurComboProjets() {
1468 jpm 179
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
180
			if (projetsCombo.getCombo().getStore() != null
181
					&& commentaire != null
182
					&& commentaire.getIdProjet() != null
183
					&& !UtilString.isEmpty(commentaire.getIdProjet())) {
184
				projetsCombo.chargerValeurInitiale(commentaire.getIdProjet(), "cpr_id_projet");
185
			} else {
186
				projetsCombo.getCombo().setValue(null);
999 jpm 187
			}
1468 jpm 188
		} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
189
			if (projetsCombo.getCombo().getStore() != null) {
190
				projetsCombo.chargerValeurInitiale(mediateur.getProjetId(), "cpr_id_projet");
191
			} else {
192
				projetsCombo.getCombo().setValue(null);
193
			}
999 jpm 194
		}
195
	}
196
 
985 jpm 197
	private void rafraichirInformation(Information info) {
1099 jpm 198
		// Gestion des messages d'erreur
199
		if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
200
			Debug.log("MESSAGES:\n"+info.getMessages().toString());
201
		}
202
 
203
		// Gestion des actions
989 jpm 204
		String type = info.getType();
205
		if (type.equals("ajout_commentaire") || type.equals("modif_commentaire")) {
206
			commentaireValideOk = true;
985 jpm 207
		}
1099 jpm 208
		if (info.getType().equals("ajout_commentaire")) {
209
			if (vueExterneARafraichirApresValidation != null) {
210
				String noteId = (String) info.getDonnee(0);
211
				commentaire.setId(noteId);
212
			}
213
		}
214
 
215
		// Gestion des messages
216
		if (info.getType().equals("modif_commentaire")) {
1239 cyprien 217
			InfoLogger.display("Modification d'une note", info.toString());
1099 jpm 218
		} else if (info.getType().equals("ajout_commentaire")) {
219
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
220
				String noteId = (String) info.getDonnee(0);
1239 cyprien 221
				InfoLogger.display("Ajout d'une note", "La note '"+noteId+"' a bien été ajoutée");
1099 jpm 222
			} else {
1239 cyprien 223
				InfoLogger.display("Ajout d'une note", info.toString());
1099 jpm 224
			}
225
		}
985 jpm 226
	}
227
 
228
	private Boolean etreValide() {
229
		Boolean valide = false;
989 jpm 230
		if (formulaireValideOk && commentaireValideOk) {
985 jpm 231
			valide = true;
232
		}
233
		return valide;
234
	}
235
 
236
	private void initialiserValidation() {
237
		formulaireValideOk = false;
989 jpm 238
		commentaireValideOk = false;
985 jpm 239
	}
240
 
241
	private void repandreRafraichissement() {
242
		if (vueExterneARafraichirApresValidation != null) {
989 jpm 243
			String type = "commentaire_modifiee";
985 jpm 244
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
989 jpm 245
				type = "commentaire_ajoutee";
985 jpm 246
			}
247
			Information info = new Information(type);
989 jpm 248
			info.setDonnee(0, commentaire);
985 jpm 249
			vueExterneARafraichirApresValidation.rafraichir(info);
250
		}
251
	}
252
 
253
	public boolean soumettreFormulaire() {
254
		formulaireValideOk = verifierFormulaire();
255
		if (formulaireValideOk) {
989 jpm 256
			soumettreCommentaire();
985 jpm 257
		}
258
		return formulaireValideOk;
259
	}
260
 
989 jpm 261
	private void soumettreCommentaire() {
262
		Commentaire commentaireCollectee = collecterCommentaire();
263
		if (commentaireCollectee != null) {
985 jpm 264
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
989 jpm 265
				mediateur.ajouterCommentaire(this, commentaireCollectee);
985 jpm 266
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
989 jpm 267
				mediateur.modifierCommentaire(this, commentaireCollectee);
985 jpm 268
			}
269
		}
270
	}
271
 
272
	public boolean verifierFormulaire() {
273
		boolean valide = true;
274
		ArrayList<String> messages = new ArrayList<String>();
275
 
276
		String titre = titreChp.getValue();
277
		if (titre == null || titre.equals("")) {
989 jpm 278
			messages.add(i18nC.commentaireMessageTitre());
985 jpm 279
		}
280
 
1077 jpm 281
		if (UtilString.isEmpty(getValeurComboProjets())) {
282
			String selectionDe = i18nC.articleUn()+" "+i18nC.projetSingulier();
283
			String pour = i18nC.articleLa()+" "+i18nC.commentaireSingulier();
284
			messages.add(i18nM.selectionObligatoire(selectionDe, pour));
285
		}
286
 
985 jpm 287
		if (messages.size() != 0) {
288
			String[] tableauDeMessages = {};
289
			tableauDeMessages = messages.toArray(tableauDeMessages);
989 jpm 290
			MessageBox.alert(i18nC.erreurSaisieTitre(), UtilArray.implode(tableauDeMessages, "<br />"), null);
985 jpm 291
			valide = false;
292
		}
293
		return valide;
294
	}
295
 
296
	private void peuplerFormulaire() {
999 jpm 297
		setValeurComboProjets();
989 jpm 298
		titreChp.setValue(commentaire.getTitre());
299
		texteChp.setValue(commentaire.getTexte());
300
		ponderationChp.peupler(commentaire.getPonderation());
301
		boolean acces = (commentaire.etrePublic() ? true : false);
302
		publicChp.setValue(acces);
985 jpm 303
	}
304
 
989 jpm 305
	private Commentaire collecterCommentaire() {
306
		Commentaire commentaireCollectee = (Commentaire) commentaire.cloner(new Commentaire());
985 jpm 307
 
999 jpm 308
		commentaireCollectee.setIdProjet(getValeurComboProjets());
309
 
985 jpm 310
		String titre = titreChp.getValue();
989 jpm 311
		commentaireCollectee.setTitre(titre);
985 jpm 312
 
989 jpm 313
		String texte = texteChp.getValue();
314
		commentaireCollectee.setTexte(texte);
985 jpm 315
 
989 jpm 316
		String ponderation = ponderationChp.getValeur();
317
		commentaireCollectee.setPonderation(ponderation);
985 jpm 318
 
989 jpm 319
		String acces = (publicChp.getValue() ? "1" : "0");
320
		commentaireCollectee.setPublic(acces);
985 jpm 321
 
989 jpm 322
		Commentaire commentaireARetourner = null;
323
		if (!commentaireCollectee.comparer(commentaire)) {
324
			commentaireARetourner = commentaire = commentaireCollectee;
985 jpm 325
		}
989 jpm 326
		return commentaireARetourner;
985 jpm 327
	}
328
 
329
	public void reinitialiserFormulaire() {
330
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
989 jpm 331
			mediateur.afficherFormPublication(commentaire.getId());
985 jpm 332
		} else {
333
			mediateur.afficherFormPublication(null);
334
		}
335
	}
336
}