Subversion Repositories eFlore/Applications.coel

Rev

Rev 1475 | Rev 1485 | 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();
1448 cyprien 121
	}
122
 
123
 
124
	/*-----------------------------
125
			Rafraichir
126
	-----------------------------*/
127
 
128
	public void rafraichir(Object nouvellesDonnees) {
129
 
130
	}
131
 
132
 
133
	/*----------------
134
	  Méthode privées
135
	-----------------*/
136
 
137
	private void creerGrille() {
138
 
139
		final PagingToolBar toolBar = new PagingToolBar(this.limit);
140
		toolBar.bind(loader);
141
		this.setBottomComponent(toolBar);
142
 
143
		storeGrille = new ListStore<D>(loader);
144
 
145
		storeGrille.addListener(Store.Add, new Listener<StoreEvent<D>>() {
146
			public void handleEvent(StoreEvent<D> ce) {
147
 
148
			}
149
		});
150
		storeGrille.addListener(Store.Remove, new Listener<StoreEvent<D>>() {
151
			public void handleEvent(StoreEvent<D> ce) {
152
 
153
			}
154
		});
155
		storeGrille.addListener(Store.Update, new Listener<StoreEvent<D>>() {
156
			public void handleEvent(StoreEvent<D> ce) {
157
 
158
			}
159
		});
160
 
161
		RowNumberer pluginLigneNumero = new RowNumberer();
162
 
163
		GridSelectionModel<D> modeleDeSelection = new GridSelectionModel<D>();
164
 
1483 cyprien 165
		grille = new EditorGrid<D>(storeGrille, modeleDeColonnes);
166
		grille.setHeight("100%");
167
		grille.setBorders(true);
168
		grille.setSelectionModel(modeleDeSelection);
169
		grille.addPlugin(pluginLigneNumero);
170
		grille.getView().setForceFit(true);
171
		grille.setStripeRows(true);
172
		grille.setBorders(true);
1448 cyprien 173
 
1483 cyprien 174
		grille.setStateful(true);
1448 cyprien 175
 
1483 cyprien 176
		grille.addListener(Events.Attach, new Listener<GridEvent<D>>() {
1448 cyprien 177
	       public void handleEvent(GridEvent<D> be) {
178
	         PagingLoadConfig config = new BasePagingLoadConfig();
1483 cyprien 179
	         config.setOffset(start);
180
	         config.setLimit(limit);
1448 cyprien 181
 
1483 cyprien 182
	         Map<String, Object> state = grille.getState();
1448 cyprien 183
	         if (state.containsKey("offset")) {
184
	           int offset = (Integer)state.get("offset");
185
	           int limit = (Integer)state.get("limit");
186
	           config.setOffset(offset);
187
	           config.setLimit(limit);
188
	         }
189
	         if (state.containsKey("sortField")) {
190
	           config.setSortField((String)state.get("sortField"));
191
	           config.setSortDir(SortDir.valueOf((String)state.get("sortDir")));
192
	         }
193
	         loader.load(config);
194
	       }
195
	     });
196
 
1483 cyprien 197
		this.add(grille);
1448 cyprien 198
	}
199
}