Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1468 Rev 1513
1
package org.tela_botanica.client.composants;
1
package org.tela_botanica.client.composants;
-
 
2
 
2
 
3
import java.util.HashMap;
3
import java.util.List;
4
import java.util.List;
4
import java.util.Map;
5
import java.util.Map;
5
 
6
 
6
import org.tela_botanica.client.composants.pagination.ChargeurListe;
7
import org.tela_botanica.client.composants.pagination.ChargeurListe;
7
import org.tela_botanica.client.composants.pagination.Proxy;
8
import org.tela_botanica.client.composants.pagination.Proxy;
8
import org.tela_botanica.client.composants.pagination.TransformateurJSONaModelData;
9
import org.tela_botanica.client.composants.pagination.TransformateurJSONaModelData;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.aDonnee;
11
import org.tela_botanica.client.modeles.aDonnee;
11
import org.tela_botanica.client.util.Debug;
12
import org.tela_botanica.client.util.Debug;
12
import org.tela_botanica.client.composants.GrilleParametrable;
13
import org.tela_botanica.client.composants.GrilleParametrable;
13
 
14
 
14
import com.extjs.gxt.ui.client.Style.SortDir;
15
import com.extjs.gxt.ui.client.Style.SortDir;
15
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
16
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
16
import com.extjs.gxt.ui.client.data.LoadEvent;
17
import com.extjs.gxt.ui.client.data.LoadEvent;
17
import com.extjs.gxt.ui.client.data.Loader;
18
import com.extjs.gxt.ui.client.data.Loader;
18
import com.extjs.gxt.ui.client.data.ModelData;
19
import com.extjs.gxt.ui.client.data.ModelData;
19
import com.extjs.gxt.ui.client.data.ModelType;
20
import com.extjs.gxt.ui.client.data.ModelType;
20
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
21
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
21
import com.extjs.gxt.ui.client.data.PagingLoadResult;
22
import com.extjs.gxt.ui.client.data.PagingLoadResult;
22
import com.extjs.gxt.ui.client.event.Events;
23
import com.extjs.gxt.ui.client.event.Events;
23
import com.extjs.gxt.ui.client.event.GridEvent;
24
import com.extjs.gxt.ui.client.event.GridEvent;
24
import com.extjs.gxt.ui.client.event.Listener;
25
import com.extjs.gxt.ui.client.event.Listener;
25
import com.extjs.gxt.ui.client.store.ListStore;
26
import com.extjs.gxt.ui.client.store.ListStore;
26
import com.extjs.gxt.ui.client.store.Store;
27
import com.extjs.gxt.ui.client.store.Store;
27
import com.extjs.gxt.ui.client.store.StoreEvent;
28
import com.extjs.gxt.ui.client.store.StoreEvent;
28
import com.extjs.gxt.ui.client.widget.ContentPanel;
29
import com.extjs.gxt.ui.client.widget.ContentPanel;
29
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
30
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
30
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
31
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
31
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
32
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
32
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
33
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
33
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
34
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
34
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
35
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
-
 
36
import com.extjs.gxt.ui.client.widget.selection.SelectionModel;
35
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
37
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
36
 
38
 
