Subversion Repositories eFlore/Applications.cel

Rev

Rev 638 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 638 Rev 721
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
2
 
2
 
3
import java.util.Iterator;
3
import java.util.Iterator;
4
 
-
 
5
import org.tela_botanica.client.Util;
4
 
6
import org.tela_botanica.client.image.ImageMediateur;
5
import org.tela_botanica.client.image.ImageMediateur;
7
import org.tela_botanica.client.interfaces.ListePaginable;
6
import org.tela_botanica.client.interfaces.ListePaginable;
8
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.modeles.ListeObservation;
8
import org.tela_botanica.client.modeles.ListeObservation;
10
import org.tela_botanica.client.modeles.Observation;
9
import org.tela_botanica.client.modeles.Observation;
-
 
10
import org.tela_botanica.client.util.Util;
11
import org.tela_botanica.client.vues.MiniBarrePaginationVue;
11
import org.tela_botanica.client.vues.MiniBarrePaginationVue;
12
 
12
 
13
import com.google.gwt.user.client.Window;
13
import com.google.gwt.user.client.Window;
14
import com.gwtext.client.data.Record;
14
import com.gwtext.client.data.Record;
15
import com.gwtext.client.data.SimpleStore;
15
import com.gwtext.client.data.SimpleStore;
16
import com.gwtext.client.data.Store;
16
import com.gwtext.client.data.Store;
17
import com.gwtext.client.dd.DragSource;
17
import com.gwtext.client.dd.DragSource;
18
import com.gwtext.client.dd.DropTarget;
18
import com.gwtext.client.dd.DropTarget;
19
import com.gwtext.client.dd.DropTargetConfig;
19
import com.gwtext.client.dd.DropTargetConfig;
20
import com.gwtext.client.widgets.Component;
20
import com.gwtext.client.widgets.Component;
21
import com.gwtext.client.widgets.Container;
21
import com.gwtext.client.widgets.Container;
22
import com.gwtext.client.widgets.Toolbar;
22
import com.gwtext.client.widgets.Toolbar;
23
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
23
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
24
import com.gwtext.client.widgets.form.ComboBox;
24
import com.gwtext.client.widgets.form.ComboBox;
25
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
25
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
26
import com.gwtext.client.widgets.grid.CellMetadata;
26
import com.gwtext.client.widgets.grid.CellMetadata;
27
import com.gwtext.client.widgets.grid.ColumnConfig;
27
import com.gwtext.client.widgets.grid.ColumnConfig;
28
import com.gwtext.client.widgets.grid.ColumnModel;
28
import com.gwtext.client.widgets.grid.ColumnModel;
29
import com.gwtext.client.widgets.grid.GridDragData;
29
import com.gwtext.client.widgets.grid.GridDragData;
30
import com.gwtext.client.widgets.grid.GridPanel;
30
import com.gwtext.client.widgets.grid.GridPanel;
31
import com.gwtext.client.widgets.grid.Renderer;
31
import com.gwtext.client.widgets.grid.Renderer;
32
import com.gwtext.client.widgets.grid.event.GridListenerAdapter;
32
import com.gwtext.client.widgets.grid.event.GridListenerAdapter;
33
import com.gwtext.client.widgets.grid.event.GridRowListenerAdapter;
33
import com.gwtext.client.widgets.grid.event.GridRowListenerAdapter;
34
import com.gwtext.client.widgets.menu.BaseItem;
34
import com.gwtext.client.widgets.menu.BaseItem;
35
import com.gwtext.client.widgets.menu.Item;
35
import com.gwtext.client.widgets.menu.Item;
36
import com.gwtext.client.widgets.menu.Menu;
36
import com.gwtext.client.widgets.menu.Menu;
37
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
37
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
38
import com.gwtext.client.core.EventObject;
38
import com.gwtext.client.core.EventObject;
39
import com.gwtext.client.core.Ext;
39
import com.gwtext.client.core.Ext;
40
import com.gwtext.client.core.ExtElement;
40
import com.gwtext.client.core.ExtElement;
41
import com.gwtext.client.dd.DragData;
41
import com.gwtext.client.dd.DragData;
42
 
42
 
43
/**
43
/**
44
 * liste d'observation pour l'association d'images aux observations
44
 * liste d'observation pour l'association d'images aux observations
45
 * @author aurelien
45
 * @author aurelien
46
 *
46
 *
47
 */
47
 */
