Subversion Repositories eFlore/Applications.coel

Rev

Rev 1657 | Rev 1687 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
935 jpm 1
package org.tela_botanica.client.vues.personne;
127 gduche 2
 
3
import java.util.ArrayList;
1657 aurelien 4
import java.util.Iterator;
127 gduche 5
import java.util.List;
6
 
670 gduche 7
 
127 gduche 8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.RegistreId;
1633 aurelien 10
import org.tela_botanica.client.composants.ChampFiltreRecherche;
1239 cyprien 11
import org.tela_botanica.client.composants.InfoLogger;
512 gduche 12
import org.tela_botanica.client.images.Images;
127 gduche 13
import org.tela_botanica.client.interfaces.Rafraichissable;
353 gduche 14
import org.tela_botanica.client.modeles.Information;
617 gduche 15
import org.tela_botanica.client.modeles.Utilisateur;
935 jpm 16
import org.tela_botanica.client.modeles.personne.Personne;
17
import org.tela_botanica.client.modeles.personne.PersonneListe;
1613 aurelien 18
import org.tela_botanica.client.modeles.projet.Projet;
1367 cyprien 19
import org.tela_botanica.client.util.Debug;
935 jpm 20
import org.tela_botanica.client.vues.BarrePaginationVue;
617 gduche 21
 
127 gduche 22
import com.extjs.gxt.ui.client.Registry;
377 gduche 23
import com.extjs.gxt.ui.client.Style.SortDir;
1657 aurelien 24
import com.extjs.gxt.ui.client.data.ModelComparer;
566 jp_milcent 25
import com.extjs.gxt.ui.client.event.BaseEvent;
489 gduche 26
import com.extjs.gxt.ui.client.event.ButtonEvent;
566 jp_milcent 27
import com.extjs.gxt.ui.client.event.Events;
28
import com.extjs.gxt.ui.client.event.Listener;
127 gduche 29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
32
import com.extjs.gxt.ui.client.store.ListStore;
1657 aurelien 33
import com.extjs.gxt.ui.client.store.Store;
34
import com.extjs.gxt.ui.client.store.StoreSorter;
127 gduche 35
import com.extjs.gxt.ui.client.widget.ContentPanel;
489 gduche 36
import com.extjs.gxt.ui.client.widget.button.Button;
512 gduche 37
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
38
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
39
import com.extjs.gxt.ui.client.widget.grid.Grid;
40
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
127 gduche 41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
42
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
278 jp_milcent 43
import com.google.gwt.core.client.GWT;
1630 aurelien 44
import com.google.gwt.i18n.client.Constants;
127 gduche 45
 
436 gduche 46
public class PersonneListeVue extends ContentPanel implements Rafraichissable {
127 gduche 47
 
278 jp_milcent 48
	private Mediateur mediateur = null ;
512 gduche 49
 
50
	private Grid<Personne> grille = null;
865 jpm 51
	private ListStore<Personne> store = null;
1633 aurelien 52
 
53
	private ChampFiltreRecherche champFiltreRecherche = null;
915 jpm 54
	private BarrePaginationVue pagination = null;
1633 aurelien 55
 
915 jpm 56
	private ColumnModel modeleColonnes = null;
57
	private Button ajouter = null;
58
	private Button modifier = null;
59
	private Button supprimer = null;
258 gduche 60
 
1613 aurelien 61
	private int indexElementSelectionne = 0;
62
	private Personne personneSelectionnee = null;
63
 
436 gduche 64
	public PersonneListeVue() {
278 jp_milcent 65
		mediateur = Registry.get(RegistreId.MEDIATEUR);
1630 aurelien 66
		Constants i18nC = mediateur.i18nC;
127 gduche 67
 
1680 raphael 68
		setHeadingHtml(Mediateur.i18nC.personneListeLabel());
566 jp_milcent 69
		setLayout(new FitLayout());
562 gduche 70
 
127 gduche 71
		//Définition de la barre d'outil
72
		ToolBar toolBar = new ToolBar();
915 jpm 73
		ajouter = new Button(Mediateur.i18nC.ajouter());
512 gduche 74
		ajouter.setIcon(Images.ICONES.ajouter());
489 gduche 75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {
76
			public void componentSelected(ButtonEvent ce) {
278 jp_milcent 77
				mediateur.clicAjouterPersonne();
127 gduche 78
			}
79
		});
1630 aurelien 80
		ajouter.setToolTip(mediateur.i18nC.indicationCreerUneFiche()+" "+mediateur.i18nC.collectionSingulier());
127 gduche 81
		toolBar.add(ajouter);
82
 
865 jpm 83
		modifier = new Button(Mediateur.i18nC.modifier());
512 gduche 84
		modifier.setIcon(Images.ICONES.formModifier());
489 gduche 85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {
86
			public void componentSelected(ButtonEvent ce) {
915 jpm 87
				mediateur.clicModifierPersonne(grille.getSelectionModel().getSelectedItems());
217 aurelien 88
			}
89
		});
