Subversion Repositories eFlore/Applications.coel

Rev

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