48
public class MiniListeObservationVue extends GridPanel implements Rafraichissable, ListePaginable {
48
public class MiniListeObservationVue extends GridPanel implements Rafraichissable, ListePaginable {
49
 
49
 
50
	/**
50
	/**
51
	 * Le médiateur associé à la vue
51
	 * Le médiateur associé à la vue
52
	 */
52
	 */
53
	private ImageMediateur iMediateur = null ;
53
	private ImageMediateur iMediateur = null ;
54
	
54
	
55
	/**
55
	/**
56
	 * Booléen d'instanciation
56
	 * Booléen d'instanciation
57
	 */
57
	 */
58
	private boolean estInstancie = false ;
58
	private boolean estInstancie = false ;
59
	
59
	
60
	/**
60
	/**
61
	 * Le modèle de colonnes
61
	 * Le modèle de colonnes
62
	 */
62
	 */
63
	private ColumnModel colModel = null ;
63
	private ColumnModel colModel = null ;
64
	
64
	
65
	private SimpleStore store = null ;
65
	private SimpleStore store = null ;
66
	
66
	
67
	private MiniBarrePaginationVue pgBar = new MiniBarrePaginationVue(this) ;
67
	private MiniBarrePaginationVue pgBar = new MiniBarrePaginationVue(this) ;
68
	
68
	
69
	private Toolbar bt = new Toolbar() ;
69
	private Toolbar bt = new Toolbar() ;
70
	
70
	
71
	/**
71
	/**
72
	 * Combobox permettant de selectionner le mode
72
	 * Combobox permettant de selectionner le mode
73
	 * modification ou bien création
73
	 * modification ou bien création
74
	 */
74
	 */
75
	private ComboBox selecteurMode = new ComboBox();
75
	private ComboBox selecteurMode = new ComboBox();
76
	
76
	
77
	Store storeMode = null ;
77
	Store storeMode = null ;
78
 
78
 
79
	private boolean liaison;
79
	private boolean liaison;
80
	
80
	
81
	int pageEnCours = 0;
81
	int pageEnCours = 0;
82
	
82
	
83
	int nbElements = 0;
83
	int nbElements = 0;
84
	
84
	
85
	int taillePage = 50;
85
	int taillePage = 50;
86
	
86
	
87
	private String modeleLieu = "IDLOCCOMMUNE, LIEUDIT, STATION";
87
	private String modeleLieu = "IDLOCCOMMUNE, LIEUDIT, STATION";
88
	
88
	
89
	/**
89
	/**
90
	 * Nombre de pages totales
90
	 * Nombre de pages totales
91
	 */
91
	 */
92
	private int pageMax = 1 ;
92
	private int pageMax = 1 ;
93
	
93
	
94
	/**
94
	/**
95
	 * Constructeur avec arguments
95
	 * Constructeur avec arguments
96
	 * @param im le médiateur à associer à la vue
96
	 * @param im le médiateur à associer à la vue
97
	 */
97
	 */
98
	public MiniListeObservationVue(ImageMediateur im)
98
	public MiniListeObservationVue(ImageMediateur im)
99
	{
99
	{
100
		iMediateur = im ;
100
		iMediateur = im ;
101
		
101
		
102
		this.setId("x-view-mini-obs") ;
102
		this.setId("x-view-mini-obs") ;
103
		
103
		
104
		// on construit le modèle de colonnes
104
		// on construit le modèle de colonnes
105
 
105
 
106
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir) 
106
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir) 
107
				
107
				
108
		Renderer colRend = new Renderer() {
108
		Renderer colRend = new Renderer() {
109
 
109
 
110
			public String render(Object value, CellMetadata cellMetadata,
110
			public String render(Object value, CellMetadata cellMetadata,
111
					Record record, int rowIndex, int colNum, Store store) {
111
					Record record, int rowIndex, int colNum, Store store) {
112
				
112
				
113
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
113
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
114
				
114
				
115
					return "" ;
115
					return "" ;
116
				}	
116
				}	
117
				else
117
				else
118
				{
118
				{
119
					
119
					
120
				}
120
				}
121
				
121
				
122
				return value.toString() ;
122
				return value.toString() ;
123
			}
123
			}
124
			
124
			
125
		} ;
125
		} ;
126
		
126
		
127
		Renderer dateRend = new Renderer() {
127
		Renderer dateRend = new Renderer() {
128
 
128
 
129
			public String render(Object value, CellMetadata cellMetadata,
129
			public String render(Object value, CellMetadata cellMetadata,
130
					Record record, int rowIndex, int colNum, Store store) {
130
					Record record, int rowIndex, int colNum, Store store) {
131
				
131
				
132
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
132
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
133
				
133
				
134
					return "" ;
134
					return "" ;
135
				}	
135
				}	
136
				else
136
				else
137
				{
137
				{
138
					String dateEntiere = value.toString() ;
138
					String dateEntiere = value.toString() ;
139
					String[] dateEtHeure = dateEntiere.split(" ", 2);
139
					String[] dateEtHeure = dateEntiere.split(" ", 2);
140
					if(verifierFormatDate(dateEtHeure[0])) {
140
					if(verifierFormatDate(dateEtHeure[0])) {
141
						String[] dateFormateeTab = dateEtHeure[0].split("-",3);
141
						String[] dateFormateeTab = dateEtHeure[0].split("-",3);
142
						return dateFormateeTab[2]+"/"+dateFormateeTab[1]+"/"+dateFormateeTab[0] ;
142
						return dateFormateeTab[2]+"/"+dateFormateeTab[1]+"/"+dateFormateeTab[0] ;
143
					}
143
					}
144
				}
144
				}
145
				
145
				
146
				return value.toString() ;
146
				return value.toString() ;
147
			}
147
			}
148
			
148
			
149
		} ;
149
		} ;
150
		
150
		
151
		// on crée un store simple contenant un petit set de données et deux colonnes