1630 aurelien 90
		modifier.setToolTip(mediateur.i18nC.indicationModifierUneFiche());
127 gduche 91
		toolBar.add(modifier);
92
 
865 jpm 93
		supprimer = new Button(Mediateur.i18nC.supprimer());
915 jpm 94
		supprimer.setIcon(Images.ICONES.supprimer());
489 gduche 95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {
96
			public void componentSelected(ButtonEvent ce) {
915 jpm 97
				clicSupprimerPersonne(grille.getSelectionModel().getSelectedItems());
217 aurelien 98
			}
99
		});
1630 aurelien 100
		supprimer.setToolTip(mediateur.i18nC.indicationSupprimerUneFiche());
127 gduche 101
		toolBar.add(supprimer);
102
		setTopComponent(toolBar);
566 jp_milcent 103
 
104
		// Définition des colomnes de la grille:
512 gduche 105
		List<ColumnConfig> lstColumns = new ArrayList<ColumnConfig>();
677 gduche 106
		lstColumns.add(new ColumnConfig("id_personne", "Id", 45));
107
		lstColumns.add(new ColumnConfig("nom", "Nom", 100));
108
		lstColumns.add(new ColumnConfig("prenom", "Prénom", 100));
109
		lstColumns.add(new ColumnConfig("fmt_nom_complet", "Nom Complet", 200));
110
		lstColumns.add(new ColumnConfig("code_postal", "Code postal", 100));
111
		lstColumns.add(new ColumnConfig("ville", "Ville", 100));
947 gduche 112
		lstColumns.add(new ColumnConfig("_courriel_princ_", "Courriel", 200));
677 gduche 113
 
114
		lstColumns.get(0).setHidden(true);
115
		lstColumns.get(1).setHidden(true);
116
		lstColumns.get(2).setHidden(true);
117
 
563 gduche 118
		modeleColonnes = new ColumnModel(lstColumns);
566 jp_milcent 119
 
120
		// Définition de la grille
512 gduche 121
		GridSelectionModel<Personne> gsmSelectionGrille = new GridSelectionModel<Personne>();
122
		gsmSelectionGrille.addSelectionChangedListener(new SelectionChangedListener<Personne>() {
520 gduche 123
			public void selectionChanged(SelectionChangedEvent<Personne> event) {
1613 aurelien 124
				personneSelectionnee = (Personne) event.getSelectedItem();
125
				indexElementSelectionne = store.indexOf(personneSelectionnee);
915 jpm 126
				clicListe(personneSelectionnee);
520 gduche 127
			}
150 gduche 128
		});
287 gduche 129
 
865 jpm 130
		store = new ListStore<Personne>();
1657 aurelien 131
		store.sort("nom", SortDir.ASC);
865 jpm 132
 
133
		grille = new Grid<Personne>(store, modeleColonnes);
512 gduche 134
		grille.setSelectionModel(gsmSelectionGrille);
566 jp_milcent 135
		grille.setWidth("100%");
512 gduche 136
		grille.setAutoExpandColumn("fmt_nom_complet");
566 jp_milcent 137
		grille.getView().setAutoFill(true);
138
		grille.getView().setForceFit(true);
139
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
140
			public void handleEvent(BaseEvent be) {
1657 aurelien 141
				grille.getStore().sort("nom", SortDir.ASC);
566 jp_milcent 142
				grille.getSelectionModel().select(0, false);
143
			}
144
		});
670 gduche 145
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
146
			public void handleEvent(BaseEvent be) {
147
				modifier.fireEvent(Events.Select);
148
			}
149
		});
562 gduche 150
		add(grille);
512 gduche 151
 
1633 aurelien 152
		PersonneListe personneListe = new PersonneListe();
153
		champFiltreRecherche = new ChampFiltreRecherche(mediateur, toolBar, personneListe);
566 jp_milcent 154
		// Définition de la barre de pagination
1633 aurelien 155
		pagination = new BarrePaginationVue(personneListe, mediateur);
