Subversion Repositories eFlore/Applications.coel

Rev

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

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