Subversion Repositories eFlore/Applications.coel

Rev

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