Subversion Repositories eFlore/Applications.coel

Rev

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