Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2624 Rev 2626
1
package org.tela_botanica.client.observation;
1
package org.tela_botanica.client.observation;
2
 
2
 
3
 
3
 
4
import org.tela_botanica.client.CarnetEnLigneMediateur;
4
import org.tela_botanica.client.CarnetEnLigneMediateur;
5
import org.tela_botanica.client.i18n.Msg;
5
import org.tela_botanica.client.i18n.Msg;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.modeles.dao.InformationLocaliteDAO;
7
import org.tela_botanica.client.modeles.dao.InformationLocaliteDAO;
8
import org.tela_botanica.client.modeles.objets.Configuration;
8
import org.tela_botanica.client.modeles.objets.Configuration;
9
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
9
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
10
import org.tela_botanica.client.modeles.objets.InfosReferentielNom;
10
import org.tela_botanica.client.modeles.objets.InfosReferentielNom;
11
import org.tela_botanica.client.modeles.objets.ListeObservation;
11
import org.tela_botanica.client.modeles.objets.ListeObservation;
12
import org.tela_botanica.client.modeles.objets.Observation;
12
import org.tela_botanica.client.modeles.objets.Observation;
13
import org.tela_botanica.client.modeles.objets.Utilisateur;
13
import org.tela_botanica.client.modeles.objets.Utilisateur;
14
import org.tela_botanica.client.vues.observation.CartographieObservationVue;
14
import org.tela_botanica.client.vues.observation.CartographieObservationVue;
15
import org.tela_botanica.client.vues.observation.FormulaireImportObservationVue;
15
import org.tela_botanica.client.vues.observation.FormulaireImportObservationVue;
16
import org.tela_botanica.client.vues.observation.FormulaireSaisieObservationVue;
16
import org.tela_botanica.client.vues.observation.FormulaireSaisieObservationVue;
17
import org.tela_botanica.client.vues.observation.ListeObservationVue;
17
import org.tela_botanica.client.vues.observation.ListeObservationVue;
18
import org.tela_botanica.client.vues.observation.MenuObservationVue;
18
import org.tela_botanica.client.vues.observation.MenuObservationVue;
19
import org.tela_botanica.client.vues.observation.PanneauFiltresObservationVues;
19
import org.tela_botanica.client.vues.observation.PanneauFiltresObservationVues;
20
import org.tela_botanica.client.vues.observation.indicateurs.ImageGeneriqueVue;
20
import org.tela_botanica.client.vues.observation.indicateurs.ImageGeneriqueVue;
21
import org.tela_botanica.client.vues.observation.indicateurs.InformationRepartitionVue;
21
import org.tela_botanica.client.vues.observation.indicateurs.InformationRepartitionVue;
22
import org.tela_botanica.client.vues.observation.indicateurs.LienExterneVue;
22
import org.tela_botanica.client.vues.observation.indicateurs.LienExterneVue;
23
import org.tela_botanica.client.vues.observation.indicateurs.MiniZoomImageVue;
23
import org.tela_botanica.client.vues.observation.indicateurs.MiniZoomImageVue;
24
 
24
 
25
import com.google.gwt.core.client.GWT;
25
import com.google.gwt.core.client.GWT;
26
import com.google.gwt.user.client.History;
26
import com.google.gwt.user.client.History;
27
import com.google.gwt.user.client.Window;
27
import com.google.gwt.user.client.Window;
28
import com.gwtext.client.core.EventObject;
28
import com.gwtext.client.core.EventObject;
29
import com.gwtext.client.core.Ext;
29
import com.gwtext.client.core.Ext;
30
import com.gwtext.client.core.ExtElement;
30
import com.gwtext.client.core.ExtElement;
31
import com.gwtext.client.core.RegionPosition;
31
import com.gwtext.client.core.RegionPosition;
32
import com.gwtext.client.data.Record;
32
import com.gwtext.client.data.Record;
33
import com.gwtext.client.data.Tree;
33
import com.gwtext.client.data.Tree;
34
import com.gwtext.client.dd.DragData;
34
import com.gwtext.client.dd.DragData;
35
import com.gwtext.client.widgets.BoxComponent;
35
import com.gwtext.client.widgets.BoxComponent;
36
import com.gwtext.client.widgets.Component;
36
import com.gwtext.client.widgets.Component;
37
import com.gwtext.client.widgets.Container;
37
import com.gwtext.client.widgets.Container;
38
import com.gwtext.client.widgets.Panel;
38
import com.gwtext.client.widgets.Panel;
39
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
39
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
40
import com.gwtext.client.widgets.event.PanelListenerAdapter;
40
import com.gwtext.client.widgets.event.PanelListenerAdapter;
41
import com.gwtext.client.widgets.grid.GridDragData;
41
import com.gwtext.client.widgets.grid.GridDragData;
42
import com.gwtext.client.widgets.layout.BorderLayout;
42
import com.gwtext.client.widgets.layout.BorderLayout;
43
import com.gwtext.client.widgets.layout.BorderLayoutData;
43
import com.gwtext.client.widgets.layout.BorderLayoutData;
44
import com.gwtext.client.widgets.layout.FitLayout;
44
import com.gwtext.client.widgets.layout.FitLayout;
45
import com.gwtext.client.widgets.layout.RowLayout;
45
import com.gwtext.client.widgets.layout.RowLayout;
46
import com.gwtext.client.widgets.layout.RowLayoutData;
46
import com.gwtext.client.widgets.layout.RowLayoutData;
47
import com.gwtext.client.widgets.tree.TreeNode;
47
import com.gwtext.client.widgets.tree.TreeNode;
48
 
48
 
49
 
49
 
50
/**
50
/**
51
 * Mediateur gérant les interactions entre vues et les echanges de données
51
 * Mediateur gérant les interactions entre vues et les echanges de données
52
 * C'est un singleton. 
52
 * C'est un singleton. 
53
 * @author aurelien
53
 * @author aurelien
54
 *
54
 *
55
 */
55
 */
