Subversion Repositories eFlore/Applications.coel

Rev

Rev 1687 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1687 Rev 1762
1
package org.tela_botanica.client.vues.structure;
1
package org.tela_botanica.client.vues.structure;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.List;
4
import java.util.List;
5
 
5
 
6
import org.tela_botanica.client.Mediateur;
6
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.RegistreId;
7
import org.tela_botanica.client.RegistreId;
8
import org.tela_botanica.client.composants.ChampFiltreRecherche;
8
import org.tela_botanica.client.composants.ChampFiltreRecherche;
9
import org.tela_botanica.client.composants.InfoLogger;
9
import org.tela_botanica.client.composants.InfoLogger;
10
import org.tela_botanica.client.i18n.Constantes;
10
import org.tela_botanica.client.i18n.Constantes;
11
import org.tela_botanica.client.images.Images;
11
import org.tela_botanica.client.images.Images;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
13
import org.tela_botanica.client.modeles.Information;
13
import org.tela_botanica.client.modeles.Information;
14
import org.tela_botanica.client.modeles.Utilisateur;
14
import org.tela_botanica.client.modeles.Utilisateur;
15
import org.tela_botanica.client.modeles.personne.Personne;
15
import org.tela_botanica.client.modeles.personne.Personne;
-
 
16
import org.tela_botanica.client.modeles.personne.PersonneAsyncDao;
16
import org.tela_botanica.client.modeles.publication.Publication;
17
import org.tela_botanica.client.modeles.publication.Publication;
17
import org.tela_botanica.client.modeles.publication.PublicationListe;
18
import org.tela_botanica.client.modeles.publication.PublicationListe;
18
import org.tela_botanica.client.modeles.structure.Structure;
19
import org.tela_botanica.client.modeles.structure.Structure;
-
 
20
import org.tela_botanica.client.modeles.structure.StructureAsyncDao;
19
import org.tela_botanica.client.modeles.structure.StructureListe;
21
import org.tela_botanica.client.modeles.structure.StructureListe;
20
import org.tela_botanica.client.util.Debug;
22
import org.tela_botanica.client.util.Debug;
21
import org.tela_botanica.client.vues.BarrePaginationVue;
23
import org.tela_botanica.client.vues.BarrePaginationVue;
22
 
24
 
23
import com.extjs.gxt.ui.client.Registry;
25
import com.extjs.gxt.ui.client.Registry;
24
import com.extjs.gxt.ui.client.Style.SortDir;
26
import com.extjs.gxt.ui.client.Style.SortDir;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
27
import com.extjs.gxt.ui.client.event.BaseEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
28
import com.extjs.gxt.ui.client.event.ButtonEvent;
27
import com.extjs.gxt.ui.client.event.Events;
29
import com.extjs.gxt.ui.client.event.Events;
-
 
30
import com.extjs.gxt.ui.client.event.GridEvent;
28
import com.extjs.gxt.ui.client.event.Listener;
31
import com.extjs.gxt.ui.client.event.Listener;
29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
32
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
33
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
34
import com.extjs.gxt.ui.client.event.SelectionListener;
32
import com.extjs.gxt.ui.client.store.ListStore;
35
import com.extjs.gxt.ui.client.store.ListStore;
33
import com.extjs.gxt.ui.client.widget.ContentPanel;
36
import com.extjs.gxt.ui.client.widget.ContentPanel;
34
import com.extjs.gxt.ui.client.widget.button.Button;
37
import com.extjs.gxt.ui.client.widget.button.Button;
35
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
38
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
36
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
39
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
37
import com.extjs.gxt.ui.client.widget.grid.Grid;
40
import com.extjs.gxt.ui.client.widget.grid.Grid;
38
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
41
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
39
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
42
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
40
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
43
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
41
import com.google.gwt.core.client.GWT;
44
import com.google.gwt.core.client.GWT;
42
import com.google.gwt.user.client.Window;
45
import com.google.gwt.user.client.Window;
43
 
46
 
