Subversion Repositories eFlore/Applications.coel

Rev

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