56
public class ObservationMediateur {
56
public class ObservationMediateur {
57
	
57
	
58
	/**
58
	/**
59
	 * booleen qui verifie l'unicite de l'instance (donc static)
59
	 * booleen qui verifie l'unicite de l'instance (donc static)
60
	 */
60
	 */
61
	private static boolean estInstancie = false ;
61
	private static boolean estInstancie = false ;
62
 
62
 
63
	/**
63
	/**
64
	 * pointeur sur le médiateur (pour le pattern singleton)
64
	 * pointeur sur le médiateur (pour le pattern singleton)
65
	 */
65
	 */
66
	private static ObservationMediateur thisMediateur = null ;  
66
	private static ObservationMediateur thisMediateur = null ;  
67
	
67
	
68
	/** Mediateur general de l'application carnet en ligne
68
	/** Mediateur general de l'application carnet en ligne
69
	 * 
69
	 * 
70
	 * 
70
	 * 
71
	 */
71
	 */
72
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;
72
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;
73
	
73
	
74
	
74
	
75
	/**
75
	/**
76
	 * modele de données
76
	 * modele de données
77
	 */
77
	 */
78
	private ObservationModele observationModele = null ;
78
	private ObservationModele observationModele = null ;
79
	
79
	
80
	
80
	
81
	/**
81
	/**
82
	 * panneau principal des Observation (onglet "observation")
82
	 * panneau principal des Observation (onglet "observation")
83
	 */
83
	 */
84
	private final Panel panneauPrincipalObservation = new Panel(Msg.get("observations"));
84
	private final Panel panneauPrincipalObservation = new Panel(Msg.get("observations"));
85
	
85
	
86
	
86
	
87
	/**
87
	/**
88
	 * liste détaillée des Observations
88
	 * liste détaillée des Observations
89
	 */
89
	 */
90
	public ListeObservationVue listeObservation = null ;
90
	public ListeObservationVue listeObservation = null ;
91
	
91
	
92
	/**
92
	/**
93
	 * Saisie des Observations
93
	 * Saisie des Observations
94
	 */
94
	 */
95
	private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;
95
	private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;
96
	
96
	
97
	
97
	
98
	/**
98
	/**
99
	 * 
99
	 * 
100
	 * Import des observations depuis un fichier
100
	 * Import des observations depuis un fichier
101
	 * 
101
	 * 
102
	 */
102
	 */
103
	private FormulaireImportObservationVue formImportObs=null;
103
	private FormulaireImportObservationVue formImportObs=null;
104
	
104
	
105
	
105
	
106
	/**
106
	/**
107
	 * Cartographie
107
	 * Cartographie
108
	 */
108
	 */
109
	private CartographieObservationVue cartoObservationVue = null;
109
	private CartographieObservationVue cartoObservationVue = null;
110
	
110
	
111
	
111
	
112
 
112
 
113
	/**
113
	/**
114
	 * booleen explicitant s'il y a une selection en cours
114
	 * booleen explicitant s'il y a une selection en cours
115
	 */
115
	 */
116
	private boolean selection = false ;		
116
	private boolean selection = false ;		
117
	/**
117
	/**
118
	 * panneau conteneur pour le panneau  des informations lies à l'observation
118
	 * panneau conteneur pour le panneau  des informations lies à l'observation
119
	 */
119
	 */
120
	
120
	
121
  	private Panel details = new Panel(Msg.get("details"));
121
  	private Panel details = new Panel(Msg.get("details"));
122
 
122
 
123
  	private LienExterneVue liExtVue = null;
123
  	private LienExterneVue liExtVue = null;
124
 
124
 
125
	/**
125
	/**
126
	 * panneau conteneur pour le panneau des filtres
126
	 * panneau conteneur pour le panneau des filtres
127
	 */
127
	 */
128
	
128
	
129
  	private PanneauFiltresObservationVues filtres = null;
129
  	private PanneauFiltresObservationVues filtres = null;
130
 
130
 
131
	
131
	
132
  	
132
  	
133
  	/** 
133
  	/** 
134
  	 * panneau d'information de repartition sur le nom selectionné 
134
  	 * panneau d'information de repartition sur le nom selectionné 
135
  	 * 
135
  	 * 
136
  	 */
136
  	 */
137
  	
137
  	
138
  	private InformationRepartitionVue informationRepartitionVue=null;
138
  	private InformationRepartitionVue informationRepartitionVue=null;
139
  	
139
  	
140
  	
140
  	
141
  	/** 
141
  	/** 
142
  	 * panneau d'affichage d'une image generique associe au nom selectionne 
142
  	 * panneau d'affichage d'une image generique associe au nom selectionne 
143
  	 * 
143
  	 * 
144
  	 */
144
  	 */
145
  	
145
  	
146
  	private ImageGeneriqueVue imageGeneriqueVue=null;
146
  	private ImageGeneriqueVue imageGeneriqueVue=null;
147
  	
147
  	
148
  	private MiniZoomImageVue mvz = null ;
148
  	private MiniZoomImageVue mvz = null ;
149
  	
149
  	
150
  	private boolean importerObservations = false ;
150
  	private boolean importerObservations = false ;
151
 
151
 
152
	private com.gwtext.client.widgets.Window fenetreCarto;
152
	private com.gwtext.client.widgets.Window fenetreCarto;
153
	public boolean changementTabProg = false;
153
	public boolean changementTabProg = false;
154
	
154
	
155
	private InfosReferentielNom refTaxSelectionne = null;
155
	private InfosReferentielNom refTaxSelectionne = null;
156
 
156
 
157
	private Panel centre;
157
	private Panel centre;
158
  	
158
  	
159
	/**
159
	/**
160
	 * constructeur privé (on accède a la classe par la méthode getInstance
160
	 * constructeur privé (on accède a la classe par la méthode getInstance
161
	 */
161
	 */
162
	
162
	
163
	
163
	
164
	private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
164
	private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
165
	{
165
	{
166
		this.carnetEnLigneMediateur=carnetEnLigneMediateur;					
166
		this.carnetEnLigneMediateur=carnetEnLigneMediateur;					
167
		// on crée un modèle
167
		// on crée un modèle
168
		observationModele = ObservationModele.Instance(this);
168
		observationModele = ObservationModele.Instance(this);
169
		
169
		
170
		// initialisation du référentiel par défaut
170
		// initialisation du référentiel par défaut
171
		setRefTaxSelectionne(Configuration.getReferentielsDispos().get(0));	
171
		setRefTaxSelectionne(Configuration.getReferentielsDispos().get(0));	
172
	
172
	
173
		listeObservation = new ListeObservationVue(this);
173
		listeObservation = new ListeObservationVue(this);
174
		listeObservation.setTitle(Msg.get("observations"));
174
		listeObservation.setTitle(Msg.get("observations"));
175
		
175
		
176
		// quelques variables de position pour les borderlayouts
176
		// quelques variables de position pour les borderlayouts
177
		final BorderLayoutData regionNord = new BorderLayoutData(
177
		final BorderLayoutData regionNord = new BorderLayoutData(
178
				RegionPosition.NORTH);
178
				RegionPosition.NORTH);
179
 
179
 
180
		final BorderLayoutData regionCentre = new BorderLayoutData(
180
		final BorderLayoutData regionCentre = new BorderLayoutData(
181
				RegionPosition.CENTER);
181
				RegionPosition.CENTER);
182
		regionCentre.setSplit(true);
182
		regionCentre.setSplit(true);
183
 
183
 
184
		  
184
		  
185
		final BorderLayoutData regionEst = new BorderLayoutData(
185
		final BorderLayoutData regionEst = new BorderLayoutData(
186
				RegionPosition.EAST);
186
				RegionPosition.EAST);
187
		regionEst.setSplit(true);
187
		regionEst.setSplit(true);
188
	
188
	
189
 
189
 
190
		final BorderLayoutData regionOuest = new BorderLayoutData(
190
		final BorderLayoutData regionOuest = new BorderLayoutData(
191
				RegionPosition.WEST);
191
				RegionPosition.WEST);
192
		regionOuest.setSplit(true);
192
		regionOuest.setSplit(true);
193
		
193
		
194
		
194
		
195
		panneauPrincipalObservation.setLayout(new BorderLayout()) ;
195
		panneauPrincipalObservation.setLayout(new BorderLayout()) ;
196
		cartoObservationVue = new CartographieObservationVue(this);
196
		cartoObservationVue = new CartographieObservationVue(this);
197
		cartoObservationVue.setLayout(new FitLayout());
197
		cartoObservationVue.setLayout(new FitLayout());
198
		
198
		
199
		// Le formulaire de saisie / modification d'observation
199
		// Le formulaire de saisie / modification d'observation
200
		formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);
200
		formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);
201
		formulaireSaisieObservationVue.setTitle(Msg.get("saisie"));
201
		formulaireSaisieObservationVue.setTitle(Msg.get("saisie"));
202
		formulaireSaisieObservationVue.setTitleCollapse(true);
202
		formulaireSaisieObservationVue.setTitleCollapse(true);
203
		formulaireSaisieObservationVue.setCollapsible(true) ;
203
		formulaireSaisieObservationVue.setCollapsible(true) ;
204
		formulaireSaisieObservationVue.setAutoScroll(true) ;
204
		formulaireSaisieObservationVue.setAutoScroll(true) ;
205
		
205
		
206
		fenetreCarto = new com.gwtext.client.widgets.Window();
206
		fenetreCarto = new com.gwtext.client.widgets.Window();
207
		fenetreCarto.setConstrain(true);
207
		fenetreCarto.setConstrain(true);
208
		fenetreCarto.setModal(true);
208
		fenetreCarto.setModal(true);
209
		fenetreCarto.setCloseAction(com.gwtext.client.widgets.Window.HIDE);
209
		fenetreCarto.setCloseAction(com.gwtext.client.widgets.Window.HIDE);
210
		
210
		
211
		fenetreCarto.add(cartoObservationVue);
211
		fenetreCarto.add(cartoObservationVue);
212
		
212
		
213
		formulaireSaisieObservationVue.addListener(
213
		formulaireSaisieObservationVue.addListener(
214
		new PanelListenerAdapter() {
214
		new PanelListenerAdapter() {
215
			@Override
215
			@Override
216
			public void onCollapse(Panel panel)  {
216
			public void onCollapse(Panel panel)  {
217
				CarnetEnLigneMediateur.fireResize();
217
				CarnetEnLigneMediateur.fireResize();
218
			}
218
			}
219
		    @Override
219
		    @Override
220
			public void onExpand(Panel panel) {
220
			public void onExpand(Panel panel) {
221
		    	CarnetEnLigneMediateur.fireResize();
221
		    	CarnetEnLigneMediateur.fireResize();
222
		    }
222
		    }
223
		});
223
		});
224
		
224
		
225
		centre = new Panel();
225
		centre = new Panel();
226
		centre.setLayout(new BorderLayout());
226
		centre.setLayout(new BorderLayout());
227
		centre.setAutoScroll(true);
227
		centre.setAutoScroll(true);
228
		centre.setBorder(false);
228
		centre.setBorder(false);
229
		
229
		
230
		centre.addListener(
230
		centre.addListener(
231
			new PanelListenerAdapter() {
231
			new PanelListenerAdapter() {
232
				@Override
232
				@Override
233
				public void onCollapse(Panel panel)  {
233
				public void onCollapse(Panel panel)  {
234
					CarnetEnLigneMediateur.fireResize();
234
					CarnetEnLigneMediateur.fireResize();
235
				}
235
				}
236
			    @Override
236
			    @Override
237
				public void onExpand(Panel panel) {
237
				public void onExpand(Panel panel) {
238
			    	CarnetEnLigneMediateur.fireResize();
238
			    	CarnetEnLigneMediateur.fireResize();
239
			    }
239
			    }
240
			    
240
			    
241
				@Override
241
				@Override
242
				public void onResize(BoxComponent component, int adjWidth,
242
				public void onResize(BoxComponent component, int adjWidth,
243
						int adjHeight, int rawWidth, int rawHeight) {
243
						int adjHeight, int rawWidth, int rawHeight) {
244
					formulaireSaisieObservationVue.redimensionnerFormulaire();
244
					formulaireSaisieObservationVue.redimensionnerFormulaire();
245
					listeObservation.doLayout();
245
					listeObservation.doLayout();
246
				}
246
				}
247
				
247
				
248
				@Override
248
				@Override
249
				public void onAfterLayout(Container self) {
249
				public void onAfterLayout(Container self) {
250
					
250
					
251
				}
251
				}
252
		});
252
		});
253
		
253
		
254
		formulaireSaisieObservationVue.setBorder(false);
254
		formulaireSaisieObservationVue.setBorder(false);
255
		
255
		
256
		BorderLayoutData listeLayoutData = new BorderLayoutData(RegionPosition.SOUTH);
256
		BorderLayoutData listeLayoutData = new BorderLayoutData(RegionPosition.SOUTH);
257
		listeLayoutData.setSplit(true);
257
		listeLayoutData.setSplit(true);
258
		
258
		
259
		BorderLayoutData formLayoutData = new BorderLayoutData(RegionPosition.CENTER);
259
		BorderLayoutData formLayoutData = new BorderLayoutData(RegionPosition.CENTER);
260
		formLayoutData.setSplit(true);
260
		formLayoutData.setSplit(true);
261
		
261
		
262
		centre.add(listeObservation, listeLayoutData);
262
		centre.add(listeObservation, listeLayoutData);
263
		centre.add(formulaireSaisieObservationVue, formLayoutData);
263
		centre.add(formulaireSaisieObservationVue, formLayoutData);
264
 
264
 
265
		// Redimensionnement global sur collapse/expand
265
		// Redimensionnement global sur collapse/expand
266
		details.addListener(
266
		details.addListener(
267
			new PanelListenerAdapter() {
267
			new PanelListenerAdapter() {
268
				@Override
268
				@Override
269
				public void onCollapse(Panel panel)  {
269
				public void onCollapse(Panel panel)  {
270
					CarnetEnLigneMediateur.fireResize();
270
					CarnetEnLigneMediateur.fireResize();
271
				}
271
				}
272
			    @Override
272
			    @Override
273
				public void onExpand(Panel panel) {
273
				public void onExpand(Panel panel) {
274
					
274
					
275
			    	String[] selectionListe = listeObservation.getIdSelectionnees();
275
			    	String[] selectionListe = listeObservation.getIdSelectionnees();
276
			    	if(selectionListe.length > 0) {
276
			    	if(selectionListe.length > 0) {
277
			    		Observation obs = listeObservation.getCacheListeObservation().get(selectionListe[0]);
277
			    		Observation obs = listeObservation.getCacheListeObservation().get(selectionListe[0]);
278
			    		obtenirImageInformationExternes(obs.getCodeCourtReferentielTaxo(), obs.getNumeroNomenclaturalSaisi());
278
			    		obtenirImageInformationExternes(obs.getCodeCourtReferentielTaxo(), obs.getNumeroNomenclaturalSaisi());
279
			    	}
279
			    	}
280
			    	CarnetEnLigneMediateur.fireResize();
280
			    	CarnetEnLigneMediateur.fireResize();
281
			    }
281
			    }
282
		});
282
		});
283
					
283
					
284
		// on initialise le volet qui contient les details
284
		// on initialise le volet qui contient les details
285
		details.setWidth("10%");
285
		details.setWidth("10%");
286
		details.setTitleCollapse(true);
286
		details.setTitleCollapse(true);
287
		details.setCollapsible(true);
287
		details.setCollapsible(true);
288
		
288
		
289
		details.setAutoScroll(true);
289
		details.setAutoScroll(true);
290
		details.setLayout(new RowLayout());
290
		details.setLayout(new RowLayout());
291
		
291
		
292
		// Lien vers eflore
292
		// Lien vers eflore
293
		liExtVue = new LienExterneVue(this);
293
		liExtVue = new LienExterneVue(this);
294
		liExtVue.setHeight("20px");
294
		liExtVue.setHeight("20px");
295
		details.add(liExtVue);
295
		details.add(liExtVue);
296
		
296
		
297
		// Information de repartition
297
		// Information de repartition
298
		informationRepartitionVue=new InformationRepartitionVue(this);
298
		informationRepartitionVue=new InformationRepartitionVue(this);
299
		details.add(informationRepartitionVue, new RowLayoutData("30%"));
299
		details.add(informationRepartitionVue, new RowLayoutData("30%"));
300
		
300
		
301
		// Image generique
301
		// Image generique
302
		imageGeneriqueVue=new ImageGeneriqueVue(this);
302
		imageGeneriqueVue=new ImageGeneriqueVue(this);
303
		details.add(imageGeneriqueVue, new RowLayoutData("30%"));
303
		details.add(imageGeneriqueVue, new RowLayoutData("30%"));
304
		
304
		
305
		mvz = new MiniZoomImageVue(this) ; 
305
		mvz = new MiniZoomImageVue(this) ; 
306
		
306
		
307
		details.add(mvz, new RowLayoutData("34%")) ;	
307
		details.add(mvz, new RowLayoutData("34%")) ;	
308
		
308
		
309
		// on crée le panneau des filtres
309
		// on crée le panneau des filtres
310
		filtres = new PanneauFiltresObservationVues(this);
310
		filtres = new PanneauFiltresObservationVues(this);
311
		
311
		
312
		// on initialise le volet qui contient les filtres
312
		// on initialise le volet qui contient les filtres
313
		filtres.setWidth("10%");
313
		filtres.setWidth("10%");
314
		filtres.setTitleCollapse(true);
314
		filtres.setTitleCollapse(true);
315
		filtres.setCollapsible(true);
315
		filtres.setCollapsible(true);
316
		
316
		
317
		
317
		
318
		filtres.addListener(
318
		filtres.addListener(
319
			new PanelListenerAdapter() {
319
			new PanelListenerAdapter() {
320
				@Override
320
				@Override
321
				public void onCollapse(Panel panel)  {
321
				public void onCollapse(Panel panel)  {
322
					CarnetEnLigneMediateur.fireResize();
322
					CarnetEnLigneMediateur.fireResize();
323
				}
323
				}
324
			    @Override
324
			    @Override
325
				public void onExpand(Panel panel) {
325
				public void onExpand(Panel panel) {
326
			    	CarnetEnLigneMediateur.fireResize();
326
			    	CarnetEnLigneMediateur.fireResize();
327
			    }
327
			    }
328
		});
328
		});
329
		
329
		
330
		panneauPrincipalObservation.add(details,regionEst);
330
		panneauPrincipalObservation.add(details,regionEst);
331
		
331
		
332
		panneauPrincipalObservation.add(filtres,regionOuest);
332
		panneauPrincipalObservation.add(filtres,regionOuest);
333
		panneauPrincipalObservation.add(centre,regionCentre);
333
		panneauPrincipalObservation.add(centre,regionCentre);
334
	}
334
	}
