Subversion Repositories eFlore/Applications.coel

Rev

Rev 219 | Rev 229 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
219 aurelien 1
package org.tela_botanica.client.vues;
2
 
227 aurelien 3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.Set;
6
 
219 aurelien 7
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.RegistreId;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
227 aurelien 10
import org.tela_botanica.client.modeles.PersonneListe;
219 aurelien 11
import org.tela_botanica.client.modeles.Publication;
12
import org.tela_botanica.client.modeles.Structure;
227 aurelien 13
import org.tela_botanica.client.modeles.StructureListe;
219 aurelien 14
 
15
import com.extjs.gxt.ui.client.Registry;
16
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
17
import com.extjs.gxt.ui.client.event.ComponentEvent;
18
import com.extjs.gxt.ui.client.event.SelectionListener;
19
import com.extjs.gxt.ui.client.store.ListStore;
227 aurelien 20
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
219 aurelien 21
import com.extjs.gxt.ui.client.widget.LayoutContainer;
22
import com.extjs.gxt.ui.client.widget.button.Button;
23
import com.extjs.gxt.ui.client.widget.form.ComboBox;
24
import com.extjs.gxt.ui.client.widget.form.DateField;
25
import com.extjs.gxt.ui.client.widget.form.FieldSet;
26
import com.extjs.gxt.ui.client.widget.form.FormPanel;
27
import com.extjs.gxt.ui.client.widget.form.TextField;
28
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
29
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
30
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
31
import com.extjs.gxt.ui.client.widget.layout.FormData;
32
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
227 aurelien 33
import com.google.gwt.user.client.Window;
34
import com.google.gwt.user.client.ui.HTML;
219 aurelien 35
 
