Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
877 aurelien 1
package org.tela_botanica.client.vues;
2
 
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.List;
6
 
7
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.images.Images;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.Information;
11
import org.tela_botanica.client.modeles.MenuApplicationId;
12
import org.tela_botanica.client.modeles.Personne;
13
import org.tela_botanica.client.modeles.PersonneListe;
14
import org.tela_botanica.client.modeles.Projet;
15
import org.tela_botanica.client.modeles.Structure;
16
import org.tela_botanica.client.modeles.StructureListe;
17
import org.tela_botanica.client.util.Pattern;
18
import org.tela_botanica.client.util.UtilArray;
19
 
20
import com.extjs.gxt.ui.client.event.ButtonEvent;
21
import com.extjs.gxt.ui.client.event.SelectionListener;
22
import com.extjs.gxt.ui.client.store.ListStore;
23
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
24
import com.extjs.gxt.ui.client.widget.LayoutContainer;
25
import com.extjs.gxt.ui.client.widget.MessageBox;
26
import com.extjs.gxt.ui.client.widget.button.Button;
27
import com.extjs.gxt.ui.client.widget.form.CheckBox;
28
import com.extjs.gxt.ui.client.widget.form.ComboBox;
29
import com.extjs.gxt.ui.client.widget.form.FieldSet;
30
import com.extjs.gxt.ui.client.widget.form.TextArea;
31
import com.extjs.gxt.ui.client.widget.form.TextField;
32
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
33
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
34
import com.extjs.gxt.ui.client.widget.layout.FormData;
35
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
36
import com.google.gwt.core.client.GWT;
37
 
38
 
39
public class ProjetForm extends Formulaire implements Rafraichissable {
40
 
41
	private Projet projet;
42
 
43
	private FieldSet generalitesFieldset = null;
44
	private TextField<String> nomChp = null;
45
	private TextField<String> abreviationChp = null;
46
	private TextField<String> descriptionChp = null;
47
	private TextArea resumeChp = null;
48
	private TextField<String> urlChp = null;
49
 
50
	private FieldSet complementFieldset = null;
51
	private TextField<String> motsClesChp = null;
52
	private TextField<String> citationChp = null;
53
	private TextField<String> licenceChp = null;
54
	private CheckBox markPublicChp = null;
55
 
56
	private FieldSet indexationFieldset = null;
57
	private TextField<String> indexationHeureChp = null;
58
	private TextField<String> indexationDureeChp = null;
59
	private TextField<String> indexationFrequenceChp = null;
60
 
61
 
62
	private boolean formulaireValideOk = false;
63
	private boolean projetValideOk = false;
64
 
65
	private Rafraichissable vueExterneARafraichirApresValidation = null;
66
 
67
 
68
	public ProjetForm(Mediateur mediateurCourrant, String projetId) {
69
		initialiserProjetForm(mediateurCourrant, projetId);
70
	}
71
 
72
	public ProjetForm(Mediateur mediateurCourrant, String projetId, Rafraichissable vueARafraichirApresValidation) {
73
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
74
		initialiserProjetForm(mediateurCourrant, projetId);
75
	}
76
 
77
	private void initialiserProjetForm(Mediateur mediateurCourrant, String projetId) {
78
		projet = new Projet();
79
		projet.setId(projetId);
80
 
81
		String modeDeCreation = (projet.getId().isEmpty() ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
82
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
83
 
84
		panneauFormulaire.setLayout(new FlowLayout());
85
		String titre = genererTitreFormulaire();
86
		panneauFormulaire.setHeading(titre);
87
 
88
		creerZoneGeneralites();
89
		panneauFormulaire.add(generalitesFieldset);
90
 
91
		creerZoneComplement();
92
		panneauFormulaire.add(complementFieldset);
93
 
94
		creerZoneIndexation();
95
		panneauFormulaire.add(indexationFieldset);
96
 
97
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
98
			mediateurCourrant.selectionnerProjet(this, projetId);
99
		}
100
	}
101
 
102
	private String genererTitreFormulaire() {
103
		String titre = "Ajout d'une projet";
104
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
105
			 titre = "Modification d'une projet - "+i18nC.id()+": "+projet.getId();
106
		}
107
		return titre;
108
	}