37
public class GrillePaginable<D extends ModelData>  extends ContentPanel implements Rafraichissable, GrilleParametrable<D> {
39
public class GrillePaginable<D extends ModelData>  extends ContentPanel implements Rafraichissable, GrilleParametrable<D> {
38
 
40
 
39
	  //-------------//
41
	  //-------------//
40
	 //  ATTRIBUTS	//
42
	 //  ATTRIBUTS	//
41
	//-------------//
43
	//-------------//
42
	
44
	
43
	// Pagination
45
	// Pagination
44
	private int start = 0;
46
	private int start = 0;
45
	private int limit = 50;
47
	private int limit = 50;
46
	
48
	
47
	// Récupération, stockage et pagination des données
49
	// Récupération, stockage et pagination des données
48
	private ModelType modelType = null;
50
	private ModelType modelType = null;
49
	private Proxy<D> proxy = null;
51
	private Proxy<D> proxy = null;
50
	private TransformateurJSONaModelData<PagingLoadResult<D>> reader = null;
52
	private TransformateurJSONaModelData<PagingLoadResult<D>> reader = null;
51
	private ChargeurListe<PagingLoadResult<D>> loader = null;
53
	private ChargeurListe<PagingLoadResult<D>> loader = null;
52
	private ListStore<D> storeGrille = null;
54
	private ListStore<D> storeGrille = null;
53
	
55
	
54
	// Elements graphiques
56
	// Elements graphiques
55
	EditorGrid<D> grillePersonne = null;
57
	EditorGrid<D> grille = null;
56
	List<ColumnConfig> colonnes = null;
58
	List<ColumnConfig> colonnes = null;
57
	ColumnModel modeleDeColonnes = null;
59
	ColumnModel modeleDeColonnes = null;
58
	
60
	
59
	  //-------------//
61
	  //-------------//
60
	 //   METHODES	//
62
	 //   METHODES	//
61
	//-------------//
63
	//-------------//
62
	
64
	
63
	/*--------------
65
	/*--------------
64
	  Constructeur 
66
	  Constructeur 
65
	--------------*/
67
	--------------*/
66
	
68
	
67
	public GrillePaginable(ModelType modeltype, Proxy<D> proxy, List<ColumnConfig> colonnes, ColumnModel modeleDeColonnes) {
69
	public GrillePaginable(ModelType modeltype, HashMap<String, String> virtualFields, Proxy<D> proxy, List<ColumnConfig> colonnes, ColumnModel modeleDeColonnes) {
68
		
70
		
69
		// Récupération des paramètres
71
		// Récupération des paramètres
70
		this.modelType = modeltype;
72
		this.modelType = modeltype;
71
		this.proxy = proxy;
73
		this.proxy = proxy;
72
		this.colonnes = colonnes;
74
		this.colonnes = colonnes;
73
		this.modeleDeColonnes = modeleDeColonnes;
75
		this.modeleDeColonnes = modeleDeColonnes;
74
		
76
		
75
		// Formatage du conteneur;
77
		// Formatage du conteneur;
76
		this.setLayout(new FitLayout());
78
		this.setLayout(new FitLayout());
77
		
79
		
78
		// Création des objets pour la récupération  et la pagination des données
80
		// Création des objets pour la récupération  et la pagination des données
79
		BasePagingLoadConfig plc = new BasePagingLoadConfig();
81
		BasePagingLoadConfig plc = new BasePagingLoadConfig();
80
		plc.setLimit(limit);
82
		plc.setLimit(limit);
81
		plc.setOffset(start);
83
		plc.setOffset(start);
82
		
84
		
83
		reader = new TransformateurJSONaModelData<PagingLoadResult<D>>(modelType);
85
		reader = new TransformateurJSONaModelData<PagingLoadResult<D>>(modelType, virtualFields);
84
		
86
		
85
		loader = new ChargeurListe<PagingLoadResult<D>>(proxy, reader, this);
87
		loader = new ChargeurListe<PagingLoadResult<D>>(proxy, reader, this);
86
        loader.setLimit(plc.getLimit());
88
        loader.setLimit(plc.getLimit());
87
        loader.setOffset(plc.getOffset());
89
        loader.setOffset(plc.getOffset());
88
 
90
 
89
		loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
91
		loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
90
			public void handleEvent(LoadEvent be) {  				
92
			public void handleEvent(LoadEvent be) {  				
91
 
93
 
92
			}  
94
			}  
93
		});
95
		});
-
 
96
		
-
 
97
		loader.addListener(Loader.Load, new Listener<LoadEvent>() {
-
 
98
			public void handleEvent(LoadEvent be) {  				
-
 
99
 
-
 
100
			}  
-
 
101
		});
94
		
102
		
95
		// Création de la grille
103
		// Création de la grille
96
		creerGrille();
104
		creerGrille();
97
	}	
105
	}	
98
	
106
	
99
	
107
	
100
	/*------------
108
	/*------------
101
	  Accesseurs 
109
	  Accesseurs 
102
	------------*/
110
	------------*/
103
	
111
	
104
	public EditorGrid<D> getGrille() {
112
	public EditorGrid<D> getGrille() {
105
		return grillePersonne;
113
		return grille;
106
	}
114
	}
107
	
115
	
108
	public ListStore<D> getStore() {
116
	public ListStore<D> getStore() {
109
		return storeGrille;
117
		return storeGrille;
110
	}
118
	}
-
 
119
	
-
 
120
	public GridSelectionModel<D> getSelectionModel() {
-
 
121
		return grille.getSelectionModel();
-
 
122
	}
111
	
123
	
112
	public D getSelection() {
124
	public D getSelection() {
-
 
125
		return grille.getSelectionModel().getSelectedItem();
-
 
126
	}
-
 
127
	
-
 
128
	@SuppressWarnings("unchecked")
-
 
129
	public Proxy getProxy() {
113
		return grillePersonne.getSelectionModel().getSelectedItem();
130
		return this.proxy;
114
	}	
131
	}
115
	
132
	
116
	
133
	
117
	/*-----------------------------
134
	/*-----------------------------
118
			Rafraichir
135
			Rafraichir
119
	-----------------------------*/
136
	-----------------------------*/
120
	
137
	
121
	public void rafraichir(Object nouvellesDonnees) {
138
	public void rafraichir(Object nouvellesDonnees) {
122
		
139
		
123
	}
140
	}
124
	
141
	
125
	
142
	
126
	/*----------------
143
	/*----------------
127
	  Méthode privées 
144
	  Méthode privées 
128
	-----------------*/
145
	-----------------*/
129
	
146
	