151
		// on crée un store simple contenant un petit set de données et deux colonnes
152
		store = new SimpleStore(new String[]{"transmis","plante","date","lieu","id_obs"}, getObs());  
152
		store = new SimpleStore(new String[]{"transmis","plante","date","lieu","id_obs"}, getObs());  
153
		ColumnConfig[] columns = { 
153
		ColumnConfig[] columns = { 
154
		new ColumnConfig("", "transmis", 30, true, new Renderer() {
154
		new ColumnConfig("", "transmis", 30, true, new Renderer() {
155
 
155
 
156
			public String render(Object value, CellMetadata cellMetadata,
156
			public String render(Object value, CellMetadata cellMetadata,
157
					Record record, int rowIndex, int colNum, Store store) {
157
					Record record, int rowIndex, int colNum, Store store) {
158
				if(value.equals("1"))
158
				if(value.equals("1"))
159
				{
159
				{
160
					return "<img src=\"tela.png\"/></img>" ;
160
					return "<img src=\"tela.png\"/></img>" ;
161
				}
161
				}
162
				else
162
				else
163
				{
163
				{
164
					return "" ;
164
					return "" ;
165
				}
165
				}
166
			}
166
			}
167
			
167
			
168
		}),    
168
		}),    
169
		new ColumnConfig("Taxon", "plante", 145, true, colRend), 
169
		new ColumnConfig("Taxon", "plante", 145, true, colRend), 
170
		new ColumnConfig("Date", "date", 68, true, dateRend),
170
		new ColumnConfig("Date", "date", 68, true, dateRend),
171
		new ColumnConfig("Lieu", "lieu", 145, true, colRend),		
171
		new ColumnConfig("Lieu", "lieu", 145, true, colRend),		
172
		new ColumnConfig("Numero", "id_obs", 50, true, colRend), } ;
172
		new ColumnConfig("Numero", "id_obs", 50, true, colRend), } ;
173
		   
173
		   
174
        ColumnModel columnModel = new ColumnModel(columns);
174
        ColumnModel columnModel = new ColumnModel(columns);
175
         
175
         
176
        colModel = columnModel ;
176
        colModel = columnModel ;
177
 
177
 
178
         
178
         
179
        setTitle("Observations");  
179
        setTitle("Observations");  
180
        // on associe le modèle de colonnes
180
        // on associe le modèle de colonnes
181
        setColumnModel(columnModel);  
181
        setColumnModel(columnModel);  
182
        setAutoScroll(true) ;
182
        setAutoScroll(true) ;
183
        setHeight("100%") ;
183
        setHeight("100%") ;
184
		setAutoWidth(true) ; 
184
		setAutoWidth(true) ; 
185
        // on autorise le drag 'n drop pour un certain groupe
185
        // on autorise le drag 'n drop pour un certain groupe
186
 		this.setEnableDragDrop(true);
186
 		this.setEnableDragDrop(true);
187
 		this.setDdGroup("DragGroupName");
187
 		this.setDdGroup("DragGroupName");
188
        store.load();       
188
        store.load();       
189
		setStore(store) ;
189
		setStore(store) ;
190
		
190
		
191
		setBottomToolbar(pgBar) ;
191
		setBottomToolbar(pgBar) ;
192
		
192
		
193
		Object[][] mode = {{"toutes les observations",false} , {"observations liées", true} };
193
		Object[][] mode = {{"toutes les observations",false} , {"observations liées", true} };
194
		storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },
194
		storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },
195
				mode);
195
				mode);
196
		storeMode.load();
196
		storeMode.load();
197
		selecteurMode.setStore(storeMode);
197
		selecteurMode.setStore(storeMode);
198
		selecteurMode.setDisplayField("nom_mode") ;
198
		selecteurMode.setDisplayField("nom_mode") ;
199
		selecteurMode.setLabel("mode ") ;
199
		selecteurMode.setLabel("mode ") ;
200
		selecteurMode.setForceSelection(true) ;
200
		selecteurMode.setForceSelection(true) ;
201
		selecteurMode.setValue("toutes les observations") ;
201
		selecteurMode.setValue("toutes les observations") ;
202
		selecteurMode.setEditable(false) ;
202
		selecteurMode.setEditable(false) ;
203
		selecteurMode.setCls("x-selec-consult") ;
203
		selecteurMode.setCls("x-selec-consult") ;
204
		
204
		
205
		bt = new Toolbar() ;
205
		bt = new Toolbar() ;
206
		bt.addField(selecteurMode) ;
206
		bt.addField(selecteurMode) ;
207
		
207
		
208
		//this.setAutoExpandColumn("plante");
208
		//this.setAutoExpandColumn("plante");
209
		
209
		
210
		setTopToolbar(bt) ;
210
		setTopToolbar(bt) ;
211
		
211
		
