Subversion Repositories eFlore/Applications.coel

Rev

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