335
	
335
	
336
	/**
336
	/**
337
	 * Retourne une instance de manière unique
337
	 * Retourne une instance de manière unique
338
	 * @return l'instance unique du médiateur
338
	 * @return l'instance unique du médiateur
339
	 */
339
	 */
340
	public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur)
340
	public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur)
341
	{
341
	{
342
			if(!estInstancie || thisMediateur == null)
342
			if(!estInstancie || thisMediateur == null)
343
			{
343
			{
344
				estInstancie = true ;
344
				estInstancie = true ;
345
				thisMediateur = new ObservationMediateur(carnetEnLigneMediateur) ;
345
				thisMediateur = new ObservationMediateur(carnetEnLigneMediateur) ;
346
			}
346
			}
347
			
347
			
348
			return thisMediateur ;	
348
			return thisMediateur ;	
349
	}
349
	}
350
	
350
	
351
	
351
	
352
	public void connecterUtilisateur() {
352
	public void connecterUtilisateur() {
353
		
353
		
354
		if(importerObservations) {
354
		if(importerObservations) {
355
			observationModele.importerObservations();
355
			observationModele.importerObservations();
356
		}
356
		}
357
		
357
		
358
		if(panneauPrincipalObservation == null || !panneauPrincipalObservation.isCreated()) 
358
		if(panneauPrincipalObservation == null || !panneauPrincipalObservation.isCreated()) 
359
		{
359
		{
360
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
360
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
361
			{
361
			{
362
				@Override
362
				@Override
363
				public void onRender(Component c)
363
				public void onRender(Component c)
364
				{
364
				{
365
					panneauPrincipalObservation.purgeListeners() ;
365
					panneauPrincipalObservation.purgeListeners() ;
366
					initialiserArbres();
366
					initialiserArbres();
367
					filtres.getRechercheLibreVue().raz();
367
					filtres.getRechercheLibreVue().raz();
368
					obtenirNombreObservation();
368
					obtenirNombreObservation();
369
					analyserHistorique();
369
					analyserHistorique();
370
				}
370
				}
371
			}) ;
371
			}) ;
372
		}
372
		}
373
		else
373
		else
374
		{
374
		{
375
			initialiserArbres();
375
			initialiserArbres();
376
			filtres.getRechercheLibreVue().raz();
376
			filtres.getRechercheLibreVue().raz();
377
			obtenirNombreObservation();
377
			obtenirNombreObservation();
378
			analyserHistorique();
378
			analyserHistorique();
379
		}
379
		}
380
	}
380
	}
381
	
381
	
382
	private void initialiserArbres() {
382
	private void initialiserArbres() {
383
		getPanneauFiltres().getArbreDateObservationFiltreVue().initialiser();
383
		getPanneauFiltres().getArbreDateObservationFiltreVue().initialiser();
384
		getPanneauFiltres().getArbreEntiteGeographiqueObservationFiltreVue().initialiser();		
384
		getPanneauFiltres().getArbreEntiteGeographiqueObservationFiltreVue().initialiser();		
385
		getPanneauFiltres().getArbreMotsClesObservationVue().initialiser();	
385
		getPanneauFiltres().getArbreMotsClesObservationVue().initialiser();	
386
	}
386
	}
387
 
387
 
388
	
388
	
389
	
389
	
390
	// ACTIONS  a entreprendre lors d'un evenement particulier 
390
	// ACTIONS  a entreprendre lors d'un evenement particulier 
391
	/**
391
	/**
392
	 * Lors du raffraichissement de la liste d'observation  
392
	 * Lors du raffraichissement de la liste d'observation  
393
	 */
393
	 */
394
	public void onRafraichissementListeObservations() {
394
	public void onRafraichissementListeObservations() {
395
		
395
		
396
		carnetEnLigneMediateur.donneesObsVersImages(listeObservation.getCacheListeObservation());
396
		carnetEnLigneMediateur.donneesObsVersImages(listeObservation.getCacheListeObservation());
397
		observationModele.rafraichirCacheObservation(listeObservation.getCacheListeObservation());
397
		observationModele.rafraichirCacheObservation(listeObservation.getCacheListeObservation());
398
		
398
		
399
		filtres.getArbreMotsClesObservationVue().cocherMotsCles(new String[0]);
399
		filtres.getArbreMotsClesObservationVue().cocherMotsCles(new String[0]);
400
	}
400
	}
401
	
401
	
402
	/**
402
	/**
403
	 * 
403
	 * 
404
	 * TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation 
404
	 * TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation 
405
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
405
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
406
	 * médiateur gère alors les conséquences
406
	 * médiateur gère alors les conséquences
407
	 * 
407
	 * 
408
	 * @param rowIndex
408
	 * @param rowIndex
409
	 *            le numéro de ligne selectionné
409
	 *            le numéro de ligne selectionné
410
	 */
410
	 */
411
	
411
	
412
	public void onClicListeObservation(int rowIndex, String ordreObservation) {
412
	public void onClicListeObservation(int rowIndex, String ordreObservation) {
413
	
413
	
414
		Observation obs = obtenirCacheObservation().get(ordreObservation) ;
414
		Observation obs = obtenirCacheObservation().get(ordreObservation) ;
415
		
415
		
416
		if(GWT.isScript()) {
416
		if(GWT.isScript()) {
417
			masquerChargementInfosObservations() ;
417
			masquerChargementInfosObservations() ;
418
		}
418
		}
419
		
419
		
420
		gererMiseAJourFormulaireObservation();
420
		gererMiseAJourFormulaireObservation();
421
		gererMiseAJourPanneauDetails(obs);	
421
		gererMiseAJourPanneauDetails(obs);	
422
	}
422
	}
423
	
423
	
424
	public void gererMiseAJourPanneauDetails(Observation obs) {
424
	public void gererMiseAJourPanneauDetails(Observation obs) {
425
		// Affichage de l'image correspondante
425
		// Affichage de l'image correspondante
426
		if(details.isVisible()) {
426
		if(details.isVisible()) {
427
			// Affichage de la carte de repartition correspondante
427
			// Affichage de la carte de repartition correspondante
428
			String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalRetenu();
428
			String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalRetenu();
429
			if(numeroNomenclaturalSaisiObservation != null && !numeroNomenclaturalSaisiObservation.isEmpty()) {
429
			if(numeroNomenclaturalSaisiObservation != null && !numeroNomenclaturalSaisiObservation.isEmpty()) {
430
				observationModele.obtenirImageInformationRepartition(informationRepartitionVue,obs.getCodeCourtReferentielTaxo(), numeroNomenclaturalSaisiObservation) ;
430
				observationModele.obtenirImageInformationRepartition(informationRepartitionVue,obs.getCodeCourtReferentielTaxo(), numeroNomenclaturalSaisiObservation) ;
431
				observationModele.obtenirImageGenerique(imageGeneriqueVue,obs.getCodeCourtReferentielTaxo(), numeroNomenclaturalSaisiObservation) ;
431
				observationModele.obtenirImageGenerique(imageGeneriqueVue,obs.getCodeCourtReferentielTaxo(), numeroNomenclaturalSaisiObservation) ;
432
			} else {
432
			} else {
433
				informationRepartitionVue.rafraichir("", false);
433
				informationRepartitionVue.rafraichir("", false);
434
				imageGeneriqueVue.rafraichir("", false);
434
				imageGeneriqueVue.rafraichir("", false);
435
			}
435
			}
436
			observationModele.obtenirLiaisonImage(mvz, obs.getId()) ;
436
			observationModele.obtenirLiaisonImage(mvz, obs.getId()) ;
437
			String[] infosRafraichissementLienExterne = {numeroNomenclaturalSaisiObservation, obs.getReferentielTaxo()};
437
			String[] infosRafraichissementLienExterne = {numeroNomenclaturalSaisiObservation, obs.getReferentielTaxo()};
438
			liExtVue.rafraichir(infosRafraichissementLienExterne, false);
438
			liExtVue.rafraichir(infosRafraichissementLienExterne, false);
439
		}
439
		}
440
		filtres.getArbreMotsClesObservationVue().rafraichir(obs.getMotsCles(), false);
440
		filtres.getArbreMotsClesObservationVue().rafraichir(obs.getMotsCles(), false);
441
	}
441
	}