212
		selecteurMode.addListener(new ComboBoxListenerAdapter() {
212
		selecteurMode.addListener(new ComboBoxListenerAdapter() {
213
 
213
 
214
			public void onSelect(ComboBox comboBox, Record record, int index) {
214
			public void onSelect(ComboBox comboBox, Record record, int index) {
215
				
215
				
216
				// et on met la valeur à jour dans la combobox
216
				// et on met la valeur à jour dans la combobox
217
				comboBox.setValue(record.getAsString("nom_mode"));
217
				comboBox.setValue(record.getAsString("nom_mode"));
218
				setModification(record.getAsString("mode")) ;
218
				setModification(record.getAsString("mode")) ;
219
			}
219
			}
220
 
220
 
221
		});
221
		});
222
		
222
		
223
		setAutoScroll(true) ;
223
		setAutoScroll(true) ;
224
		// on configure le drag 'n drop
224
		// on configure le drag 'n drop
225
		configDragAndDrop() ;
225
		configDragAndDrop() ;
226
		
226
		
227
		this.addGridListener(new GridListenerAdapter() {
227
		this.addGridListener(new GridListenerAdapter() {
228
 
228
 
229
			public void onContextMenu(EventObject e) {
229
			public void onContextMenu(EventObject e) {
230
				
230
				
231
				// si pas de selection, on selection au moins la ligne sur laquelle on a fait le clic
231
				// si pas de selection, on selection au moins la ligne sur laquelle on a fait le clic
232
				if(getSelectionModel().getSelections().length <= 0) {
232
				if(getSelectionModel().getSelections().length <= 0) {
233
					int index = getView().findRowIndex(e);
233
					int index = getView().findRowIndex(e);
234
			  		Record rddrop = getStore().getRecordAt(index) ;
234
			  		Record rddrop = getStore().getRecordAt(index) ;
235
					getSelectionModel().selectRecords(rddrop);
235
					getSelectionModel().selectRecords(rddrop);
236
				}
236
				}
237
				
237
				
238
				e.stopEvent() ;
238
				e.stopEvent() ;
239
				MenuLiaisonVue mlv = new MenuLiaisonVue(iMediateur,liaison) ;
239
				MenuLiaisonVue mlv = new MenuLiaisonVue(iMediateur,liaison) ;
240
				mlv.showAt(e.getXY()) ;
240
				mlv.showAt(e.getXY()) ;
241
				
241
				
242
			}
242
			}
243
			
243
			
244
		}) ;
244
		}) ;
245
		
245
		
246
		obtenirNombreMiniListeObservations();
246
		obtenirNombreMiniListeObservations();
247
	}
247
	}
248
	
248
	
249
	/**
249
	/**
250
	 * Configure le drag 'n drop pour la liste
250
	 * Configure le drag 'n drop pour la liste
251
	 */
251
	 */
252
	private void configDragAndDrop()
252
	private void configDragAndDrop()
253
	{
253
	{
254
		// on choisit le texte qui sera affiché lors d'un drag 'n drop
254
		// on choisit le texte qui sera affiché lors d'un drag 'n drop
255
		setDragDropText("Faites glisser la selection d'observations sur une image pour les lier") ;
255
		setDragDropText("Faites glisser la selection d'observations sur une image pour les lier") ;
256
		
256
		
257
		//On active le drag 'n drop
257
		//On active le drag 'n drop
258
		this.setEnableDragDrop(true);
258
		this.setEnableDragDrop(true);
259
 
259
 
260
		// on fabrique la nouvelle configuration
260
		// on fabrique la nouvelle configuration
261
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
261
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
262
		this.setDdGroup("DragGroupName");
262
		this.setDdGroup("DragGroupName");
263
		DropTargetConfig dtc = new DropTargetConfig();
263
		DropTargetConfig dtc = new DropTargetConfig();
264
		dtc.setdDdGroup("DragGroupName");
264
		dtc.setdDdGroup("DragGroupName");
265
 
265
 
266
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
266
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
267
		@SuppressWarnings("unused")
267
		@SuppressWarnings("unused")
268
		DropTarget tg = new DropTarget(this, dtc)
268
		DropTarget tg = new DropTarget(this, dtc)
269
		{
269
		{
270
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){	
270
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){	
271
				
271
				
272
				// si on reçoit des données provenant d'une grille
272
				// si on reçoit des données provenant d'une grille
273
				if(data instanceof GridDragData)
273
				if(data instanceof GridDragData)
274
		    	  {
274
		    	  {
275
					// on la convertit 
275
					// on la convertit 
276
		    		  	GridDragData gdd = (GridDragData)data ;
276
		    		  	GridDragData gdd = (GridDragData)data ;
277
		    		  	// et on vérifie que les données ne viennent pas de l'élément courant
277
		    		  	// et on vérifie que les données ne viennent pas de l'élément courant
278
		    		  	if(gdd.getGrid().getId().equals("x-view-mini-obs"))
278
		    		  	if(gdd.getGrid().getId().equals("x-view-mini-obs"))
279
		    		  	{
279
		    		  	{
280
		    		  		return false ;
280
		    		  		return false ;
281
		    		  	}
281
		    		  	}
282
		    		  	else
282
		    		  	else
283
		    		  	{
283
		    		  	{
284
		    		  		// on appelle le médiateur
284
		    		  		// on appelle le médiateur
285
		    		  		return iMediateur.lierImagesDD(source, e, data) ;   
285
		    		  		return iMediateur.lierImagesDD(source, e, data) ;   
286
		    		  	}
286
		    		  	}
287
		    	  }
287
		    	  }
288
				return false ;
288
				return false ;
289
			}
289
			}
290
			
290
			
291
			public String notifyOver(DragSource source, EventObject e, DragData data){
291
			public String notifyOver(DragSource source, EventObject e, DragData data){
292
			    return "x-dd-drop-ok";
292
			    return "x-dd-drop-ok";
293
			}
293
			}
294
		};
294
		};