109
 
110
	private void creerZoneGeneralites() {
111
		FormLayout layout = new FormLayout();
112
		layout.setLabelWidth(100);
113
 
114
		// Fieldset Infos Générales
115
		generalitesFieldset = new FieldSet();
116
		generalitesFieldset.setHeading("Informations générales");
117
		generalitesFieldset.setCollapsible(true);
118
		generalitesFieldset.setLayout(layout);
119
 
120
		nomChp = new TextField<String>();
121
		nomChp.setName("cpu");
122
		nomChp.setFieldLabel("Nom");
123
		generalitesFieldset.add(nomChp, new FormData(450, 0));
124
 
125
		abreviationChp = new TextField<String>();
126
		abreviationChp.setFieldLabel("Abréviation");
127
		generalitesFieldset.add(abreviationChp, new FormData(450, 0));
128
 
129
		descriptionChp = new TextField<String>();
130
		descriptionChp.setFieldLabel("Description");
131
		generalitesFieldset.add(descriptionChp, new FormData(450, 0));
132
 
133
		resumeChp = new TextArea();
134
		resumeChp.setFieldLabel("Résumé");
135
		generalitesFieldset.add(resumeChp, new FormData(450, 0));
136
 
137
		urlChp = new TextField<String>();
138
		urlChp.setFieldLabel("URL du projet");
139
		generalitesFieldset.add(urlChp, new FormData(450, 0));
140
	}
141
 
142
	private void creerZoneComplement() {
143
		FormLayout layout = new FormLayout();
144
		layout.setLabelWidth(100);
145
 
146
		// Fieldset Edition
147
		complementFieldset = new FieldSet();
148
		complementFieldset.setHeading("Informations complémentaires");
149
		complementFieldset.setCollapsible(true);
150
		complementFieldset.setLayout(layout);
151
 
152
		motsClesChp = new TextField<String>();
153
		motsClesChp.setFieldLabel("Mots Clés");
154
 
155
		complementFieldset.add(motsClesChp);
156
 
157
		citationChp = new TextField<String>();
158
		citationChp.setFieldLabel("Citation");
159
 
160
		complementFieldset.add(citationChp);
161
 
162
		licenceChp = new TextField<String>();
163
		licenceChp.setFieldLabel("Licence");
164
 
165
		complementFieldset.add(licenceChp);
166
 
167
		markPublicChp = new CheckBox();
168
		markPublicChp.setFieldLabel("Public");
169
 
170
		complementFieldset.add(markPublicChp);
171
	}
172
 
173
	private void creerZoneIndexation() {
174
		FormLayout layout = new FormLayout();
175
		layout.setLabelWidth(100);
176
 
177
		// Fieldset Edition
178
		indexationFieldset = new FieldSet();
179
		indexationFieldset.setHeading("Indexation");
180
		indexationFieldset.setCollapsible(true);
181
		indexationFieldset.setLayout(layout);
182
 
183
		indexationHeureChp = new TextField<String>();
184
		indexationHeureChp.setFieldLabel("Heure d'indexation");
185
 
186
		indexationFieldset.add(indexationHeureChp, new FormData(80, 0));
187
 
188
		// liste 1072
189
		indexationDureeChp = new TextField<String>();
190
		indexationDureeChp.setFieldLabel("Durée d'indexation");
191
 
192
		indexationFieldset.add(indexationDureeChp, new FormData(80, 0));
193
 
194
		// liste 1073
195
		indexationFrequenceChp = new TextField<String>();
196
		indexationFrequenceChp.setFieldLabel("Fréquence d'indexation");
197
 
198
		indexationFieldset.add(indexationFrequenceChp, new FormData(50, 0));
199
 
200
	}
201
 