442
	
442
	
443
	public void gererMiseAJourFormulaireObservation() {
443
	public void gererMiseAJourFormulaireObservation() {
444
		String[] ids = listeObservation.getIdSelectionnees();
444
		String[] ids = listeObservation.getIdSelectionnees();
445
		if(ids.length == 1) {
445
		if(ids.length == 1) {
446
			Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length - 1]);
446
			Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length - 1]);
447
			// affichage des détails dans le formulaire d'observation
447
			// affichage des détails dans le formulaire d'observation
448
			formulaireSaisieObservationVue.rafraichir(obs, false) ;
448
			formulaireSaisieObservationVue.rafraichir(obs, false) ;
449
		} else {
449
		} else {
450
			ListeObservation listeObs = new ListeObservation();
450
			ListeObservation listeObs = new ListeObservation();
451
			for(int i=0; i < ids.length;i++) {
451
			for(int i=0; i < ids.length;i++) {
452
				Observation obsAjout = observationModele.getCacheObservation().get(ids[i]);
452
				Observation obsAjout = observationModele.getCacheObservation().get(ids[i]);
453
				listeObs.ajouterObservation(obsAjout);
453
				listeObs.ajouterObservation(obsAjout);
454
			}
454
			}
455
			formulaireSaisieObservationVue.rafraichir(listeObs, false);
455
			formulaireSaisieObservationVue.rafraichir(listeObs, false);
456
		}
456
		}
457
	}
457
	}
458
	
458
	