295
        
295
        
296
	}
296
	}
297
	
297
	
298
	/**
298
	/**
299
	 * Méthode héritée de l'interface rafraichissable
299
	 * Méthode héritée de l'interface rafraichissable
300
	 */
300
	 */
301
	public void rafraichir(Object nouvelleDonnees,
301
	public void rafraichir(Object nouvelleDonnees,
302
			boolean repandreRaffraichissement) {
302
			boolean repandreRaffraichissement) {
303
		
303
		
304
		if(nouvelleDonnees instanceof ListeObservation)
304
		if(nouvelleDonnees instanceof ListeObservation)
305
		{
305
		{
306
			if(this.getView() != null)
306
			if(this.getView() != null)
307
			{
307
			{
308
				ListeObservation data = (ListeObservation)nouvelleDonnees ;
308
				ListeObservation data = (ListeObservation)nouvelleDonnees ;
309
				
309
				
310
				//Window.alert(data.size()+"");
310
				//Window.alert(data.size()+"");
311
				
311
				
312
				String[][] listeObs = new String[data.size()][5] ;
312
				String[][] listeObs = new String[data.size()][5] ;
313
				int i = 0 ;
313
				int i = 0 ;
314
				
314
				
315
				for (Iterator it = data.keySet().iterator(); it.hasNext();) 
315
				for (Iterator it = data.keySet().iterator(); it.hasNext();) 
316
				{
316
				{
317
					
317
					
318
					Observation obs=(Observation) data.get(it.next());
318
					Observation obs=(Observation) data.get(it.next());
319
					
319
					
320
					listeObs[i][0] = obs.getTransmis();
320
					listeObs[i][0] = obs.getTransmis();
321
					listeObs[i][1] = obs.getNomSaisi();
321
					listeObs[i][1] = obs.getNomSaisi();
322
					listeObs[i][2] = obs.getDate() ;
322
					listeObs[i][2] = obs.getDate() ;
323
					listeObs[i][3] = Util.formaterLieu(obs, modeleLieu);
323
					listeObs[i][3] = Util.formaterLieu(obs, modeleLieu);
324
					listeObs[i][4] = obs.getNumeroOrdre();
324
					listeObs[i][4] = obs.getNumeroOrdre();
325
				
325
				
326
					i++ ;
326
					i++ ;
327
				}
327
				}
328
	
328
	
329
				store = new SimpleStore(new String[]{"transmis","plante","date","lieu","id_obs"}, listeObs);  	
329
				store = new SimpleStore(new String[]{"transmis","plante","date","lieu","id_obs"}, listeObs);  	
330
				store.load();       
330
				store.load();       
331
				this.reconfigure(store, colModel) ;
331
				this.reconfigure(store, colModel) ;
332
			}
332
			}
333
			else
333
			else
334
			{
334
			{
335
				addListener(new ContainerListenerAdapter() {
335
				addListener(new ContainerListenerAdapter() {
336
					
336
					
337
					public void onShow(Component c)
337
					public void onShow(Component c)
338
					{
338
					{
339
						obtenirNombreMiniListeObservations() ;
339
						obtenirNombreMiniListeObservations() ;
340
					}
340
					}
341
					
341
					
342
					public void onAfterLayout(Container c)
342
					public void onAfterLayout(Container c)
343
					{
343
					{
344
						obtenirNombreMiniListeObservations() ;
344
						obtenirNombreMiniListeObservations() ;
345
					}
345
					}
346
					
346
					
347
				}) ;
347
				}) ;
348
			}
348
			}
349
	
349
	
350
		}
350
		}
351
		
351
		
352
		// Si on reçoit un tableau d'entiers
352
		// Si on reçoit un tableau d'entiers
353
		// c'est un tableau d'un seul entier qui est le nombre d'observation correspondant aux critères
353
		// c'est un tableau d'un seul entier qui est le nombre d'observation correspondant aux critères
354
		if(nouvelleDonnees instanceof int[])
354
		if(nouvelleDonnees instanceof int[])
355
		{
355
		{
356
			int[] pages = (int[])nouvelleDonnees ;
356
			int[] pages = (int[])nouvelleDonnees ;
357
			
357
			
358
			// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
358
			// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
359
			pageMax  = calculerNbPages(pages[0]) ;
359
			pageMax  = calculerNbPages(pages[0]) ;
360
			nbElements = pages[0];		
360
			nbElements = pages[0];		
361
			
361
			
362
			// et on notifie de le mediateur du changement des valeurs
362
			// et on notifie de le mediateur du changement des valeurs
363
			changerPageMaxEtCourante(pageMax,pageEnCours,taillePage,nbElements) ;
363
			changerPageMaxEtCourante(pageMax,pageEnCours,taillePage,nbElements) ;
364
			
364
			
365
			masquerChargement();
365
			masquerChargement();
366
			obtenirMiniListeObservations();
366
			obtenirMiniListeObservations();
367
		}
367
		}
368
		
368
		
369
		redimensionner();
369
		redimensionner();
370
		
370
		
371
		deMasquerChargement() ;
371
		deMasquerChargement() ;
372
		
372
		
373
	}
373
	}