562 gduche 156
		setBottomComponent(pagination);
127 gduche 157
	}
158
 
150 gduche 159
	private void clicListe(Personne personne) {
865 jpm 160
		if (personne != null && store.getCount() > 0) {
161
			mediateur.clicListePersonne(personne);
162
		}
127 gduche 163
	}
915 jpm 164
 
165
	private void clicSupprimerPersonne(List<Personne> personnesASupprimer) {
166
		if (store.getCount() > 0) {
167
			mediateur.clicSupprimerPersonne(this, personnesASupprimer);
168
		}
169
	}
170
 
617 gduche 171
	private void gererEtatActivationBouton()	{
915 jpm 172
		int nbreElementDuMagazin = store.getCount();
173
		ajouter.enable();
174
		if (nbreElementDuMagazin == 0) {
175
			supprimer.disable();
176
			modifier.disable();
177
		} else if (nbreElementDuMagazin > 0) {
178
			modifier.enable();
179
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
180
				supprimer.enable();
181
			}
617 gduche 182
		}
183
	}
184
 
353 gduche 185
	public void rafraichir(Object nouvellesDonnees) {
1367 cyprien 186
 
353 gduche 187
		if (nouvellesDonnees instanceof PersonneListe) {
188
			PersonneListe listePersonnes = (PersonneListe) nouvellesDonnees;
127 gduche 189
 
1657 aurelien 190
			// la grille de gxt est case sensitive, on harmonise donc tous les noms en majuscule et sans espaces
191
			// au début et à la fin  afin de pouvoir trier correctement
192
			// (la colonne nom ne sert qu'au tri et n'est pas affichée)
193
			for (Iterator<Personne> iterator = listePersonnes.toList().iterator(); iterator.hasNext();) {
194
				 Personne personne =  iterator.next();
195
				 personne.setNom(personne.getNom().toUpperCase().trim());
196
			}
197
 
1633 aurelien 198
			champFiltreRecherche.setListePaginable(listePersonnes);
596 gduche 199
			pagination.setlistePaginable(listePersonnes);
200
			pagination.rafraichir(listePersonnes.getPageTable());
201
 
567 jp_milcent 202
			if (listePersonnes != null) {
203
				List<Personne> liste = (List<Personne>) listePersonnes.toList();
915 jpm 204
				store.removeAll();
596 gduche 205
				store.add(liste);
1657 aurelien 206
				store.sort("nom", SortDir.ASC);
567 jp_milcent 207
				mediateur.actualiserPanneauCentral();
649 gduche 208
				grille.fireEvent(Events.ViewReady);
567 jp_milcent 209
			}
417 gduche 210
		} else if (nouvellesDonnees instanceof Information)	{
211
			Information info = (Information) nouvellesDonnees;
1613 aurelien 212
			if (info.getType().equals("maj_utilisateur")) {
213
				gererEtatActivationBouton();
214
			} else if(info.getType().equals("personne_modifiee")) {
215
				if(personneSelectionnee != null) {
216
					store.remove(indexElementSelectionne);
217
					personneSelectionnee = null;
218
				}
219
				Personne personneModifiee = (Personne)info.getDonnee(0);
220
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
221
				store.remove(personneModifiee);
222
				store.insert(personneModifiee, indexElementSelectionne);
1645 aurelien 223
				personneSelectionnee = personneModifiee;
224
				int indexElementSelectionne = store.indexOf(personneSelectionnee);
225
				grille.getSelectionModel().select(indexElementSelectionne, false);
226
				grille.getView().focusRow(indexElementSelectionne);
227
				clicListe(personneSelectionnee);
1613 aurelien 228
			} else if (info.getType().equals("suppression_personne")) 	{
1239 cyprien 229
				InfoLogger.display("Suppression de personne", info.getMessages().toString());
658 gduche 230
				pagination.getlistePaginable().recharger();
915 jpm 231
				gererEtatActivationBouton();
617 gduche 232
			} else if (info.getType().equals("maj_utilisateur"))	{
233
				gererEtatActivationBouton();
234
			} else {
1239 cyprien 235
				InfoLogger.display("Erreur", info.getMessages().toString(), true);
361 jp_milcent 236
			}
237
		} else {
865 jpm 238
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
127 gduche 239
		}
596 gduche 240
 
278 jp_milcent 241
		layout();
127 gduche 242
	}
243
}
189 gduche 244
 
245
 
246
 
247
 
248
 
249