459
	public void obtenirImageInformationExternes(String referentielTaxo, String numeroNomenclaturalSaisiObservation) {	
459
	public void obtenirImageInformationExternes(String referentielTaxo, String numeroNomenclaturalSaisiObservation) {	
460
		if(details.isVisible()) {
460
		if(details.isVisible()) {
461
			if(GWT.isScript()) {
461
			if(GWT.isScript()) {
462
				masquerChargementInfosObservations() ;
462
				masquerChargementInfosObservations() ;
463
			}
463
			}
464
			String[] infosRefNom = {numeroNomenclaturalSaisiObservation, referentielTaxo};
464
			String[] infosRefNom = {numeroNomenclaturalSaisiObservation, referentielTaxo};
465
			liExtVue.rafraichir(infosRefNom, false);
465
			liExtVue.rafraichir(infosRefNom, false);
466
			observationModele.obtenirImageInformationRepartition(informationRepartitionVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ;
466
			observationModele.obtenirImageInformationRepartition(informationRepartitionVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ;
467
			observationModele.obtenirImageGenerique(imageGeneriqueVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ;
467
			observationModele.obtenirImageGenerique(imageGeneriqueVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ;
468
		}
468
		}
469
	}
469
	}
470
	
470
	
471
	public int getTaillePage() {
471
	public int getTaillePage() {
472
		return listeObservation.getTaillePage();
472
		return listeObservation.getTaillePage();
473
	}
473
	}
474
	
474
	
475
	public int getPageEnCours() {
475
	public int getPageEnCours() {
476
		return listeObservation.getPageEncours();
476
		return listeObservation.getPageEncours();
477
	}
477
	}
478
	
478
	
479
	
479
	
480
	// ACCES au Modèle 
480
	// ACCES au Modèle 
481
	// C du CRUD 
481
	// C du CRUD 
482
	/**
482
	/**
483
	 * TODO : afficher un message du type "observation ajouté".  
483
	 * TODO : afficher un message du type "observation ajouté".  
484
	 * Lance la creation d'une observation
484
	 * Lance la creation d'une observation
485
	 * @param obs : l'observation saisie
485
	 * @param obs : l'observation saisie
486
	 */	
486
	 */	
487
	public void ajouterObservation(Observation obs) {
487
	public void ajouterObservation(Observation obs) {
488
	  // On rafraichit la liste d'observation 
488
	  // On rafraichit la liste d'observation 
489
	  observationModele.ajouterObservation(listeObservation, obs) ;
489
	  observationModele.ajouterObservation(listeObservation, obs) ;
490
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
490
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
491
	  filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
491
	  filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
492
		
492
		
493
	}
493
	}
494
	
494
	
495
	// R du CRUD 
495
	// R du CRUD 
496
	/**
496
	/**
497
	 * Demande au modele le nombre d'Observation à afficher
497
	 * Demande au modele le nombre d'Observation à afficher
498
	 * TODO : grouper cette demande avec la demande d'affichage de liste ? 
498
	 * TODO : grouper cette demande avec la demande d'affichage de liste ? 
499
	 */
499
	 */
500
 
500
 
501
	public void obtenirNombreObservation() {
501
	public void obtenirNombreObservation() {
502
		
502
		
503
		listeObservation.masquerChargement() ;
503
		listeObservation.masquerChargement() ;
504
		mvz.raz() ;
504
		mvz.raz() ;
505
		imageGeneriqueVue.raz() ;
505
		imageGeneriqueVue.raz() ;
506
		informationRepartitionVue.raz() ;
506
		informationRepartitionVue.raz() ;
507
		
507
		
508
		observationModele.obtenirNombreObservation(listeObservation) ;
508
		observationModele.obtenirNombreObservation(listeObservation) ;
509
		
509
		
510
	}
510
	}
511
	
511
	
512
	/**
512
	/**
513
	 * Demande au modele le nombre d'Observation à afficher
513
	 * Demande au modele le nombre d'Observation à afficher
514
	 * TODO : grouper cette demande avec la demande d'affichage de liste ? 
514
	 * TODO : grouper cette demande avec la demande d'affichage de liste ? 
515
	 */
515
	 */
516
 
516
 
517
	public void obtenirDernierePageObservation() {
517
	public void obtenirDernierePageObservation() {
518
		
518
		
519
		listeObservation.rafraichir(new Observation(),false) ;
519
		listeObservation.rafraichir(new Observation(),false) ;
520
		
520
		
521
	}
521
	}
522
 
522
 
523
	
523
	
524
	
524
	
525
	public void obtenirListeObservation() {
525
	public void obtenirListeObservation() {
526
		obtenirListeObservation(listeObservation);
526
		obtenirListeObservation(listeObservation);
527
	}
527
	}
528
	
528
	
529
	/**
529
	/**
530
	 * Demande au modele le detail  des Observations à afficher
530
	 * Demande au modele le detail  des Observations à afficher
531
	 * TODO : grouper cette demande avec la demande d'affichage de liste ? 
531
	 * TODO : grouper cette demande avec la demande d'affichage de liste ? 
532
	 */
532
	 */
533
 
533
 
534
	
534
	
535
	public void obtenirListeObservation(Rafraichissable r) {
535
	public void obtenirListeObservation(Rafraichissable r) {
536
		
536
		
537
		listeObservation.masquerChargement() ;
537
		listeObservation.masquerChargement() ;
538
		observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
538
		observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
539
	}
539
	}
540
	
540
	
541
	public void obtenirCacheObservation(Rafraichissable r) {
541
	public void obtenirCacheObservation(Rafraichissable r) {
542
		
542
		
543
		r.rafraichir(observationModele.getCacheObservation(), false) ;
543
		r.rafraichir(observationModele.getCacheObservation(), false) ;
544
	}
544
	}
545
	
545
	
546
 
546
 
547
	/**
547
	/**
548
	 * Envoie au modèle une demande pour obtenir l'arbre des localites
548
	 * Envoie au modèle une demande pour obtenir l'arbre des localites
549
	 * 
549
	 * 
550
	 * @param r
550
	 * @param r
551
	 *            le raffraichissable qui a demandé la mise à jour
551
	 *            le raffraichissable qui a demandé la mise à jour
552
	 */
552
	 */
553
	public void obtenirListeEntiteGeographique() {
553
	public void obtenirListeEntiteGeographique() {
554
		
554
		
555
		observationModele.obtenirListeEntiteGeographique(filtres.getArbreEntiteGeographiqueObservationFiltreVue());
555
		observationModele.obtenirListeEntiteGeographique(filtres.getArbreEntiteGeographiqueObservationFiltreVue());
556
		
556
		
557
	}
557
	}
558
	
558
	
559
	
559
	
560
	// U du CRUD
560
	// U du CRUD
561
	public void modifierObservation(Observation obs) {
561
	public void modifierObservation(Observation obs) {
562
		
562
		
563
		// On prend soin de récupérer les mots clés de l'observation
563
		// On prend soin de récupérer les mots clés de l'observation
564
		Observation obsMod = obtenirCacheObservation().get(obs.getNumeroOrdre());
564
		Observation obsMod = obtenirCacheObservation().get(obs.getNumeroOrdre());
565
		obs.setMotsCles(obsMod.getMotsCles());
565
		obs.setMotsCles(obsMod.getMotsCles());
566
		
566
		
567
		// On rafraichit la liste d'observation
567
		// On rafraichit la liste d'observation
568
		observationModele.modifierObservation(listeObservation, obs) ;
568
		observationModele.modifierObservation(listeObservation, obs) ;
569
		filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
569
		filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
570
		filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
570
		filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
571
		
571
		
572
	}
572
	}
573
	
573
	
574
	public void modifierObservationEnMasse(Observation obs) {
574
	public void modifierObservationEnMasse(Observation obs) {
575
		// On rafraichit la liste d'observation
575
		// On rafraichit la liste d'observation
576
		listeObservation.masquerChargement();
576
		listeObservation.masquerChargement();
577
		observationModele.modifierObservationEnMasse(listeObservation, obs) ;
577
		observationModele.modifierObservationEnMasse(listeObservation, obs) ;
578
	}
578
	}
579
	
579
	
580
	// D du CRUD
580
	// D du CRUD
581
	/**
581
	/**
582
	 * TODO : afficher un message du type "observation modifie".  
582
	 * TODO : afficher un message du type "observation modifie".  
583
	 * Lance la modification d'une observation
583
	 * Lance la modification d'une observation
584
	 * @param obs : l'observation a modifier
584
	 * @param obs : l'observation a modifier
585
	 */
585
	 */
586
	
586
	
587
	
587
	
588
	
588
	
589
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
589
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
590
		
590
		
591
		if(listeObservation.getSelectionModel().getCount() > 0)
591
		if(listeObservation.getSelectionModel().getCount() > 0)
592
		{
592
		{
593
			if(Window.confirm(Msg.get("question-supprimer-observation")+" ?")) {
593
			if(Window.confirm(Msg.get("question-supprimer-observation")+" ?")) {
594
			observationModele.supprimerObservation(r,numeroOrdre) ;
594
			observationModele.supprimerObservation(r,numeroOrdre) ;
595
			}
595
			}
596
		}
596
		}
597
		
597
		
598
	}
598
	}
599
	
599
	
600
	public boolean listeAvoirObservations() {
600
	public boolean listeAvoirObservations() {
601
		return listeObservation.getStore().getCount() > 0;
601
		return listeObservation.getStore().getCount() > 0;
602
	}
602
	}
603
	
603
	
604
	// Etat du syteme
604
	// Etat du syteme
605
	/**
605
	/**
606
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
606
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
607
	 * sous forme de tableau [nom, valeur]
607
	 * sous forme de tableau [nom, valeur]
608
	 * @return Les noms et valeurs des filtres
608
	 * @return Les noms et valeurs des filtres
609
	 */
609
	 */
610
	public String[][] renvoyerFiltres()
610
	public String[][] renvoyerFiltres()
611
	{		
611
	{		
612
		int longueur = 0;
612
		int longueur = 0;
613
		
613
		
614
		String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ;
614
		String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ;
615
		String chaineNomsFiltresGeo = filtresEntitesGeo[0] ;
615
		String chaineNomsFiltresGeo = filtresEntitesGeo[0] ;
616
		String chaineValFiltresGeo = filtresEntitesGeo[1] ;
616
		String chaineValFiltresGeo = filtresEntitesGeo[1] ;
617
		
617
		
618
		String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ;
618
		String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ;
619
		String chaineNomsFiltresDate = filtresDate[0] ;
619
		String chaineNomsFiltresDate = filtresDate[0] ;
620
		String chaineValFiltresDate = filtresDate[1] ;
620
		String chaineValFiltresDate = filtresDate[1] ;
621
		
621
		
622
		String[] filtresTaxon = filtres.getRechercheLibreVue().renvoyerValeursAFiltrer();
622
		String[] filtresTaxon = filtres.getRechercheLibreVue().renvoyerValeursAFiltrer();
623
		
623
		
624
		String[] filtresMotsCles = filtres.getArbreMotsClesObservationVue().renvoyerValeursAFiltrer();
624
		String[] filtresMotsCles = filtres.getArbreMotsClesObservationVue().renvoyerValeursAFiltrer();
625
		
625
		
626
		String chaineNomsFiltres = "" ;
626
		String chaineNomsFiltres = "" ;
627
		String chaineValFiltres = "" ;
627
		String chaineValFiltres = "" ;
628
		
628
		
629
		if(!chaineNomsFiltresGeo.trim().equals("") && !chaineValFiltresGeo.trim().equals("")) {
629
		if(!chaineNomsFiltresGeo.trim().equals("") && !chaineValFiltresGeo.trim().equals("")) {
630
			chaineNomsFiltres += chaineNomsFiltresGeo+",";
630
			chaineNomsFiltres += chaineNomsFiltresGeo+",";
631
			chaineValFiltres += chaineValFiltresGeo+",";
631
			chaineValFiltres += chaineValFiltresGeo+",";
632
		}
632
		}
633
		
633
		
634
		if(!chaineNomsFiltresDate.trim().equals("") && !chaineValFiltresDate.trim().equals("")) {
634
		if(!chaineNomsFiltresDate.trim().equals("") && !chaineValFiltresDate.trim().equals("")) {
635
			chaineNomsFiltres += chaineNomsFiltresDate+",";
635
			chaineNomsFiltres += chaineNomsFiltresDate+",";
636
			chaineValFiltres += chaineValFiltresDate+",";
636
			chaineValFiltres += chaineValFiltresDate+",";
637
		}
637
		}
638
		
638
		
639
		if(!filtresTaxon[0].trim().equals("") && !filtresTaxon[1].trim().equals("")) {
639
		if(!filtresTaxon[0].trim().equals("") && !filtresTaxon[1].trim().equals("")) {
640
			chaineNomsFiltres += filtresTaxon[0]+",";
640
			chaineNomsFiltres += filtresTaxon[0]+",";
641
			chaineValFiltres += filtresTaxon[1]+",";
641
			chaineValFiltres += filtresTaxon[1]+",";
642
		}
642
		}
643
		
643
		
644
		if(!filtresMotsCles[0].trim().equals("") && !filtresMotsCles[1].trim().equals("")) {
644
		if(!filtresMotsCles[0].trim().equals("") && !filtresMotsCles[1].trim().equals("")) {
645
			chaineNomsFiltres += filtresMotsCles[0];
645
			chaineNomsFiltres += filtresMotsCles[0];
646
			chaineValFiltres += filtresMotsCles[1];
646
			chaineValFiltres += filtresMotsCles[1];
647
		}
647
		}
648
		
648
		
649
		String[] nomsFiltres = chaineNomsFiltres.split(",") ;
649
		String[] nomsFiltres = chaineNomsFiltres.split(",") ;
650
		String[] valsFiltres = chaineValFiltres.split(",") ;
650
		String[] valsFiltres = chaineValFiltres.split(",") ;
651
		
651
		
652
		longueur += nomsFiltres.length;
652
		longueur += nomsFiltres.length;
653
		
653
		
654
		String [][] valeursFiltres = new String[longueur][2] ;
654
		String [][] valeursFiltres = new String[longueur][2] ;
655
		
655
		
656
		int i = 0;
656
		int i = 0;
657
		
657
		
658
		if(valsFiltres.length > 0)
658
		if(valsFiltres.length > 0)
659
		{
659
		{
660
			for(i = 0 ; i < nomsFiltres.length ; i++)
660
			for(i = 0 ; i < nomsFiltres.length ; i++)
661
			{
661
			{
662
				valeursFiltres[i][0] = nomsFiltres[i] ;
662
				valeursFiltres[i][0] = nomsFiltres[i] ;
663
				if(valsFiltres[i].equals(Msg.get("inconnue"))) 
663
				if(valsFiltres[i].equals(Msg.get("inconnue"))) 
664
				{
664
				{
665
					valeursFiltres[i][1] = "NULL" ;
665
					valeursFiltres[i][1] = "NULL" ;
666
				}
666
				}
667
				else
667
				else
668
				{
668
				{
669
					valeursFiltres[i][1] = valsFiltres[i] ;
669
					valeursFiltres[i][1] = valsFiltres[i] ;
670
				}
670
				}
671
			}
671
			}
672
		}
672
		}
673
		
673
		
674
		listeObservation.afficherFiltres(valeursFiltres) ;
674
		listeObservation.afficherFiltres(valeursFiltres) ;
675
		
675
		
676
		return valeursFiltres ;
676
		return valeursFiltres ;
677
	}
677
	}
678
 
678
 
679
	/**
679
	/**
680
	 * 
680
	 * 
681
	 * @return
681
	 * @return
682
	 * 
682
	 * 
683
	 */
683
	 */
684
	
684
	
685
	public Panel getPanneauPrincipalObservation() {
685
	public Panel getPanneauPrincipalObservation() {
686
		return panneauPrincipalObservation;
686
		return panneauPrincipalObservation;
687
	}
687
	}
688
 
688
 
689
 
689
 
690
	public void montrerContextMenu(EventObject e) {
690
	public void montrerContextMenu(EventObject e) {
691
		
691
		
692
		MenuObservationVue mvo = new MenuObservationVue(this) ;
692
		MenuObservationVue mvo = new MenuObservationVue(this) ;
693
		mvo.showAt(e.getXY()) ;
693
		mvo.showAt(e.getXY()) ;
694
		
694
		
695
	}
695
	}
696
 
696
 
697
	public void doubleClicListeObservation(int rowIndex) {
697
	public void doubleClicListeObservation(int rowIndex) {
698
		
698
		
699
		
699
		
700
	}
700
	}
701
	
701
	
702
	// Getters 
702
	// Getters 
703
	
703
	
704
	public PanneauFiltresObservationVues getPanneauFiltres() {
704
	public PanneauFiltresObservationVues getPanneauFiltres() {
705
		
705
		
706
		return filtres;
706
		return filtres;
707
		
707
		
708
	}
708
	}
709
	
709
	
710
	public void masquerChargementInfosObservations()
710
	public void masquerChargementInfosObservations()
711
	{
711
	{
712
		ExtElement masked = Ext.get(details.getId());
712
		ExtElement masked = Ext.get(details.getId());
713
 
713
 
714
		if (details.isVisible() && masked != null) {
714
		if (details.isVisible() && masked != null) {
715
			informationRepartitionVue.raz() ;
715
			informationRepartitionVue.raz() ;
716
			imageGeneriqueVue.raz() ;
716
			imageGeneriqueVue.raz() ;
717
			masked.mask(Msg.get("chargement"), true);
717
			masked.mask(Msg.get("chargement"), true);
718
		}
718
		}
719
 
719
 
720
		cartoObservationVue.masquerChargement(true);
720
		cartoObservationVue.masquerChargement(true);
721
	}
721
	}
722
	
722
	
723
	public void deMasquerChargementInfosObservations()
723
	public void deMasquerChargementInfosObservations()
724
	{
724
	{
725
		ExtElement masked = Ext.get(details.getId());
725
		ExtElement masked = Ext.get(details.getId());
726
 
726
 
727
		if (details.isVisible() && masked != null) {
727
		if (details.isVisible() && masked != null) {
728
			masked.unmask() ;
728
			masked.unmask() ;
729
		}	
729
		}	
730
	}
730
	}
731
 
731
 
732
 
732
 
733
	public void obtenirDatesObservation() {
733
	public void obtenirDatesObservation() {
734
		
734
		
735
		observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ;
735
		observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ;
736
	}
736
	}
737
 
737
 
738
 
738
 
739
	public void exporterObservations(String format, String colonnes) {
739
	public void exporterObservations(String format, String colonnes) {
740
		observationModele.exporterObservations(format, colonnes) ;
740
		observationModele.exporterObservations(format, colonnes) ;
741
	}
741
	}
742
 
742
 
743
	public void exporterObservationsPDF() {
743
	public void exporterObservationsPDF() {
744
		if(listeObservation.getIdSelectionnees().length > 300) {
744
		if(listeObservation.getIdSelectionnees().length > 300) {
745
			// com.google.gwt.user.client
-
 
746
			Window.alert("Les étiquettes ne peuvent être générées pour plus de 300 observations d'un coup.");
745
			Window.alert(Msg.get("erreur-nb-obs-étiquettes")+".");
747
			return;
746
			return;
748
		}
747
		}
749
		// TODO: nombre en fonction des filtres actifs, combien d'éléments seraient envoyés ?
748
		// TODO: nombre en fonction des filtres actifs, combien d'éléments seraient envoyés ?
750
		if(listeObservation.getIdSelectionnees().length == 0) {
749
		if(listeObservation.getIdSelectionnees().length == 0) {
751
			//import com.google.gwt.core.client.GWT.log( XXX éléments);
750
			//import com.google.gwt.core.client.GWT.log( XXX éléments);
752
		}
751
		}
753
		observationModele.exporterObservationsPDF(listeObservation.getIdSelectionnees());
752
		observationModele.exporterObservationsPDF(listeObservation.getIdSelectionnees());
754
	}
753
	}
755
 
754
 
756
 
755
 
757
	public void deconnecterUtilisateur() {
756
	public void deconnecterUtilisateur() {
758
		
757
		
759
		if(panneauPrincipalObservation == null || panneauPrincipalObservation.isCreated() || !panneauPrincipalObservation.isVisible())
758
		if(panneauPrincipalObservation == null || panneauPrincipalObservation.isCreated() || !panneauPrincipalObservation.isVisible())
760
		{
759
		{
761
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
760
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
762
			{
761
			{
763
				@Override
762
				@Override
764
				public void onShow(Component component)
763
				public void onShow(Component component)
765
				{
764
				{
766
					deconnecterUtilisateur();
765
					deconnecterUtilisateur();
767
					panneauPrincipalObservation.purgeListeners();
766
					panneauPrincipalObservation.purgeListeners();
768
				}
767
				}
769
			});
768
			});
770
		}
769
		}
771
		else
770
		else
772
		{
771
		{
773
			listeObservation.raz() ;
772
			listeObservation.raz() ;
774
			formulaireSaisieObservationVue.raz() ;
773
			formulaireSaisieObservationVue.raz() ;
775
			razFiltres();
774
			razFiltres();
776
			informationRepartitionVue.raz() ;
775
			informationRepartitionVue.raz() ;
777
			imageGeneriqueVue.raz() ;
776
			imageGeneriqueVue.raz() ;
778
			mvz.raz() ;
777
			mvz.raz() ;
779
		}
778
		}
780
	}
779
	}
