Subversion Repositories eFlore/Applications.coel

Rev

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
1483 cyprien 56
	EditorGrid<D> grille = null;
1448 cyprien 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
 
1483 cyprien 96
		loader.addListener(Loader.Load, new Listener<LoadEvent>() {
97
			public void handleEvent(LoadEvent be) {
98
 
99
			}
100
		});
101
 
1448 cyprien 102
		// Création de la grille
103
		creerGrille();
104
	}
105
 
106
 
107
	/*------------
108
	  Accesseurs
109
	------------*/
110
 
111
	public EditorGrid<D> getGrille() {
1483 cyprien 112
		return grille;
1448 cyprien 113
	}
114
 
115
	public ListStore<D> getStore() {
116
		return storeGrille;
117
	}
118
 
119
	public D getSelection() {
1483 cyprien 120
		return grille.getSelectionModel().getSelectedItem();
1485 cyprien 121
	}
1448 cyprien 122
 
1485 cyprien 123
	@SuppressWarnings("unchecked")
124
	public Proxy getProxy() {
125
		return this.proxy;
126
	}
1448 cyprien 127
 
1485 cyprien 128
 
1448 cyprien 129
	/*-----------------------------
130
			Rafraichir
131
	-----------------------------*/
132
 
133
	public void rafraichir(Object nouvellesDonnees) {
134
 
135
	}
136
 
137
 
138
	/*----------------
139
	  Méthode privées
140
	-----------------*/
141
 
142
	private void creerGrille() {
143
 
144
		final PagingToolBar toolBar = new PagingToolBar(this.limit);
145
		toolBar.bind(loader);
146
		this.setBottomComponent(toolBar);
147
 
148
		storeGrille = new ListStore<D>(loader);
149
 
150
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<D>>() {
151
			public void handleEvent(StoreEvent<D> ce) {
152
 
153
			}
154
		});
155
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<D>>() {
156
			public void handleEvent(StoreEvent<D> ce) {
157
 
158
			}
159
		});
160
		storeGrille.addListener(Store.Update, new Listener<StoreEvent<D>>() {
161
			public void handleEvent(StoreEvent<D> ce) {
162
 
163
			}
164
		});
165
 
166
		RowNumberer pluginLigneNumero = new RowNumberer();
167
 
168
		GridSelectionModel<D> modeleDeSelection = new GridSelectionModel<D>();
169
 
1483 cyprien 170
		grille = new EditorGrid<D>(storeGrille, modeleDeColonnes);
171
		grille.setHeight("100%");
172
		grille.setBorders(true);
173
		grille.setSelectionModel(modeleDeSelection);
174
		grille.addPlugin(pluginLigneNumero);
175
		grille.getView().setForceFit(true);
176
		grille.setStripeRows(true);
177
		grille.setBorders(true);
1448 cyprien 178
 
1483 cyprien 179
		grille.setStateful(true);
1448 cyprien 180
 
1483 cyprien 181
		grille.addListener(Events.Attach, new Listener<GridEvent<D>>() {
1448 cyprien 182
	       public void handleEvent(GridEvent<D> be) {
183
	         PagingLoadConfig config = new BasePagingLoadConfig();
1483 cyprien 184
	         config.setOffset(start);
185
	         config.setLimit(limit);
1448 cyprien 186
 
1483 cyprien 187
	         Map<String, Object> state = grille.getState();
1448 cyprien 188
	         if (state.containsKey("offset")) {
189
	           int offset = (Integer)state.get("offset");
190
	           int limit = (Integer)state.get("limit");
191
	           config.setOffset(offset);
192
	           config.setLimit(limit);
193
	         }
194
	         if (state.containsKey("sortField")) {
195
	           config.setSortField((String)state.get("sortField"));
196
	           config.setSortDir(SortDir.valueOf((String)state.get("sortDir")));
197
	         }
198
	         loader.load(config);
199
	       }
200
	     });
201
 
1483 cyprien 202
		this.add(grille);
1448 cyprien 203
	}
1485 cyprien 204
 
205
	public void reload() {
206
		loader.load();
207
	}
1448 cyprien 208
}