Subversion Repositories eFlore/Applications.coel

Rev

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