781
 
780
 
782
 
781
 
783
	public void supprimerLiaisonObsImage() {
782
	public void supprimerLiaisonObsImage() {
784
		
783
		
785
		String ordreObs = listeObservation.getIdSelectionnees()[0];
784
		String ordreObs = listeObservation.getIdSelectionnees()[0];
786
		String idObs = observationModele.getIdPourOrdreObs(ordreObs);
785
		String idObs = observationModele.getIdPourOrdreObs(ordreObs);
787
		String idImg = mvz.getIdImage() ;
786
		String idImg = mvz.getIdImage() ;
788
		
-
 
-
 
787
		String[] stParams = {idImg, idObs};
789
		if(Window.confirm("Supprimer le lien entre l'image "+idImg+" et l'observations "+idObs+" ?"))
788
		if(Window.confirm(Msg.get("question-supprimer-lien-image-obs", stParams)+" ?"))
790
		{
789
		{
791
			mvz.supprimerLiaisonImage() ;
790
			mvz.supprimerLiaisonImage() ;
792
			observationModele.supprimerLiaisonImages(idImg,idObs) ;
791
			observationModele.supprimerLiaisonImages(idImg,idObs) ;
793
		}
792
		}
794
		
793
		
795
	}
794
	}
796
 
795
 
797
	public void supprimerObservations() {
796
	public void supprimerObservations() {
798
		
797
		
799
		if(listeObservation.getIdSelectionnees().length > 0) {
798
		if(listeObservation.getIdSelectionnees().length > 0) {
800
			if(Window.confirm("Êtes vous sur de vouloir supprimer les observations sélectionnées ?")) { 
799
			if(Window.confirm(Msg.get("question-supprimer-observations-sel")+" ?")) { 
801
					String[] numObs = listeObservation.getIdSelectionnees();
800
					String[] numObs = listeObservation.getIdSelectionnees();
802
					String numObsapl = "" ;
801
					String numObsapl = "" ;
803
					for(int i = 0 ; i < numObs.length ; i++) {
802
					for(int i = 0 ; i < numObs.length ; i++) {
804
						numObsapl += numObs[i]+"," ; 
803
						numObsapl += numObs[i]+"," ; 
805
					}
804
					}
806
					
805
					
807
					observationModele.supprimerListeObservation(listeObservation,numObsapl) ;
806
					observationModele.supprimerListeObservation(listeObservation,numObsapl) ;
808
			}
807
			}
809
		}
808
		}
810
		else
809
		else
811
		{
810
		{
-
 
811
			
812
			Window.alert("Aucune observation sélectionnée");
812
			Window.alert(Msg.get("aucune-observation-selectionnee"));
813
		}
813
		}
814
	}
814
	}
815
 
815
 
816
 
816
 
817
	public void transmettreObservations(boolean publier) {
817
	public void transmettreObservations(boolean publier) {
818
		
818
		
819
		if(Utilisateur.getInstance().isIdentifie()) {
819
		if(Utilisateur.getInstance().isIdentifie()) {
820
			if(listeObservation.getIdSelectionnees().length > 0) {
820
			if(listeObservation.getIdSelectionnees().length > 0) {
821
				
821
				
822
				String action = "" ;
822
				String action = "" ;
823
				
823
				
824
				if(publier) {
824
				if(publier) {
825
					action = "rendre publiques" ;
825
					action = Msg.get("rendre-publiques") ;
826
				}
826
				}
827
				else {
827
				else {
828
					action = "rendre privées" ;
828
					action = Msg.get("rendre-privees") ;
829
				}
829
				}
-
 
830
				
830
				
831
				String[] stParams = {action};
831
				if(Window.confirm("Êtes vous sur de vouloir "+action+" les observations sélectionnées ?")) { 
832
				if(Window.confirm(Msg.get("question-rendre-publique-privee-observations-sel", stParams)+" ?")) { 
832
					String[] numObs = listeObservation.getIdSelectionnees();
833
					String[] numObs = listeObservation.getIdSelectionnees();
833
					String numObsApl = "" ;
834
					String numObsApl = "" ;
834
					for(int i = 0 ; i < numObs.length ; i++) {
835
					for(int i = 0 ; i < numObs.length ; i++) {
835
						numObsApl += numObs[i] ;
836
						numObsApl += numObs[i] ;
836
						if(i != numObs.length - 1) {
837
						if(i != numObs.length - 1) {
837
							numObsApl +="," ;
838
							numObsApl +="," ;
838
						}
839
						}
839
					}
840
					}
840
					
841
					
841
					observationModele.transmettreListeObservation(listeObservation,numObsApl, publier) ;
842
					observationModele.transmettreListeObservation(listeObservation,numObsApl, publier) ;
842
				}
843
				}
843
			}
844
			}
844
			else
845
			else
845
			{
846
			{
846
				Window.alert("Aucune observation sélectionnée");
847
				Window.alert(Msg.get("aucune-observation-selectionnee"));
847
			}
848
			}
848
		}
849
		}
849
		else
850
		else
850
		{
851
		{
851
			if(publier) {
852
			if(publier) {
852
				if(Window.confirm("La publication des observations nécessite d'être identifié, voulez-vous vous identifier ? (toutes vos observations saisies seront conservées)")) {
853
				if(Window.confirm(Msg.get("question-publication-observations-identifie"))) {
853
					importerObservations = true ;
854
					importerObservations = true ;
854
					carnetEnLigneMediateur.afficherDialogueConnexion();
855
					carnetEnLigneMediateur.afficherDialogueConnexion();
855
				}
856
				}
856
			}
857
			}
857
		}
858
		}
858
		
859
		
859
	}
860
	}
860
	
861
	
861
	public void analyserHistorique() {
862
	public void analyserHistorique() {
862
		
863
		
863
		if (History.getToken().length()>0) {
864
		if (History.getToken().length()>0) {
864
 
865
 
865
	        final String anum=History.getToken();
866
	        final String anum=History.getToken();
866
	        observationModele.analyserHistorique(formulaireSaisieObservationVue,anum);
867
	        observationModele.analyserHistorique(formulaireSaisieObservationVue,anum);
867
		}
868
		}
868
	}
869
	}
869
 
870
 
870
	/**
871
	/**
871
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
872
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
872
	 * mot clé
873
	 * mot clé
873
	 * 
874
	 * 
874
	 * @param text
875
	 * @param text
875
	 *            le texte du mot clé
876
	 *            le texte du mot clé
876
	 * @param id
877
	 * @param id
877
	 *            l'identifiant du mot clé
878
	 *            l'identifiant du mot clé
878
	 */
879
	 */
879
	public void mettreAjourMotsClesId(String text, String id) {
880
	public void mettreAjourMotsClesId(String text, String id) {
880
 
881
 
881
		observationModele.mettreAjourMotsClesId(text, id);
882
		observationModele.mettreAjourMotsClesId(text, id);
882
 
883
 
883
	}
884
	}
884
	
885
	
885
	public boolean gererDDObsSurMotCle(TreeNode NoeudMotCle, DragData dragData) {
886
	public boolean gererDDObsSurMotCle(TreeNode NoeudMotCle, DragData dragData) {
886
		
887
		
887
		if(dragData instanceof GridDragData) {
888
		if(dragData instanceof GridDragData) {
888
 
889
 
889
			GridDragData gdd = ((GridDragData)dragData);
890
			GridDragData gdd = ((GridDragData)dragData);
890
			
891
			
891
			String idMotCle = ((String[])NoeudMotCle.getUserObject())[1];
892
			String idMotCle = ((String[])NoeudMotCle.getUserObject())[1];
892
			
893
			
893
			Record[] obsALier = gdd.getSelections();
894
			Record[] obsALier = gdd.getSelections();
894
			
895
			
895
			String idObsALier[] = new String[obsALier.length];
896
			String idObsALier[] = new String[obsALier.length];
896
			String idObsALierString = "";
897
			String idObsALierString = "";
897
			
898
			
898
			for(int i = 0; i < obsALier.length; i++) {
899
			for(int i = 0; i < obsALier.length; i++) {
899
				if(i != 0) {
900
				if(i != 0) {
900
					idObsALierString += ", ";
901
					idObsALierString += ", ";
901
				}
902
				}
902
				idObsALierString += obsALier[i].getAsString("ordre_observation");
903
				idObsALierString += obsALier[i].getAsString("ordre_observation");
903
				
904
				
904
				if(!observationAvoirMotCle(idMotCle, obsALier[i].getAsString("ordre_observation"))) {
905
				if(!observationAvoirMotCle(idMotCle, obsALier[i].getAsString("ordre_observation"))) {
905
					idObsALier[i] = obsALier[i].getAsString("ordre_observation");
906
					idObsALier[i] = obsALier[i].getAsString("ordre_observation");
906
				} else {
907
				} else {
907
					idObsALier[i] = "";
908
					idObsALier[i] = "";
908
				}
909
				}
909
			}
910
			}
910
			
911
			
911
			String message = "Lier les observations "; 
912
			String message = "Lier les observations "; 
912
			
913
			
913
			if(idObsALier.length == 1) {
914
			if(idObsALier.length == 1) {
914
				message = "Lier l'observation "; 
915
				message = "Lier l'observation "; 
915
			}
916
			}
916
			
917
			
917
			if(Window.confirm(message+idObsALierString+" au projet "+NoeudMotCle.getText()+" ?")) {
918
			if(Window.confirm(message+idObsALierString+" au projet "+NoeudMotCle.getText()+" ?")) {
918
				mettreAjourMotsCles(idMotCle, idObsALier);
919
				mettreAjourMotsCles(idMotCle, idObsALier);
919
				
920
				
920
				return true;
921
				return true;
921
			} else {
922
			} else {
922
				return false;
923
				return false;
923
			}
924
			}
924
		} else {
925
		} else {
925
			return false;
926
			return false;
926
		}
927
		}
927
	}
928
	}