44
public class StructureListeVue extends ContentPanel implements Rafraichissable {
47
public class StructureListeVue extends ContentPanel implements Rafraichissable {
45
	
48
	
46
	private Mediateur mediateur = null;
49
	private Mediateur mediateur = null;
47
	private Constantes i18nC = null;
50
	private Constantes i18nC = null;
48
 
51
 
49
	private Grid<Structure> grille = null;
52
	private Grid<Structure> grille = null;
50
	private ListStore<Structure> store = null;
53
	private ListStore<Structure> store = null;
51
	
54
	
52
	private Button modifier;
55
	private Button modifier;
53
	private Button supprimer;
56
	private Button supprimer;
54
	private Button ajouter;
57
	private Button ajouter;
55
	
58
	
56
	private ChampFiltreRecherche champFiltreRecherche = null;
59
	private ChampFiltreRecherche champFiltreRecherche = null;
57
	private BarrePaginationVue pagination = null;
60
	private BarrePaginationVue pagination = null;
58
	
61
	
59
	private int indexElementSelectionne = 0;
62
	private int indexElementSelectionne = 0;
60
	private Structure structureSelectionnee = null;
63
	private Structure structureSelectionnee = null;
61
 
64
 
62
	public StructureListeVue(Mediateur mediateurCourant) {
65
	public StructureListeVue(Mediateur mediateurCourant) {
63
		mediateur = mediateurCourant;
66
		mediateur = mediateurCourant;
64
		i18nC = mediateur.i18nC;
67
		i18nC = mediateur.i18nC;
65
		
68
		
66
		setHeadingHtml(i18nC.titreStructureListe());
69
		setHeadingHtml(i18nC.titreStructureListe());
67
		setLayout(new FitLayout());
70
		setLayout(new FitLayout());
68
		
71
		
69
		ToolBar toolBar = new ToolBar();
72
		ToolBar toolBar = new ToolBar();
70
		ajouter = new Button(i18nC.ajouter());
73
		ajouter = new Button(i18nC.ajouter());
71
		ajouter.setIcon(Images.ICONES.ajouter());
74
		ajouter.setIcon(Images.ICONES.ajouter());
72
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
73
			public void componentSelected(ButtonEvent ce) {  
76
			public void componentSelected(ButtonEvent ce) {  
74
				mediateur.clicAjouterStructure();
77
				mediateur.clicAjouterStructure();
75
			}
78
			}
76
		});
79
		});
77
		ajouter.setToolTip(i18nC.indicationCreerUneFiche()+" "+i18nC.structureSingulier());
80
		ajouter.setToolTip(i18nC.indicationCreerUneFiche()+" "+i18nC.structureSingulier());
78
		toolBar.add(ajouter);
81
		toolBar.add(ajouter);
79
 
82
 
80
		modifier = new Button(i18nC.modifier());
83
		modifier = new Button(i18nC.modifier());
81
		modifier.setIcon(Images.ICONES.formModifier());
84
		modifier.setIcon(Images.ICONES.formModifier());
82
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {
85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {
83
			public void componentSelected(ButtonEvent ce) {
86
			public void componentSelected(ButtonEvent ce) {
84
				mediateur.clicModifierStructure(grille.getSelectionModel().getSelectedItems());
87
				mediateur.clicModifierStructure(grille.getSelectionModel().getSelectedItems());
85
			}
88
			}
86
		});
89
		});
87
		modifier.setToolTip(i18nC.indicationModifierUneFiche());
90
		modifier.setToolTip(i18nC.indicationModifierUneFiche());
88
		toolBar.add(modifier);
91
		toolBar.add(modifier);
89
		
92
		
90
		supprimer = new Button(i18nC.supprimer());
93
		supprimer = new Button(i18nC.supprimer());
91
		supprimer.setIcon(Images.ICONES.supprimer());
94
		supprimer.setIcon(Images.ICONES.supprimer());
92
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {
95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {
93
			public void componentSelected(ButtonEvent ce) {
96
			public void componentSelected(ButtonEvent ce) {
94
				clicSupprimerStructure(grille.getSelectionModel().getSelectedItems());
97
				clicSupprimerStructure(grille.getSelectionModel().getSelectedItems());
95
			}
98
			}
96
		});
99
		});
