Subversion Repositories eFlore/Applications.cel

Rev

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

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