Subversion Repositories eFlore/Applications.coel

Rev

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