97
		supprimer.setToolTip(i18nC.indicationSupprimerUneFiche());
100
		supprimer.setToolTip(i18nC.indicationSupprimerUneFiche());
98
		toolBar.add(supprimer);
101
		toolBar.add(supprimer);
99
 
102
 
100
		setTopComponent(toolBar);
103
		setTopComponent(toolBar);
101
 
104
 
102
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
105
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
103
		colonnes.add(new ColumnConfig("ville", "Ville", 150));
106
		colonnes.add(new ColumnConfig("ville", "Ville", 150));
104
		colonnes.add(new ColumnConfig("nom", "Nom", 450));
107
		colonnes.add(new ColumnConfig("nom", "Nom", 450));
105
		ColumnModel modeleDeColonne = new ColumnModel(colonnes);
108
		ColumnModel modeleDeColonne = new ColumnModel(colonnes);
106
		
109
		
107
		GridSelectionModel<Structure> modeleDeSelection = new GridSelectionModel<Structure>();
110
		GridSelectionModel<Structure> modeleDeSelection = new GridSelectionModel<Structure>();
108
		modeleDeSelection.addSelectionChangedListener(new SelectionChangedListener<Structure>() {
111
		modeleDeSelection.addSelectionChangedListener(new SelectionChangedListener<Structure>() {
109
			public void selectionChanged(SelectionChangedEvent<Structure> event) {
112
			public void selectionChanged(SelectionChangedEvent<Structure> event) {
110
				if((Structure) event.getSelectedItem() != null) {
113
				if((Structure) event.getSelectedItem() != null) {
111
					structureSelectionnee = (Structure) event.getSelectedItem();
114
					structureSelectionnee = (Structure) event.getSelectedItem();
112
					indexElementSelectionne = store.indexOf(structureSelectionnee);
115
					indexElementSelectionne = store.indexOf(structureSelectionnee);
113
					clicListe(structureSelectionnee);
116
					clicListe(structureSelectionnee);
114
				}
117
				}
115
			}
118
			}
116
		});
119
		});
117
		
120
		
118
		store = new ListStore<Structure>();
121
		store = new ListStore<Structure>();
119
		store.sort("ville", SortDir.ASC);
-
 
120
 
122
 
121
		grille = new Grid<Structure>(store, modeleDeColonne);
123
		grille = new Grid<Structure>(store, modeleDeColonne);
122
		grille.setWidth("100%");
124
		grille.setWidth("100%");
123
		grille.setAutoExpandColumn("nom");
125
		grille.setAutoExpandColumn("nom");
124
		grille.getView().setAutoFill(true);
126
		grille.getView().setAutoFill(true);
125
		grille.getView().setForceFit(true);
127
		grille.getView().setForceFit(true);
126
		grille.setSelectionModel(modeleDeSelection);
128
		grille.setSelectionModel(modeleDeSelection);
127
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
129
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
128
			public void handleEvent(BaseEvent be) {
130
			public void handleEvent(BaseEvent be) {
129
				grille.getSelectionModel().select(0, false);
131
				grille.getSelectionModel().select(0, false);
130
			}
132
			}
131
		});
133
		});
132
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>() {
134
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>() {
133
			public void handleEvent(BaseEvent be) {
135
			public void handleEvent(BaseEvent be) {
134
				modifier.fireEvent(Events.Select);
136
				modifier.fireEvent(Events.Select);
135
			}
137
			}
-
 
138
		});
-
 
139
		grille.addListener(Events.SortChange, new Listener<BaseEvent>() {
-
 
140
 
-
 
141
			@Override
-
 
142
			public void handleEvent(BaseEvent be) {
-
 
143
				GridEvent ge = (GridEvent<Structure>) be;
-
 
144
				// TODO rajouter un test sur le sort state pour trier par nom par défaut 
-
 
145
				String tri = ge.getSortInfo().getSortField();
-
 
146
				StructureAsyncDao.tri = Structure.PREFIXE+"_"+tri+" "+ge.getSortInfo().getSortDir().toString();
-
 
147
				pagination.changePage();
-
 
148
			}
136
		});
149
		});
137
		add(grille);