202
	public void rafraichir(Object nouvellesDonnees) {
203
		if (nouvellesDonnees instanceof Projet) {
204
			// Si on a reçu les details d'une projet
205
			rafraichirProjet((Projet) nouvellesDonnees);
206
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
207
		}
208
 
209
		if (etreValide()) {
210
			initialiserValidation();
211
			repandreRafraichissement();
212
			controlerFermetureApresRafraichissement();
213
		}
214
	}
215
 
216
	private void rafraichirProjet(Projet proj) {
217
		projet = proj;
218
		peuplerFormulaire();
219
	}
220
 
221
	private Boolean etreValide() {
222
		Boolean valide = false;
223
		GWT.log("formulaire"+formulaireValideOk+" - Projet :"+projetValideOk, null);
224
		if (formulaireValideOk && projetValideOk) {
225
			valide = true;
226
		}
227
		return valide;
228
	}
229
 
230
	private void initialiserValidation() {
231
		formulaireValideOk = false;
232
		projetValideOk = false;
233
	}
234
 
235
	private void repandreRafraichissement() {
236
		if (vueExterneARafraichirApresValidation != null) {
237
			String type = "projet_modifiee";
238
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
239
				type = "projet_ajoutee";
240
			}
241
			Information info = new Information(type);
242
			info.setDonnee(0, projet);
243
			vueExterneARafraichirApresValidation.rafraichir(info);
244
		}
245
	}
246
 
247
	public boolean soumettreFormulaire() {
248
		formulaireValideOk = verifierFormulaire();
249
		GWT.log("Form?"+formulaireValideOk, null);
250
		if (formulaireValideOk) {
251
			Projet projetCollecte = collecterProjet();
252
			if (projetCollecte != null) {
253
				GWT.log("Info collectée ? ok", null);
254
				if (mode.equals(Formulaire.MODE_AJOUTER)) {
255
					mediateur.ajouterProjet(this, projetCollecte);
256
				} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
257
					mediateur.modifierProjet(this, projetCollecte);
258
				}
259
			}
260
		}
261
		return formulaireValideOk;
262
	}
263
 
264
	protected boolean verifierFormulaire() {
265
		boolean valide = true;
266
		ArrayList<String> messages = new ArrayList<String>();
267
 
268
		String titre = nomChp.getValue();
269
		if (titre == null || titre.equals("")) {
270
			messages.add("Veuillez saisir le nom du projet !");
271
		}
272
 
273
		String uri = urlChp.getValue();
274
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
275
			messages.add("L'URL saisie n'est pas valide !");
276
		}
277
 
278
		if (messages.size() != 0) {
279
			String[] tableauDeMessages = {};
280
			tableauDeMessages = messages.toArray(tableauDeMessages);
281
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
282
			valide = false;
283
		}
284
		return valide;
285
	}
286
 
287
	private void peuplerFormulaire() {
288
 
289
	}
290
 
291
	private Projet collecterProjet() {
292
		Projet projetARetourner = null;
293
		Projet projetCollectee = (Projet) projet.cloner(new Projet());
294
 
295
		// TODO : collecter le reste des champs
296
 
297
		if (!projetCollectee.comparer(projet)) {
298
			projetARetourner = projet = projetCollectee;
299
		}
300
 
301
		return projetARetourner;
302
	}
303
 
304
	protected void reinitialiserFormulaire() {
305
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
306
			mediateur.afficherFormProjet(projet.getId());
307
		} else {
308
			mediateur.afficherFormProjet(null);
309
		}
310
	}
311
 
312
	@Override
313
	protected SelectionListener<ButtonEvent> creerEcouteurValidation() {
314
		SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
315
			@Override
316
			public void componentSelected(ButtonEvent ce) {
317
				String code = ((Button) ce.getComponent()).getData("code");
318
				if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
319
					soumettreFormulaire();
320
					clicBoutonvalidation = true;
321
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
322
					soumettreFormulaire();
323
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
324
					mediateur.clicMenu(menuIdCourant);
325
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
326
					reinitialiserFormulaire();
327
				}
328
			}
329
		};
330
 
331
		return ecouteur;
332
	}
333
 
334
}