374
	
374
	
375
	private void obtenirMiniListeObservations()
375
	private void obtenirMiniListeObservations()
376
	{
376
	{
377
		iMediateur.obtenirMiniListeObservations(this, taillePage, pageEnCours) ;
377
		iMediateur.obtenirMiniListeObservations(this, taillePage, pageEnCours) ;
378
	}
378
	}
379
	
379
	
380
	private void obtenirNombreMiniListeObservations()
380
	private void obtenirNombreMiniListeObservations()
381
	{
381
	{
382
		iMediateur.obtenirNombreMiniListeObservations(this) ;
382
		iMediateur.obtenirNombreMiniListeObservations(this) ;
383
	}
383
	}
384
	
384
	
385
	/**
385
	/**
386
	 * Renvoie le faux set de données pour le store
386
	 * Renvoie le faux set de données pour le store
387
	 * @return un tableau à deux colonnes int - String
387
	 * @return un tableau à deux colonnes int - String
388
	 */
388
	 */
389
	private Object[][] getObs() {  
389
	private Object[][] getObs() {  
390
	         return new Object[][]{  
390
	         return new Object[][]{  
391
		              
391
		              
392
	         } ;
392
	         } ;
393
	 }
393
	 }
394
	
394
	
395
	public Store getStore()
395
	public Store getStore()
396
	{
396
	{
397
		return store ;
397
		return store ;
398
	}
398
	}
399
	
399
	
400
	public MiniBarrePaginationVue getBarrePagination()
400
	public MiniBarrePaginationVue getBarrePagination()
401
	{
401
	{
402
		return pgBar ;
402
		return pgBar ;
403
	}
403
	}
404
	
404
	
405
	private void setModification(String mode)
405
	private void setModification(String mode)
406
	{
406
	{
407
		if(mode.equals("true")) {
407
		if(mode.equals("true")) {
408
 
408
 
409
			liaison = true ;
409
			liaison = true ;
410
			selecteurMode.removeClass("x-selec-consult") ;
410
			selecteurMode.removeClass("x-selec-consult") ;
411
			selecteurMode.setCls("x-selec-liaison") ;
411
			selecteurMode.setCls("x-selec-liaison") ;
412
			getBarrePagination().disable();
412
			getBarrePagination().disable();
413
			doLayout();
413
			doLayout();
414
		}
414
		}
415
		else
415
		else
416
		{
416
		{
417
			liaison = false ;
417
			liaison = false ;
418
			selecteurMode.removeClass("x-selec-liaison") ;
418
			selecteurMode.removeClass("x-selec-liaison") ;
419
			selecteurMode.setCls("x-selec-consult") ;
419
			selecteurMode.setCls("x-selec-consult") ;
420
			getBarrePagination().enable();
420
			getBarrePagination().enable();
421
			doLayout();
421
			doLayout();
422
		}
422
		}
423
		
423
		
424
		store.removeAll() ;
424
		store.removeAll() ;
425
		iMediateur.changerModeLiaison(liaison) ;
425
		iMediateur.changerModeLiaison(liaison) ;
426
		
426
		
427
	}
427
	}
428
	
428
	
429
	public boolean getMode() {
429
	public boolean getMode() {
430
		return liaison ;
430
		return liaison ;
431
	}
431
	}
432
	
432
	
433
	/**
433
	/**
434
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
434
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
435
	 */
435
	 */
436
	public void masquerChargement()
436
	public void masquerChargement()
437
	{
437
	{
438
			ExtElement masked = Ext.get(getId()) ;
438
			ExtElement masked = Ext.get(getId()) ;
439
 
439
 
440
			if (masked!=null) {
440
			if (masked!=null) {
441
				masked.mask("Chargement") ;
441
				masked.mask("Chargement") ;
442
			}
442
			}
443
	}
443
	}
444
	
444
	
445
	/**
445
	/**
446
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
446
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
447
	 */
447
	 */
448
	public void deMasquerChargement()
448
	public void deMasquerChargement()
449
	{
449
	{
450
			ExtElement masked = Ext.get(getId()) ;
450
			ExtElement masked = Ext.get(getId()) ;
451
 
451
 
452
			if (masked!=null) {
452
			if (masked!=null) {
453
				masked.unmask() ;
453
				masked.unmask() ;
454
			}
454
			}
455
	}
455
	}
456
	
456
	