150
		add(grille);
138
		
151
		
139
		StructureListe structureListe = new StructureListe();
152
		StructureListe structureListe = new StructureListe();
140
		champFiltreRecherche = new ChampFiltreRecherche(mediateurCourant, toolBar, structureListe);
153
		champFiltreRecherche = new ChampFiltreRecherche(mediateurCourant, toolBar, structureListe);
141
		// Définition de la barre de pagination
154
		// Définition de la barre de pagination
142
		pagination = new BarrePaginationVue(structureListe, mediateur, champFiltreRecherche);
155
		pagination = new BarrePaginationVue(structureListe, mediateur, champFiltreRecherche);
143
		setBottomComponent(pagination);
156
		setBottomComponent(pagination);
144
	}
157
	}
145
 
158
 
146
	private void clicListe(Structure structure) {
159
	private void clicListe(Structure structure) {
147
		if (structure != null && store.getCount() > 0) {
160
		if (structure != null && store.getCount() > 0) {
148
			mediateur.clicListeStructure(structure);
161
			mediateur.clicListeStructure(structure);
149
		}
162
		}
150
	}
163
	}
151
	
164
	
152
	private void clicSupprimerStructure(List<Structure> structuresASupprimer) {
165
	private void clicSupprimerStructure(List<Structure> structuresASupprimer) {
153
		mediateur.clicSupprimerStructure(this, structuresASupprimer);
166
		mediateur.clicSupprimerStructure(this, structuresASupprimer);
154
	}
167
	}
155
 
168
 
156
	private void gererEtatActivationBouton() {
169
	private void gererEtatActivationBouton() {
157
		int nbreElementDuMagazin = store.getCount();
170
		int nbreElementDuMagazin = store.getCount();
158
		if (nbreElementDuMagazin == 0) {
171
		if (nbreElementDuMagazin == 0) {
159
			supprimer.disable();
172
			supprimer.disable();
160
			modifier.disable();
173
			modifier.disable();
161
		} else if (nbreElementDuMagazin > 0) {
174
		} else if (nbreElementDuMagazin > 0) {
162
			modifier.enable();
175
			modifier.enable();
163
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
176
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
164
				supprimer.enable();
177
				supprimer.enable();
165
			}
178
			}
166
		}
179
		}
167
	}
180
	}
168
	
181
	
