Subversion Repositories eFlore/Applications.cel

Rev

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

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