130
	private void creerGrille() {
147
	private void creerGrille() {
131
		
148
		
132
		final PagingToolBar toolBar = new PagingToolBar(this.limit);  
149
		final PagingToolBar toolBar = new PagingToolBar(this.limit);  
133
		toolBar.bind(loader);  
150
		toolBar.bind(loader);  
134
		this.setBottomComponent(toolBar);
151
		this.setBottomComponent(toolBar);
135
		
152
		
136
		storeGrille = new ListStore<D>(loader);
153
		storeGrille = new ListStore<D>(loader);
137
		
154
		
138
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<D>>() {
155
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<D>>() {
139
			public void handleEvent(StoreEvent<D> ce) {
156
			public void handleEvent(StoreEvent<D> ce) {
140
 
157
 
141
			}
158
			}
142
		});
159
		});
143
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<D>>() {
160
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<D>>() {
144
			public void handleEvent(StoreEvent<D> ce) {
161
			public void handleEvent(StoreEvent<D> ce) {
145
 
162
 
146
			}
163
			}
147
		});
164
		});
148
		storeGrille.addListener(Store.Update, new Listener<StoreEvent<D>>() {
165
		storeGrille.addListener(Store.Update, new Listener<StoreEvent<D>>() {
149
			public void handleEvent(StoreEvent<D> ce) {
166
			public void handleEvent(StoreEvent<D> ce) {
150
 
167
 
151
			}
168
			}
152
		});
169
		});
153
		
170
		
154
		RowNumberer pluginLigneNumero = new RowNumberer();
171
		RowNumberer pluginLigneNumero = new RowNumberer();
155
		
172
		
156
		GridSelectionModel<D> modeleDeSelection = new GridSelectionModel<D>();
173
		GridSelectionModel<D> modeleDeSelection = new GridSelectionModel<D>();
157
		
174
		
158
		grillePersonne = new EditorGrid<D>(storeGrille, modeleDeColonnes);
175
		grille = new EditorGrid<D>(storeGrille, modeleDeColonnes);
159
		grillePersonne.setHeight("100%");
176
		grille.setHeight("100%");
160
		grillePersonne.setBorders(true);
177
		grille.setBorders(true);
161
		grillePersonne.setSelectionModel(modeleDeSelection);
178
		grille.setSelectionModel(modeleDeSelection);
162
		grillePersonne.addPlugin(pluginLigneNumero);
179
		grille.addPlugin(pluginLigneNumero);
163
		grillePersonne.getView().setForceFit(true);
-
 
164
		grillePersonne.setAutoExpandColumn("fmt_nom_complet");
180
		grille.getView().setForceFit(true);
165
		grillePersonne.setStripeRows(true);
181
		grille.setStripeRows(true);
166
		grillePersonne.setBorders(true); 
182
		grille.setBorders(true); 
167
		
183
		
168
		grillePersonne.setStateful(true);  
184
		grille.setStateful(true);  
169
		
185
		
170
		grillePersonne.addListener(Events.Attach, new Listener<GridEvent<D>>() {  
186
		grille.addListener(Events.Attach, new Listener<GridEvent<D>>() {  
171
	       public void handleEvent(GridEvent<D> be) {  
187
	       public void handleEvent(GridEvent<D> be) {  
172
	         PagingLoadConfig config = new BasePagingLoadConfig();  
188
	         PagingLoadConfig config = new BasePagingLoadConfig();  
173
	         config.setOffset(0);  
189
	         config.setOffset(start);  
174
	         config.setLimit(50);  
190
	         config.setLimit(limit);  
175
	           
191
	           
176
	         Map<String, Object> state = grillePersonne.getState();  
192
	         Map<String, Object> state = grille.getState();  
177
	         if (state.containsKey("offset")) {  
193
	         if (state.containsKey("offset")) {  
178
	           int offset = (Integer)state.get("offset");  
194
	           int offset = (Integer)state.get("offset");  
179
	           int limit = (Integer)state.get("limit");  
195
	           int limit = (Integer)state.get("limit");  
180
	           config.setOffset(offset);  
196
	           config.setOffset(offset);  
181
	           config.setLimit(limit);  
197
	           config.setLimit(limit);  
182
	         }  
198
	         }  
183
	         if (state.containsKey("sortField")) {  
199
	         if (state.containsKey("sortField")) {  
184
	           config.setSortField((String)state.get("sortField"));  
200
	           config.setSortField((String)state.get("sortField"));  
185
	           config.setSortDir(SortDir.valueOf((String)state.get("sortDir")));
201
	           config.setSortDir(SortDir.valueOf((String)state.get("sortDir")));
186
	         }  
202
	         }  
187
	         loader.load(config);  
203
	         loader.load(config);  
188
	       }  
204
	       }  
189
	     });
205
	     });
190
		
206
		
-
 
207
		this.add(grille);
-
 
208
	}
-
 
209
	
-
 
210
	public void reload() {
191
		this.add(grillePersonne);
211
		loader.load();
192
	}
212
	}
193
}
213
}