36
public class FormPublicationVue extends LayoutContainer implements Rafraichissable {
37
 
38
	private Mediateur mediateur = null;
39
 
40
	FormPanel panel = null ;
41
 
227 aurelien 42
	private String idStructureEdition = "" ;
219 aurelien 43
 
227 aurelien 44
	private ArrayList<TextField<String>> listeAuteurs = null;
45
 
219 aurelien 46
	private TextField<String> nomArticle = null;
47
	private TextField<String> nomPub = null;
48
	private TextField<String> intituleCollPub = null;
49
	private TextField<String> uriPub = null;
50
 
51
	private ComboBox<Structure> comboListeEditeurs = null;
52
	private ListStore<Structure> storeEditeurs = null;
53
	private DateField datePub = null;
54
	private TextField<String> tomPub = null;
55
	private TextField<String> fasciculePub = null;
56
	private TextField<String> pagesPub = null;
57
	private String mode = "AJOUT";
58
 
227 aurelien 59
	FieldSet fieldSetAuteurs = null ;
60
 
219 aurelien 61
 
62
	public FormPublicationVue() {
63
 
64
		setLayout(new FitLayout());
65
		mediateur = Registry.get(RegistreId.MEDIATEUR);
66
 
67
		// Création de la disposition : FIELDSET
68
		FormLayout layoutFieldset = new FormLayout();
69
		layoutFieldset.setLabelWidth(200);
70
		layoutFieldset.setPadding(4);
71
 
72
		//+-----------------------------------------------------------------------------------------------------------+
73
		// Création du panneau Formulaire
74
		panel = new FormPanel();
75
		panel.setFrame(true);
76
		panel.setIconStyle("icone-form-ajouter");
77
		panel.setCollapsible(false);
78
		panel.setHeading("Ajout d'une publication");
79
		panel.setButtonAlign(HorizontalAlignment.CENTER);
80
		panel.setLayout(new FlowLayout());
81
 
82
		add(panel);
83
 
84
		// Fieldset Auteur
227 aurelien 85
		fieldSetAuteurs = new FieldSet();
219 aurelien 86
		fieldSetAuteurs.setHeading("Auteur(s)");
87
		fieldSetAuteurs.setCollapsible(true);
88
		fieldSetAuteurs.setLayout(layoutFieldset);
89
 
90
		panel.add(fieldSetAuteurs);
91
 
227 aurelien 92
		genererChampsAuteur("",false);
219 aurelien 93
 
94
		// Création de la disposition : FIELDSET
95
		FormLayout layoutFieldset2 = new FormLayout();
96
		layoutFieldset.setLabelWidth(200);
97
		layoutFieldset.setPadding(4);
98
 
99
		// Fieldset Infos Générales
100
		FieldSet fieldSetInfosGen = new FieldSet();
101
		fieldSetInfosGen.setHeading("Informations générales");
102
		fieldSetInfosGen.setCollapsible(true);
103
		fieldSetInfosGen.setLayout(layoutFieldset2);
104
 
105
 
106
		panel.add(fieldSetInfosGen);
107
 
108
		nomArticle = new TextField<String>();
109
		nomArticle.setName("cpu");
110
		nomArticle.setFieldLabel("Titre de l'article ou de l'ouvrage");
111
 
112
		nomPub = new TextField<String>();
113
		nomPub.setFieldLabel("Intitulé complet de la publication");
114
 
115
		intituleCollPub = new TextField<String>();
116
		intituleCollPub.setFieldLabel("Intitulé de la collection ou de la revue");
117
 
118
		uriPub = new TextField<String>();
119
		uriPub.setFieldLabel("URI de la publication");
120
 
121
		fieldSetInfosGen.add(nomArticle);
122
		fieldSetInfosGen.add(nomPub);
123
		fieldSetInfosGen.add(intituleCollPub);
124
		fieldSetInfosGen.add(uriPub);
125
 
126
		// Création de la disposition : FIELDSET
127
		FormLayout layoutFieldset3 = new FormLayout();
128
		layoutFieldset.setPadding(4);
129
 
130
		// Fieldset Edition
131
		FieldSet fieldSetEdition = new FieldSet();
132
		fieldSetEdition.setHeading("Edition");
133
		fieldSetEdition.setCollapsible(true);
134
		fieldSetEdition.setLayout(layoutFieldset3);
135
 
136
		panel.add(fieldSetEdition);
137
 
138
		storeEditeurs = new ListStore<Structure>();
139
		comboListeEditeurs = new ComboBox<Structure>();
140
		comboListeEditeurs.setEmptyText("Sélectionner un editeur...");
141
		comboListeEditeurs.setFieldLabel("Editeur de la publication");
142
		comboListeEditeurs.setDisplayField("nom");
143
		comboListeEditeurs.setStore(storeEditeurs);
144
		comboListeEditeurs.setEditable(true);
145
		comboListeEditeurs.setTypeAhead(true);
227 aurelien 146
		comboListeEditeurs.setTriggerAction(TriggerAction.QUERY);
219 aurelien 147
 
148
		datePub = new DateField();
149
		datePub.setFieldLabel("Date de publication");
150
 
151
		tomPub = new TextField<String>();
152
		tomPub.setFieldLabel("Tome");
153
 
154
		fasciculePub = new TextField<String>();
155
		fasciculePub.setFieldLabel("Fascicule");
156
 
157
		pagesPub = new TextField<String>();
158
		pagesPub.setFieldLabel("Pages");
159
 
227 aurelien 160
		fieldSetEdition.add(comboListeEditeurs,new FormData(500,20));
219 aurelien 161
		fieldSetEdition.add(datePub, new FormData(75,20));
162
		fieldSetEdition.add(tomPub);
163
		fieldSetEdition.add(fasciculePub);
164
		fieldSetEdition.add(pagesPub, new FormData(100,20));
165
 
166
		// Ajout des boutons au panneau formulaire
167
		Button annulerBtn = new Button("Annuler");
168
		annulerBtn.addSelectionListener(new SelectionListener<ComponentEvent>() {
169
 
170
			@Override
171
			public void componentSelected(ComponentEvent ce) {
172
				mediateur.clicMenu("Publications");
173
			}
174
 
175
		});
176
		panel.addButton(annulerBtn);
177
		Button validerBtn = new Button("Valider");
178
		validerBtn.addSelectionListener(new SelectionListener<ComponentEvent>() {
179
 
180
			@Override
181
			public void componentSelected(ComponentEvent ce) {
182
				soumettreFormulaire();
183
			}
184
 
185
		});
186
		panel.addButton(validerBtn);
187
 
188
	}
189
 
190
	public void rafraichir(Object nouvelleDonnees) {
227 aurelien 191
 
192
		// Si on a reçu les details d'une publication
219 aurelien 193
		if(nouvelleDonnees instanceof Publication) {
227 aurelien 194
 
195
			mode = "MODIF" ;
196
 
219 aurelien 197
			Publication publi = (Publication)nouvelleDonnees;
198
 
227 aurelien 199
			genererChampsAuteur(publi.getAuteur(),false);
200
 
219 aurelien 201
			nomArticle.setValue(publi.getTitre());
202
			nomPub.setValue(publi.getNomComplet());
203
			intituleCollPub.setValue(publi.getCollection());
204
			uriPub.setValue(publi.getURI());
205
			datePub.setRawValue(publi.getDateParution());
206
			tomPub.setValue(publi.getIndicationNvt());
207
			fasciculePub.setValue(publi.getFascicule());
208
			pagesPub.setValue(publi.getPages());
209
 
227 aurelien 210
			idStructureEdition = publi.getEditeur();
211
 
212
			mediateur.clicObtenirListeEditeurs(this);
213
 
219 aurelien 214
			panel.setHeading("Modification d'une publication");
227 aurelien 215
		}
216
 
217
		// Si on a reçu une liste des editeurs
218
		if(nouvelleDonnees instanceof StructureListe) {
219
			storeEditeurs.removeAll();
220
			StructureListe listeStructure = (StructureListe)nouvelleDonnees;
221
			Set<String> listeStructureSet = listeStructure.keySet();
222
			for(Iterator<String> it = listeStructureSet.iterator() ; it.hasNext() ;) {
223
				storeEditeurs.add(listeStructure.get(it.next()));
224
			}
219 aurelien 225
 
227 aurelien 226
			if(mode.equals("MODIF")) {
227
				//Window.alert(""+idStructureEdition);
228
				comboListeEditeurs.setValue(listeStructure.get(idStructureEdition));
229
			}
230
			comboListeEditeurs.expand();
219 aurelien 231
		}
232
	}
233
 
234
	private void soumettreFormulaire() {
235
 
227 aurelien 236
		String auteur = "" ;
237
		for(int i = 0 ; i < listeAuteurs.size() ; i++) {
238
			auteur += listeAuteurs.get(i).getValue();
239
			if(i != listeAuteurs.size() -1) {
240
				auteur += "|";
241
			}
242
		}
219 aurelien 243
		String nomArt = nomArticle.getValue();
244
		String pub = nomPub.getValue();
245
		String collPub = intituleCollPub.getValue();
246
		String uri = uriPub.getValue();
247
		String editeur = comboListeEditeurs.getRawValue();
248
		String datePar = datePub.getRawValue();
249
		String tome = tomPub.getValue();
250
		String fascicule = fasciculePub.getValue();
251
		String pages = pagesPub.getValue();
252
 
253
		Publication publi = new Publication(pub,uri,auteur,collPub,nomArt,editeur,datePar,tome,fascicule,pages);
254
 
227 aurelien 255
		Window.alert(auteur);
256
 
219 aurelien 257
		if (mode.equals("AJOUT")) {
258
			mediateur.ajouterPublication(this, publi);
259
		} else if (mode.equals("MODIF")) {
260
			mediateur.modifierPublication(this, publi);
261
		}
262
	}
227 aurelien 263
 
264
	private void genererChampsAuteur(String auteursStr, boolean ajouter) {
265
 
266
		String[] auteurs = auteursStr.split("\\|");
267
		LayoutContainer conteneurChamps = new LayoutContainer();
268
 
269
		Window.alert("longueur "+auteurs.length);
270
 
271
		if(auteurs.length != 0) {
272
			listeAuteurs = new ArrayList<TextField<String>>(auteurs.length);
273
		}
274
		else{
275
			listeAuteurs = new ArrayList<TextField<String>>(1);
276
			ajouter = true ;
277
		}
278
 
279
		fieldSetAuteurs.removeAll();
280
 
281
		//final Label labelAuteur = new Label("Auteur de la publication :");
282
		final HTML labelAuteur = new HTML("<label class=\"x-form-item-label x-formulaire-auteur-label\" style=\"width: 100px;\">Auteur(s) de l'article ou de l'ouvrage:</label>");
283
		fieldSetAuteurs.add(labelAuteur);
284
		int i = 0;
285
 
286
		for(i = 0 ; i < auteurs.length ; i++) {
287
			conteneurChamps.add(creerTextFieldEtBouton(auteurs[i]));
288
		}
289
 
290
		if(ajouter) {
291
			conteneurChamps.add(creerTextFieldEtBouton(null));
292
		}
293
 
294
		Button ajoutAuteurBtn = new Button("Ajouter un auteur");
295
		ajoutAuteurBtn.addSelectionListener(new SelectionListener<ComponentEvent>() {
296
 
297
			@Override
298
			public void componentSelected(ComponentEvent ce) {
299
 
300
				String idsAuteurs = "" ;
301
 
302
				for(int i = 0 ; i < listeAuteurs.size() ; i++) {
303
 
304
					String valeurChampAuteur = listeAuteurs.get(i).getValue();
305
					if(valeurChampAuteur != null)
306
					{
307
						idsAuteurs += valeurChampAuteur ;
308
					}
309
					else {
310
						idsAuteurs += "" ;
311
					}
312
					if(i != 0 && i != listeAuteurs.size() - 1) {
313
						idsAuteurs+= "|";
314
					}
315
				}
316
				genererChampsAuteur(idsAuteurs,true);
317
			}
318
 
319
		});
320
 
321
		fieldSetAuteurs.add(conteneurChamps);
322
		fieldSetAuteurs.add(ajoutAuteurBtn);
323
		fieldSetAuteurs.layout();
324
	}
325
 
326
	public HorizontalPanel creerTextFieldEtBouton(String valeurDefaut) {
327
 
328
		HorizontalPanel p = new HorizontalPanel() ;
329
 
330
		// Création de la disposition : FIELDSET
331
		FormLayout layoutPanelTF = new FormLayout();
332
		p.setLayout(layoutPanelTF);
333
 
334
		final TextField<String> tf = new TextField<String>() ;
335
		if(valeurDefaut != null) {
336
			tf.setValue(valeurDefaut);
337
		}
338
		tf.setSize(200, 20);
339
		listeAuteurs.add(tf);
340
 
341
		Button supp = new Button("-");
342
		supp.addSelectionListener(new SelectionListener<ComponentEvent>() {
343
			@Override
344
			public void componentSelected(ComponentEvent ce) {
345
 
346
				String idsAuteurs = "" ;
347
				listeAuteurs.remove(tf);
348
 
349
				for(int i = 0 ; i < listeAuteurs.size() ; i++) {
350
 
351
					String valeurChampAuteur = listeAuteurs.get(i).getValue();
352
					if(valeurChampAuteur != null & !valeurChampAuteur.equals(""))
353
					{
354
						idsAuteurs += valeurChampAuteur ;
355
					}
356
					if(i != listeAuteurs.size() - 1) {
357
						idsAuteurs+= "|";
358
					}
359
				}
360
				genererChampsAuteur(idsAuteurs,false);
361
			}
362
 
363
		});
364
		p.add(tf);
365
		p.add(supp);
366
		fieldSetAuteurs.add(p);
367
 
368
		return p ;
369
	}
219 aurelien 370
}