928
	
929
	
929
	public void gererDDMotCleSurObs(String idObs, String idMC) {
930
	public void gererDDMotCleSurObs(String idObs, String idMC) {
930
		
931
		
931
		Observation obs = obtenirCacheObservation().get(idObs);
932
		Observation obs = obtenirCacheObservation().get(idObs);
932
		
933
		
933
		if(obs == null) {
934
		if(obs == null) {
934
			return;
935
			return;
935
		}
936
		}
936
		
937
		
937
		if(observationAvoirMotCle(idMC, idObs)) {
938
		if(observationAvoirMotCle(idMC, idObs)) {
938
			if(Window.confirm("Voulez vous supprimer la liaison entre l'observation et le mot clé ?")) {
939
			if(Window.confirm(Msg.get("question-suppression-liaison-obs-mot-cle")+" ?")) {
939
				String nouveauMotsCles = obs.getMotsCles().replace(idMC, "");
940
				String nouveauMotsCles = obs.getMotsCles().replace(idMC, "");
940
				nouveauMotsCles = nouveauMotsCles.replace(";;", ";");
941
				nouveauMotsCles = nouveauMotsCles.replace(";;", ";");
941
				
942
				
942
				obs.setMotsCles(nouveauMotsCles);
943
				obs.setMotsCles(nouveauMotsCles);
943
				
944
				
944
				observationModele.supprimerLiaisonMotCleObservations(listeObservation, obs.getId(), idMC);
945
				observationModele.supprimerLiaisonMotCleObservations(listeObservation, obs.getId(), idMC);
945
			}
946
			}
946
		}
947
		}
947
	}
948
	}
948
 
949
 
949
	public String gererOverDDMotCleSurObs(String idObs, String IdMC) {
950
	public String gererOverDDMotCleSurObs(String idObs, String IdMC) {
950
		
951
		
951
		if(observationAvoirMotCle(IdMC, idObs)) {
952
		if(observationAvoirMotCle(IdMC, idObs)) {
952
		    return "x-dd-drop-unlink";
953
		    return "x-dd-drop-unlink";
953
		} else {
954
		} else {
954
			return "x-dd-drop-nodrop";
955
			return "x-dd-drop-nodrop";
955
		}
956
		}
956
	}
957
	}
957
	/**
958
	/**
958
	 * Récupère les identifiants des obs selectionnézs et appelle le modèle
959
	 * Récupère les identifiants des obs selectionnézs et appelle le modèle
959
	 * pour qu'il mette à jour les associations mots clés/obs
960
	 * pour qu'il mette à jour les associations mots clés/obs
960
	 * 
961
	 * 
961
	 * @param motsClesEnCours
962
	 * @param motsClesEnCours
962
	 *            les mots clés à associer aux images selectionnés séparés par
963
	 *            les mots clés à associer aux images selectionnés séparés par
963
	 *            un ';'
964
	 *            un ';'
964
	 * @param arbreMC
965
	 * @param arbreMC
965
	 *            l'arbre des mots clés à mettre à jour
966
	 *            l'arbre des mots clés à mettre à jour
966
	 */
967
	 */
967
	public void mettreAjourMotsCles(String motsClesEnCours, String[] idsObsALier) {
968
	public void mettreAjourMotsCles(String motsClesEnCours, String[] idsObsALier) {
968
		
969
		
969
		String[] ids = listeObservation.getIdSelectionnees();
970
		String[] ids = listeObservation.getIdSelectionnees();
970
		observationModele.mettreAjourMotsCles(motsClesEnCours, idsObsALier);
971
		observationModele.mettreAjourMotsCles(motsClesEnCours, idsObsALier);
971
 
972
 
972
	}
973
	}
973
 
974
 
974
	/**
975
	/**
975
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
976
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
976
	 * clés
977
	 * clés
977
	 * 
978
	 * 
978
	 * @param n
979
	 * @param n
979
	 *            le noeud à ajouter à l'arbre
980
	 *            le noeud à ajouter à l'arbre
980
	 * @param arbreMC
981
	 * @param arbreMC
981
	 *            le nouvel arbre de mots clés à mettre à jour
982
	 *            le nouvel arbre de mots clés à mettre à jour
982
	 */
983
	 */
983
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
984
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
984
		observationModele.ajouterMotCleDansArbre(n, arbreMC, r);
985
		observationModele.ajouterMotCleDansArbre(n, arbreMC, r);
985
	}
986
	}
986
 
987
 
987
	/**
988
	/**
988
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
989
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
989
	 * dans l'arbre des mots clés
990
	 * dans l'arbre des mots clés
990
	 * 
991
	 * 
991
	 * @param n
992
	 * @param n
992
	 *            le noeud à supprimer
993
	 *            le noeud à supprimer
993
	 * @param arbreMC
994
	 * @param arbreMC
994
	 *            le nouvel arbre de mots clés à mettre à jour
995
	 *            le nouvel arbre de mots clés à mettre à jour
995
	 */
996
	 */
996
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
997
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC, Rafraichissable r) {
997
		observationModele.supprimerMotCleDansArbre(n, arbreMC, r);
998
		observationModele.supprimerMotCleDansArbre(n, arbreMC, r);
998
	}
999
	}
999
 
1000
 
1000
	/**
1001
	/**
1001
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1002
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1002
	 * clés
1003
	 * clés
1003
	 * 
1004
	 * 
1004
	 * @param n
1005
	 * @param n
1005
	 *            le noeud à modifier
1006
	 *            le noeud à modifier
1006
	 * @param arbreMC
1007
	 * @param arbreMC
1007
	 *            le nouvel arbre de mots clés à mettre à jour
1008
	 *            le nouvel arbre de mots clés à mettre à jour
1008
	 */
1009
	 */
1009
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1010
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1010
		observationModele.modifierMotCleDansArbre(n, arbreMC, getPanneauFiltres().getArbreMotsClesObservationVue());
1011
		observationModele.modifierMotCleDansArbre(n, arbreMC, getPanneauFiltres().getArbreMotsClesObservationVue());
1011
	}
1012
	}
1012
 
1013
 
1013
	/**
1014
	/**
1014
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1015
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1015
	 * l'arbre des mots clés
1016
	 * l'arbre des mots clés
1016
	 * 
1017
	 * 
1017
	 * @param n
1018
	 * @param n
1018
	 *            le noeud à déplacer
1019
	 *            le noeud à déplacer
1019
	 * @param arbreMC
1020
	 * @param arbreMC
1020
	 *            le nouvel arbre de mots clés à mettre à jour
1021
	 *            le nouvel arbre de mots clés à mettre à jour
1021
	 */
1022
	 */
1022
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1023
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1023
 
1024
 
1024
		observationModele.deplacerMotCleDansArbre(n, arbreMC, getPanneauFiltres().getArbreMotsClesObservationVue());
1025
		observationModele.deplacerMotCleDansArbre(n, arbreMC, getPanneauFiltres().getArbreMotsClesObservationVue());
1025
	}
1026
	}
1026
 
1027
 
1027
 
1028
 
1028
	public void rafraichirArbreMotsCles(Tree arbreMotsCles) {
1029
	public void rafraichirArbreMotsCles(Tree arbreMotsCles) {
1029
		
1030
		
1030
		getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(arbreMotsCles, false);
1031
		getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(arbreMotsCles, false);
1031
		
1032
		
1032
	}
1033
	}
1033
	
1034
	
1034
	public boolean observationAvoirMotCle(String idMotCle, String idObs) {
1035
	public boolean observationAvoirMotCle(String idMotCle, String idObs) {
1035
		Observation obs = obtenirCacheObservation().get(idObs);
1036
		Observation obs = obtenirCacheObservation().get(idObs);
1036
		if(obs == null) {
1037
		if(obs == null) {
1037
			return false;
1038
			return false;
1038
		}
1039
		}
1039
		
1040
		
1040
		if(obs.getMotsCles().contains(idMotCle)) {
1041
		if(obs.getMotsCles().contains(idMotCle)) {
1041
			return true;
1042
			return true;
1042
		}
1043
		}
1043
		
1044
		
1044
		return false;
1045
		return false;
1045
	}
1046
	}
1046
 
1047
 
1047
 
1048
 
1048
	public void obtenirArbreMotsCles(Rafraichissable r) {
1049
	public void obtenirArbreMotsCles(Rafraichissable r) {
1049
		
1050
		
1050
		observationModele.obtenirArbreMotsCles(r);
1051
		observationModele.obtenirArbreMotsCles(r);
1051
	}
1052
	}
1052
	
1053
	
1053
	public String[] obtenirTexteMotsCles(String[] idsMotsCles) {
1054
	public String[] obtenirTexteMotsCles(String[] idsMotsCles) {
1054
		
1055
		
1055
		String[] tableauMotsClesTexte = new String[idsMotsCles.length];
1056
		String[] tableauMotsClesTexte = new String[idsMotsCles.length];
1056
		
1057
		
1057
		for(int i=0; i< idsMotsCles.length; i++) {
1058
		for(int i=0; i< idsMotsCles.length; i++) {
1058
			tableauMotsClesTexte[i] = observationModele.obtenirTexteMotCle(idsMotsCles[i]);
1059
			tableauMotsClesTexte[i] = observationModele.obtenirTexteMotCle(idsMotsCles[i]);
1059
		}
1060
		}
1060
		
1061
		
1061
		return tableauMotsClesTexte;
1062
		return tableauMotsClesTexte;
1062
	}
1063
	}
1063
	
1064
	
1064
	public ListeObservation obtenirCacheObservation() {
1065
	public ListeObservation obtenirCacheObservation() {
1065
		return observationModele.getCacheObservation();
1066
		return observationModele.getCacheObservation();
1066
	}
1067
	}
1067
 
1068
 