169
	public void rafraichir(Object nouvellesDonnees) {
182
	public void rafraichir(Object nouvellesDonnees) {
170
		if (nouvellesDonnees instanceof StructureListe) {
183
		if (nouvellesDonnees instanceof StructureListe) {
171
			StructureListe structures = (StructureListe) nouvellesDonnees;
184
			StructureListe structures = (StructureListe) nouvellesDonnees;
172
			
185
			
173
			champFiltreRecherche.setListePaginable(structures);
186
			champFiltreRecherche.setListePaginable(structures);
174
			pagination.setlistePaginable(structures);
187
			pagination.setlistePaginable(structures);
175
			pagination.rafraichir(structures.getPageTable());
188
			pagination.rafraichir(structures.getPageTable());
176
			
189
			
177
			if (structures != null) {
190
			if (structures != null) {
178
				List<Structure> liste = structures.toList();
191
				List<Structure> liste = structures.toList();
179
				store.removeAll();
192
				store.removeAll();
180
				store.add(liste);
193
				store.add(liste);
181
 
194
 
182
				gererEtatActivationBouton();
195
				gererEtatActivationBouton();
183
				
196
				
184
				mediateur.actualiserPanneauCentral();
197
				mediateur.actualiserPanneauCentral();
185
				grille.fireEvent(Events.ViewReady);
198
				grille.fireEvent(Events.ViewReady);
186
			}
199
			}
187
		} else if (nouvellesDonnees instanceof Information) {
200
		} else if (nouvellesDonnees instanceof Information) {
188
			Information info = (Information) nouvellesDonnees;
201
			Information info = (Information) nouvellesDonnees;
189
			if (info.getType().equals("suppression_structure")) {
202
			if (info.getType().equals("suppression_structure")) {
190
				// Affichage d'un message d'information 
203
				// Affichage d'un message d'information 
191
				InfoLogger.display(i18nC.suppressionStructure(), info.toString().replaceAll("\n", "<br />"));
204
				InfoLogger.display(i18nC.suppressionStructure(), info.toString().replaceAll("\n", "<br />"));
192
				
205
				
193
				List<Structure> selectionStructure = grille.getSelectionModel().getSelectedItems();
206
				List<Structure> selectionStructure = grille.getSelectionModel().getSelectedItems();
194
				
207
				
195
				if (info.toString().replaceAll("\n", "").equals("OK")) {
208
				if (info.toString().replaceAll("\n", "").equals("OK")) {
196
					mediateur.supprimerStructureAPersonne(this, selectionStructure);
209
					mediateur.supprimerStructureAPersonne(this, selectionStructure);
197
				}
210
				}
198
				
211
				
199
				// Suppression des structures sélectionnées de la grille
212
				// Suppression des structures sélectionnées de la grille
200
				final int taille = selectionStructure.size();
213
				final int taille = selectionStructure.size();
201
				for (int i = 0; i < taille; i++) {
214
				for (int i = 0; i < taille; i++) {
202
					store.remove(selectionStructure.get(i));
215
					store.remove(selectionStructure.get(i));
203
				}
216
				}
204
				
217
				
205
				gererEtatActivationBouton();
218
				gererEtatActivationBouton();
206
			} else if(info.getType().equals("structure_modifiee")) {
219
			} else if(info.getType().equals("structure_modifiee")) {
207
				Structure structureModifiee = (Structure)info.getDonnee(0);
220
				Structure structureModifiee = (Structure)info.getDonnee(0);
208
				if(structureSelectionnee != null && structureModifiee != null) {
221
				if(structureSelectionnee != null && structureModifiee != null) {
209
					if(structureSelectionnee.getId().equals(structureModifiee.getId())) {
222
					if(structureSelectionnee.getId().equals(structureModifiee.getId())) {
210
						store.remove(indexElementSelectionne);
223
						store.remove(indexElementSelectionne);
211
					} else {
224
					} else {
212
						structureSelectionnee = null;
225
						structureSelectionnee = null;
213
					}
226
					}
214
					// au cas ou le bouton appliquer aurait été cliqué avant de valider
227
					// au cas ou le bouton appliquer aurait été cliqué avant de valider
215
					store.remove(structureModifiee);
228
					store.remove(structureModifiee);
216
					store.insert(structureModifiee, indexElementSelectionne);
229
					store.insert(structureModifiee, indexElementSelectionne);
217
					structureSelectionnee = structureModifiee;
230
					structureSelectionnee = structureModifiee;
218
					int indexElementSelectionne = store.indexOf(structureSelectionnee);
231
					int indexElementSelectionne = store.indexOf(structureSelectionnee);
219
					grille.getSelectionModel().select(indexElementSelectionne, false);
232
					grille.getSelectionModel().select(indexElementSelectionne, false);
220
					grille.getView().focusRow(indexElementSelectionne);
233
					grille.getView().focusRow(indexElementSelectionne);
221
					clicListe(structureSelectionnee);
234
					clicListe(structureSelectionnee);
222
				}
235
				}
223
			} else if (info.getType().equals("maj_utilisateur")) {
236
			} else if (info.getType().equals("maj_utilisateur")) {
224
				gererEtatActivationBouton();
237
				gererEtatActivationBouton();
225
			} else if (info.getType().equals("suppression_structure_a_personne")) {
238
			} else if (info.getType().equals("suppression_structure_a_personne")) {
226
				// Affichage d'un message d'information 
239
				// Affichage d'un message d'information 
227
				InfoLogger.display(i18nC.suppressionStructureAPersonne(), info.toString().replaceAll("\n", "<br />"));
240
				InfoLogger.display(i18nC.suppressionStructureAPersonne(), info.toString().replaceAll("\n", "<br />"));
228
			}
241
			}
229
		} else {
242
		} else {
230
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
243
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
231
		}
244
		}
232
		layout();
245
		layout();
233
	}
246
	}
234
}
247
}