457
	public String getIdSelectionnees() {
457
	public String getIdSelectionnees() {
458
		
458
		
459
		Record[] sels = getSelectionModel().getSelections() ;
459
		Record[] sels = getSelectionModel().getSelections() ;
460
		
460
		
461
		String id = "";
461
		String id = "";
462
		
462
		
463
		for(int i = 0; i < sels.length; i++) {
463
		for(int i = 0; i < sels.length; i++) {
464
			id += ","+sels[i].getAsString("id_obs") ;
464
			id += ","+sels[i].getAsString("id_obs") ;
465
		}
465
		}
466
		
466
		
467
		id = id.replaceFirst(",", "");
467
		id = id.replaceFirst(",", "");
468
		
468
		
469
		return id ;
469
		return id ;
470
		
470
		
471
	}
471
	}
472
	
472
	
473
	public void supprimerLiaison() {
473
	public void supprimerLiaison() {
474
		
474
		
475
		
475
		
476
		Record[] rdObs = getSelectionModel().getSelections() ;
476
		Record[] rdObs = getSelectionModel().getSelections() ;
477
		
477
		
478
		for(int i = 0 ; i < rdObs.length ; i++) {
478
		for(int i = 0 ; i < rdObs.length ; i++) {
479
			
479
			
480
			getStore().remove(rdObs[i]) ;
480
			getStore().remove(rdObs[i]) ;
481
			this.getView().refresh() ;
481
			this.getView().refresh() ;
482
		
482
		
483
		}
483
		}
484
		
484
		
485
	}
485
	}
486
	
486
	
487
	public void redimensionner() {
487
	public void redimensionner() {
488
		if(getView() != null) {
488
		if(getView() != null) {
489
			
489
			
490
			int taille = 400;
490
			int taille = 400;
491
			
491
			
492
			if(Window.getClientHeight() > 800 ) {
492
			if(Window.getClientHeight() > 800 ) {
493
				taille = Window.getClientHeight() - 350;
493
				taille = Window.getClientHeight() - 350;
494
			}
494
			}
495
			setHeight(taille);
495
			setHeight(taille);
496
			getView().setForceFit(true);
496
			getView().setForceFit(true);
497
			doLayout();
497
			doLayout();
498
		}
498
		}
499
		else {
499
		else {
500
 
500
 
501
		}
501
		}
502
	}
502
	}
503
	
503
	
504
	/**
504
	/**
505
	 * Montre le menu de liaison aux coordonnées indiquées
505
	 * Montre le menu de liaison aux coordonnées indiquées
506
	 * @param e
506
	 * @param e
507
	 */
507
	 */
508
	public void montrerContextMenuLiaison(EventObject e) {
508
	public void montrerContextMenuLiaison(EventObject e) {
509
		
509
		
510
		final Menu liObs = new Menu();
510
		final Menu liObs = new Menu();
511
		final Item lierObservation = new Item("Lier aux images selectionnées");
511
		final Item lierObservation = new Item("Lier aux images selectionnées");
512
		liObs.addItem(lierObservation);
512
		liObs.addItem(lierObservation);
513
		
513
		
514
		liObs.addListener(new MenuListenerAdapter() {
514
		liObs.addListener(new MenuListenerAdapter() {
515
 
515
 
516
			// gestion du clic sur un item
516
			// gestion du clic sur un item
517
			public void onItemClick(BaseItem item, EventObject ev) {
517
			public void onItemClick(BaseItem item, EventObject ev) {
518
 
518
 
519
				// si c'est la suppression
519
				// si c'est la suppression
520
				if (item.equals(lierObservation)) {
520
				if (item.equals(lierObservation)) {
521
					// on notifie le médiateur
521
					// on notifie le médiateur
522
 
522
 
523
				}
523
				}
524
				
524
				
525
				// enfin, on cache le menu
525
				// enfin, on cache le menu
526
				liObs.hide();
526
				liObs.hide();
527
 
527
 
528
			}
528
			}
529
 
529
 
530
		});
530
		});
531
		
531
		
532
		liObs.showAt(e.getXY());
532
		liObs.showAt(e.getXY());
533
	}
533
	}
534
 
534
 
535
	public void changerNumeroPage(int pageCourante) {
535
	public void changerNumeroPage(int pageCourante) {
536
		
536
		
537
		pageEnCours = pageCourante ;	
537
		pageEnCours = pageCourante ;	
538
		masquerChargement();
538
		masquerChargement();
539
 
539
 
540
		// On lance le chargerment des observations
540
		// On lance le chargerment des observations
541
		iMediateur.obtenirNombreMiniListeObservations(this);
541
		iMediateur.obtenirNombreMiniListeObservations(this);
542
		
542
		
543
	}
543
	}
544
	
544
	
545
	/**
545
	/**
546
	 * Appelle le modèle pour qu'il change la taille de page utilisée
546
	 * Appelle le modèle pour qu'il change la taille de page utilisée
547
	 * @param nouvelleTaillePage la nouvelle taille de page
547
	 * @param nouvelleTaillePage la nouvelle taille de page
548
	 */
548
	 */
549
	
549
	
550
	public void changerTaillePage(int nouvelleTaillePage)
550
	public void changerTaillePage(int nouvelleTaillePage)