1068
	public void donneesExterieures(Object nouvelleDonnees) {
1069
	public void donneesExterieures(Object nouvelleDonnees) {
1069
		if(nouvelleDonnees instanceof Tree) {
1070
		if(nouvelleDonnees instanceof Tree) {
1070
			
1071
			
1071
			Tree arbreMotsCles = (Tree)nouvelleDonnees ;
1072
			Tree arbreMotsCles = (Tree)nouvelleDonnees ;
1072
			observationModele.rafraichirArbreMotsCles(nouvelleDonnees);
1073
			observationModele.rafraichirArbreMotsCles(nouvelleDonnees);
1073
			rafraichirArbreMotsCles(arbreMotsCles);
1074
			rafraichirArbreMotsCles(arbreMotsCles);
1074
		}
1075
		}
1075
	}
1076
	}
1076
	
1077
	
1077
	public void transmettreDonnees(Object o) {
1078
	public void transmettreDonnees(Object o) {
1078
		carnetEnLigneMediateur.donneesObsVersImages(o);
1079
		carnetEnLigneMediateur.donneesObsVersImages(o);
1079
	}
1080
	}
1080
	
1081
	
1081
	public void obtenirInformationCoord(Rafraichissable r, double lat, double lng) {
1082
	public void obtenirInformationCoord(Rafraichissable r, double lat, double lng) {
1082
		observationModele.obtenirInformationCoord(r, lat, lng);
1083
		observationModele.obtenirInformationCoord(r, lat, lng);
1083
	}
1084
	}
1084
	
1085
	
1085
	public void obtenirInformationLocalite(Rafraichissable r, String nomLocalite, String codeLoc) {
1086
	public void obtenirInformationLocalite(Rafraichissable r, String nomLocalite, String codeLoc) {
1086
		observationModele.obtenirInformationLocalite(r, nomLocalite, codeLoc);
1087
		observationModele.obtenirInformationLocalite(r, nomLocalite, codeLoc);
1087
	}
1088
	}
1088
 
1089
 
1089
	public void obtenirInformationCoord(double lat, double lng) {
1090
	public void obtenirInformationCoord(double lat, double lng) {
1090
		this.obtenirInformationCoord(lat, lng, false);
1091
		this.obtenirInformationCoord(lat, lng, false);
1091
	}
1092
	}
1092
 
1093
 
1093
	public void obtenirInformationCoord(double lat, double lng, boolean zoomer) {
1094
	public void obtenirInformationCoord(double lat, double lng, boolean zoomer) {
1094
		cartoObservationVue.setDoitZoomerSurRetour(true);
1095
		cartoObservationVue.setDoitZoomerSurRetour(true);
1095
		// Les requêtes hors France sont longues, on veille donc à ne pas les empiler 
1096
		// Les requêtes hors France sont longues, on veille donc à ne pas les empiler 
1096
		// inutilement pour ne pas les traiter au retour 
1097
		// inutilement pour ne pas les traiter au retour 
1097
		InformationLocaliteDAO.annulerRequeteEnCours();
1098
		InformationLocaliteDAO.annulerRequeteEnCours();
1098
		// Pour faire patienter l'utilisateur le temps de trouver la zone
1099
		// Pour faire patienter l'utilisateur le temps de trouver la zone
1099
		//Util.curseurAttente();
1100
		//Util.curseurAttente();
1100
		afficherFenetreCarto();
1101
		afficherFenetreCarto();
1101
		cartoObservationVue.afficherCarteEnAttenteAvecMarker(lat, lng);
1102
		cartoObservationVue.afficherCarteEnAttenteAvecMarker(lat, lng);
1102
		observationModele.obtenirInformationCoord(cartoObservationVue, lat, lng);
1103
		observationModele.obtenirInformationCoord(cartoObservationVue, lat, lng);
1103
	}
1104
	}
1104
 
1105
 
1105
	public void obtenirInformationLocalite(String nomLocalite, String codeLoc) {
1106
	public void obtenirInformationLocalite(String nomLocalite, String codeLoc) {
1106
		observationModele.obtenirInformationLocalite(cartoObservationVue, nomLocalite, codeLoc);
1107
		observationModele.obtenirInformationLocalite(cartoObservationVue, nomLocalite, codeLoc);
1107
	}
1108
	}
1108
 
1109
 
1109
	/**
1110
	/**
1110
	 * Ouvre la fenêtre carto, place un marqueur sur le point demandé et centre l'affichage,
1111
	 * Ouvre la fenêtre carto, place un marqueur sur le point demandé et centre l'affichage,
1111
	 * mais ne recherche pas d'infos sur le point
1112
	 * mais ne recherche pas d'infos sur le point
1112
	 * @param infos doit contenir des coordonnées (lon, lat)
1113
	 * @param infos doit contenir des coordonnées (lon, lat)
1113
	 */
1114
	 */
1114
	public void rafraichirFenetreCartoSurPoint(EntiteGeographiqueObservation infos) {
1115
	public void rafraichirFenetreCartoSurPoint(EntiteGeographiqueObservation infos) {
1115
		cartoObservationVue.rafraichir(infos, false);
1116
		cartoObservationVue.rafraichir(infos, false);
1116
	}
1117
	}
1117
 
1118
 
1118
	public void rafraichirSaisieLocaliteObservation(EntiteGeographiqueObservation infosLocalite) {
1119
	public void rafraichirSaisieLocaliteObservation(EntiteGeographiqueObservation infosLocalite) {
1119
		InformationLocaliteDAO.annulerRequeteEnCours();
1120
		InformationLocaliteDAO.annulerRequeteEnCours();
1120
		formulaireSaisieObservationVue.rafraichir(infosLocalite, false);
1121
		formulaireSaisieObservationVue.rafraichir(infosLocalite, false);
1121
		cacherFenetreCarto();
1122
		cacherFenetreCarto();
1122
	}
1123
	}
1123
 
1124
 
1124
	private void razFiltres() {
1125
	private void razFiltres() {
1125
		filtres.getArbreDateObservationFiltreVue().raz() ;
1126
		filtres.getArbreDateObservationFiltreVue().raz() ;
1126
		filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ;
1127
		filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ;
1127
		filtres.getArbreMotsClesObservationVue().raz();
1128
		filtres.getArbreMotsClesObservationVue().raz();
1128
		filtres.getRechercheLibreVue().raz();
1129
		filtres.getRechercheLibreVue().raz();
1129
	}
1130
	}
1130
	
1131
	
1131
 
1132
 
1132
	public void viderFiltre(String nom) {
1133
	public void viderFiltre(String nom) {
1133
		filtres.viderFiltres(nom);
1134
		filtres.viderFiltres(nom);
1134
		obtenirNombreObservation();
1135
		obtenirNombreObservation();
1135
	}
1136
	}
1136
 
1137
 
1137
	public Component getListeObservation() {
1138
	public Component getListeObservation() {
1138
		return listeObservation;
1139
		return listeObservation;
1139
	}
1140
	}
1140
 
1141
 
1141
	public void redimensionnerPanneaux(int adjHeight, int adjWidth) {	
1142
	public void redimensionnerPanneaux(int adjHeight, int adjWidth) {	
1142
		formulaireSaisieObservationVue.setHeight(300);
1143
		formulaireSaisieObservationVue.setHeight(300);
1143
		listeObservation.setHeight(adjHeight/2);
1144
		listeObservation.setHeight(adjHeight/2);
1144
		centre.doLayout();
1145
		centre.doLayout();
1145
	}
1146
	}
1146
 
1147
 
1147
	public void afficherFormulaireImportObservation() {
1148
	public void afficherFormulaireImportObservation() {
1148
		if (formImportObs==null) { // lazy inst. 
1149
		if (formImportObs==null) { // lazy inst. 
1149
			formImportObs = new FormulaireImportObservationVue(this);
1150
			formImportObs = new FormulaireImportObservationVue(this);
1150
		}
1151
		}
1151
		formImportObs.afficher();	
1152
		formImportObs.afficher();	
1152
	}
1153
	}
1153
 
1154
 
1154
	public void setImporterObservationsAnonymes(boolean importerObservations) {
1155
	public void setImporterObservationsAnonymes(boolean importerObservations) {
1155
		this.importerObservations = importerObservations;
1156
		this.importerObservations = importerObservations;
1156
	}
1157
	}
1157
 
1158
 
1158
	public void afficherFenetreCarto() {
1159
	public void afficherFenetreCarto() {
1159
		int hauteur = (int)Math.round(Window.getClientHeight()*0.75);
1160
		int hauteur = (int)Math.round(Window.getClientHeight()*0.75);
1160
		int largeur = (int)Math.round(Window.getClientWidth()*0.75);
1161
		int largeur = (int)Math.round(Window.getClientWidth()*0.75);
1161
		fenetreCarto.setSize(largeur, hauteur);
1162
		fenetreCarto.setSize(largeur, hauteur);
1162
		if(!fenetreCarto.isVisible()) {
1163
		if(!fenetreCarto.isVisible()) {
1163
			fenetreCarto.show();
1164
			fenetreCarto.show();
1164
		}
1165
		}
1165
		cartoObservationVue.setTailleCarte(hauteur - 20, largeur - 20);
1166
		cartoObservationVue.setTailleCarte(hauteur - 20, largeur - 20);
1166
	}
1167
	}
1167
 
1168
 
1168
	private void cacherFenetreCarto() {
1169
	private void cacherFenetreCarto() {
1169
		if(fenetreCarto.isVisible()) {
1170
		if(fenetreCarto.isVisible()) {
1170
			fenetreCarto.hide();
1171
			fenetreCarto.hide();
1171
		}
1172
		}
1172
	}
1173
	}
1173
 
1174
 
1174
	public InfosReferentielNom getRefTaxSelectionne() {
1175
	public InfosReferentielNom getRefTaxSelectionne() {
1175
		return refTaxSelectionne;
1176
		return refTaxSelectionne;
1176
	}
1177
	}
1177
 
1178
 
1178
	public void setRefTaxSelectionne(int index) {
1179
	public void setRefTaxSelectionne(int index) {
1179
		refTaxSelectionne = Configuration.getReferentielsDispos().get(index);
1180
		refTaxSelectionne = Configuration.getReferentielsDispos().get(index);
1180
	}
1181
	}
1181
 
1182
 
1182
	public void setRefTaxSelectionne(InfosReferentielNom refTax) {
1183
	public void setRefTaxSelectionne(InfosReferentielNom refTax) {
1183
		refTaxSelectionne = refTax;
1184
		refTaxSelectionne = refTax;
1184
	}
1185
	}
1185
 
1186
 
1186
	public String renvoyerTri() {
1187
	public String renvoyerTri() {
1187
		return listeObservation.renvoyerTri();
1188
		return listeObservation.renvoyerTri();
1188
	}
1189
	}
1189
 
1190
 
1190
	public String renvoyerDirectionTri() {
1191
	public String renvoyerDirectionTri() {
1191
		return listeObservation.renvoyerDirectionTri();
1192
		return listeObservation.renvoyerDirectionTri();
1192
	}
1193
	}
1193
}
1194
}