551
	{
551
	{
552
	
552
	
553
		taillePage = nouvelleTaillePage ;
553
		taillePage = nouvelleTaillePage ;
554
		pageEnCours = calculerPageCourante(nbElements) ;
554
		pageEnCours = calculerPageCourante(nbElements) ;
555
 
555
 
556
		masquerChargement();
556
		masquerChargement();
557
 
557
 
558
		// On lance le chargerment des observations
558
		// On lance le chargerment des observations
559
		iMediateur.obtenirNombreMiniListeObservations(this);
559
		iMediateur.obtenirNombreMiniListeObservations(this);
560
		
560
		
561
		
561
		
562
		// et on met à jour la taille de page dans les barres d'outils
562
		// et on met à jour la taille de page dans les barres d'outils
563
		pgBar.selectionnerTaillePage(nouvelleTaillePage);
563
		pgBar.selectionnerTaillePage(nouvelleTaillePage);
564
		
564
		
565
		
565
		
566
	}
566
	}
567
	
567
	
568
	/**
568
	/**
569
	 * Met à jour les barre d'outils avec des nouvelles valeurs
569
	 * Met à jour les barre d'outils avec des nouvelles valeurs
570
	 * @param pageMax le nombre de pages
570
	 * @param pageMax le nombre de pages
571
	 * @param pageEncours la page en cours
571
	 * @param pageEncours la page en cours
572
	 * @param taillePage la taille de page
572
	 * @param taillePage la taille de page
573
	 * @param nbElement le nombre d'élements par page
573
	 * @param nbElement le nombre d'élements par page
574
	 */
574
	 */
575
	public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement) 
575
	public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement) 
576
	{
576
	{
577
				
577
				
578
		int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
578
		int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
579
		pgBar.rafraichir(pages, false) ;
579
		pgBar.rafraichir(pages, false) ;
580
		
580
		
581
	}
581
	}
582
	
582
	
583
	/**
583
	/**
584
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
584
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
585
	 * en cours
585
	 * en cours
586
	 * @param nbElements le nombre d'élements total
586
	 * @param nbElements le nombre d'élements total
587
	 * @return le nombre de pages 
587
	 * @return le nombre de pages 
588
	 */
588
	 */
589
	public int calculerNbPages(int nbElements)
589
	public int calculerNbPages(int nbElements)
590
	{
590
	{
591
		// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
591
		// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
592
		// pour eviter qu'il arrondisse mal la division
592
		// pour eviter qu'il arrondisse mal la division
593
		// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur
593
		// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur
594
		
594
		
595
		double nPage = (1.0*nbElements)/(1.0*taillePage) ; 
595
		double nPage = (1.0*nbElements)/(1.0*taillePage) ; 
596
		double nPageRound = Math.ceil(nPage) ;
596
		double nPageRound = Math.ceil(nPage) ;
597
		Double nPageInt = new Double(nPageRound) ;
597
		Double nPageInt = new Double(nPageRound) ;
598
		
598
		
599
		// on convertit en entier
599
		// on convertit en entier
600
		return nPageInt.intValue() ; 
600
		return nPageInt.intValue() ; 
601
	}
601
	}
602
 
602
 
603
	
603
	
604
	/**
604
	/**
605
	 * Recalcule la page en cours lors du changement du nombre d'élements
605
	 * Recalcule la page en cours lors du changement du nombre d'élements
606
	 * @param nbElements le nombre d'élements total
606
	 * @param nbElements le nombre d'élements total
607
	 * @return la nouvelle page encours
607
	 * @return la nouvelle page encours
608
	 */
608
	 */
609
	public int calculerPageCourante(int nbElements)
609
	public int calculerPageCourante(int nbElements)
610
	{
610
	{
611
		// on calcule le nombre de page
611
		// on calcule le nombre de page
612
		int nouvelNbPages = calculerNbPages(nbElements) ;
612
		int nouvelNbPages = calculerNbPages(nbElements) ;
613
		// la nouvelle page en cours
613
		// la nouvelle page en cours
614
		double nPageCourante = (1.0*pageEnCours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
614
		double nPageCourante = (1.0*pageEnCours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
615
		
615
		
616
		// on arrondit au supérieur
616
		// on arrondit au supérieur
617
		double nPageRound = Math.ceil(nPageCourante) ;
617
		double nPageRound = Math.ceil(nPageCourante) ;
618
		Double nPageInt = new Double(nPageRound) ;
618
		Double nPageInt = new Double(nPageRound) ;
619
		
619
		
620
		// on convertit en entier
620
		// on convertit en entier
621
		return Math.abs(nPageInt.intValue()) ; 
621
		return Math.abs(nPageInt.intValue()) ; 
622
	}
622
	}
623
	
623
	
624
	public boolean verifierFormatDate(String date) {
624
	public boolean verifierFormatDate(String date) {
625
		
625
		
626
		String regex = "[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}" ;
626
		String regex = "[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}" ;
627
		if(date.matches(regex) && !date.equals("0000-00-00")) {
627
		if(date.matches(regex) && !date.equals("0000-00-00")) {
628
			return true ;
628
			return true ;
629
		}
629
		}
630
		else {
630
		else {
631
			return false;
631
			return false;
632
		}
632
		}
633
	}
633
	}
634
}
634
}