Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 610 Rev 659
1
package org.tela_botanica.client.image;
1
package org.tela_botanica.client.image;
2
 
2
 
3
 
3
 
4
import java.util.Iterator;
4
import java.util.Iterator;
5
import java.util.List;
5
import java.util.List;
6
 
6
 
7
import org.tela_botanica.client.CarnetEnLigneMediateur;
7
import org.tela_botanica.client.CarnetEnLigneMediateur;
8
import org.tela_botanica.client.interfaces.IdVue;
8
import org.tela_botanica.client.interfaces.IdVue;
9
import org.tela_botanica.client.interfaces.ListePaginable;
9
import org.tela_botanica.client.interfaces.ListePaginable;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.interfaces.VueListable;
11
import org.tela_botanica.client.interfaces.VueListable;
12
import org.tela_botanica.client.modeles.Configuration;
12
import org.tela_botanica.client.modeles.Configuration;
13
import org.tela_botanica.client.modeles.ListeObservation;
13
import org.tela_botanica.client.modeles.ListeObservation;
14
import org.tela_botanica.client.observation.ObservationMediateur;
14
import org.tela_botanica.client.observation.ObservationMediateur;
15
import org.tela_botanica.client.vues.ArbreMotsClesVue;
15
import org.tela_botanica.client.vues.ArbreMotsClesVue;
16
import org.tela_botanica.client.vues.image.BarreOutilsVue;
16
import org.tela_botanica.client.vues.image.BarreOutilsVue;
17
import org.tela_botanica.client.vues.image.BarreRechercheFiltreVue;
17
import org.tela_botanica.client.vues.image.BarreRechercheFiltreVue;
18
import org.tela_botanica.client.vues.image.GalerieImageVue;
18
import org.tela_botanica.client.vues.image.GalerieImageVue;
19
import org.tela_botanica.client.vues.image.ListeImageVue;
19
import org.tela_botanica.client.vues.image.ListeImageVue;
20
import org.tela_botanica.client.vues.image.MenuImageVue;
20
import org.tela_botanica.client.vues.image.MenuImageVue;
21
import org.tela_botanica.client.vues.image.MiniListeObservationVue;
21
import org.tela_botanica.client.vues.image.MiniListeObservationVue;
22
import org.tela_botanica.client.vues.image.PanneauFiltresImagesVues;
22
import org.tela_botanica.client.vues.image.PanneauFiltresImagesVues;
23
import org.tela_botanica.client.vues.image.PanneauMetadonneesVue;
23
import org.tela_botanica.client.vues.image.PanneauMetadonneesVue;
24
import org.tela_botanica.client.vues.image.ZoomImageVue;
24
import org.tela_botanica.client.vues.image.ZoomImageVue;
25
 
25
 
26
import com.google.gwt.core.client.GWT;
26
import com.google.gwt.core.client.GWT;
27
import com.google.gwt.core.client.JavaScriptObject;
27
import com.google.gwt.core.client.JavaScriptObject;
28
import com.google.gwt.user.client.DOM;
28
import com.google.gwt.user.client.DOM;
29
import com.google.gwt.user.client.Element;
29
import com.google.gwt.user.client.Element;
30
import com.google.gwt.user.client.Event;
30
import com.google.gwt.user.client.Event;
31
import com.google.gwt.user.client.Window;
31
import com.google.gwt.user.client.Window;
32
import com.google.gwt.user.client.ui.HTML;
32
import com.google.gwt.user.client.ui.HTML;
33
import com.gwtext.client.core.EventObject;
33
import com.gwtext.client.core.EventObject;
34
import com.gwtext.client.core.Ext;
34
import com.gwtext.client.core.Ext;
35
import com.gwtext.client.core.ExtElement;
35
import com.gwtext.client.core.ExtElement;
36
import com.gwtext.client.core.RegionPosition;
36
import com.gwtext.client.core.RegionPosition;
37
import com.gwtext.client.data.Record;
37
import com.gwtext.client.data.Record;
38
import com.gwtext.client.data.Store;
38
import com.gwtext.client.data.Store;
39
import com.gwtext.client.data.Tree;
39
import com.gwtext.client.data.Tree;
40
import com.gwtext.client.dd.DragData;
40
import com.gwtext.client.dd.DragData;
41
import com.gwtext.client.dd.DragSource;
41
import com.gwtext.client.dd.DragSource;
42
import com.gwtext.client.widgets.BoxComponent;
42
import com.gwtext.client.widgets.BoxComponent;
43
import com.gwtext.client.widgets.Component;
43
import com.gwtext.client.widgets.Component;
44
import com.gwtext.client.widgets.Container;
44
import com.gwtext.client.widgets.Container;
45
import com.gwtext.client.widgets.DataView;
45
import com.gwtext.client.widgets.DataView;
46
import com.gwtext.client.widgets.Panel;
46
import com.gwtext.client.widgets.Panel;
47
import com.gwtext.client.widgets.TabPanel;
47
import com.gwtext.client.widgets.TabPanel;
48
import com.gwtext.client.widgets.MessageBox.AlertCallback;
48
import com.gwtext.client.widgets.MessageBox.AlertCallback;
49
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
49
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
50
import com.gwtext.client.widgets.event.ContainerListener;
50
import com.gwtext.client.widgets.event.ContainerListener;
51
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
51
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
52
import com.gwtext.client.widgets.event.PanelListener;
52
import com.gwtext.client.widgets.event.PanelListener;
53
import com.gwtext.client.widgets.event.PanelListenerAdapter;
53
import com.gwtext.client.widgets.event.PanelListenerAdapter;
54
import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
54
import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
55
import com.gwtext.client.widgets.grid.GridDragData;
55
import com.gwtext.client.widgets.grid.GridDragData;
56
import com.gwtext.client.widgets.layout.BorderLayout;
56
import com.gwtext.client.widgets.layout.BorderLayout;
57
import com.gwtext.client.widgets.layout.BorderLayoutData;
57
import com.gwtext.client.widgets.layout.BorderLayoutData;
58
import com.gwtext.client.widgets.layout.FitLayout;
58
import com.gwtext.client.widgets.layout.FitLayout;
59
import com.gwtext.client.widgets.menu.BaseItem;
59
import com.gwtext.client.widgets.menu.BaseItem;
60
import com.gwtext.client.widgets.menu.Item;
60
import com.gwtext.client.widgets.menu.Item;
61
import com.gwtext.client.widgets.menu.Menu;
61
import com.gwtext.client.widgets.menu.Menu;
62
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
62
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
63
import com.gwtext.client.widgets.tree.TreeEditor;
63
import com.gwtext.client.widgets.tree.TreeEditor;
64
import com.gwtext.client.widgets.tree.TreeNode;
64
import com.gwtext.client.widgets.tree.TreeNode;
65
 
65
 
66
/**
66
/**
67
 * Mediateur gérant les interactions entre vues et les echanges de données C'est
67
 * Mediateur gérant les interactions entre vues et les echanges de données C'est
68
 * un singleton.
68
 * un singleton.
69
 * 
69
 * 
70
 * @author aurelien
70
 * @author aurelien
71
 * 
71
 * 
72
 */
72
 */
73
 
73
 
74
// TODO : Deporter les methodes de ListePaginable dans la liste  d'images
74
// TODO : Deporter les methodes de ListePaginable dans la liste  d'images
75
 
75
 
76
public class ImageMediateur implements ListePaginable{
76
public class ImageMediateur implements ListePaginable{
77
 
77
 
78
	/**
78
	/**
79
	 * le mediateur des observations qui lie la partie images au carnet
79
	 * le mediateur des observations qui lie la partie images au carnet
80
	 */
80
	 */
81
	private CarnetEnLigneMediateur cMediateur = null;
81
	private CarnetEnLigneMediateur cMediateur = null;
82
 
82
 
83
	
83
	
84
	private static ImageMediateur thisMediateur = null ;
84
	private static ImageMediateur thisMediateur = null ;
85
	/**
85
	/**
86
	 * booleen qui verifie l'unicite de l'instance (donc static)
86
	 * booleen qui verifie l'unicite de l'instance (donc static)
87
	 */
87
	 */
88
	private static boolean estInstancie = false;
88
	private static boolean estInstancie = false;
89
 
89
 
90
	/**
90
	/**
91
	 * modele de données
91
	 * modele de données
92
	 */
92
	 */
93
	private ImageModele iModele = null;
93
	private ImageModele iModele = null;
94
 
94
 
95
	/**
95
	/**
96
	 * L'identifiant utilisateur. Par défaut, il vaut 0
96
	 * L'identifiant utilisateur. Par défaut, il vaut 0
97
	 */
97
	 */
98
	private String identifiant = "0";
98
	private String identifiant = "0";
99
 
99
 
100
	/**
100
	/**
101
	 * panneau principal des images (onglet "images")
101
	 * panneau principal des images (onglet "images")
102
	 */
102
	 */
103
	private Panel panneauPrincipalImage = null ;
103
	private Panel panneauPrincipalImage = null ;
104
 
104
 
105
	/**
105
	/**
106
	 * panneau a onglet pour la liste, la galerie et la vue en grand
106
	 * panneau a onglet pour la liste, la galerie et la vue en grand
107
	 */
107
	 */
108
	private TabPanel ongletsImage = null;
108
	private TabPanel ongletsImage = null;
109
 
109
 
110
	/**
110
	/**
111
	 * panneau de filtrage
111
	 * panneau de filtrage
112
	 */
112
	 */
113
	private PanneauFiltresImagesVues filtres = null;
113
	private PanneauFiltresImagesVues filtres = null;
114
 
114
 
115
	/**
115
	/**
116
	 * conteneur du panneau a onglets
116
	 * conteneur du panneau a onglets
117
	 */
117
	 */
118
	private Panel panneauMenuEtOngletsImage = null;
118
	private Panel panneauMenuEtOngletsImage = null;
119
 
119
 
120
	/**
120
	/**
121
	 * galerie de miniature
121
	 * galerie de miniature
122
	 */
122
	 */
123
	private GalerieImageVue galerieImage = null;
123
	private GalerieImageVue galerieImage = null;
124
 
124
 
125
	/**
125
	/**
126
	 * liste détaillée des images
126
	 * liste détaillée des images
127
	 */
127
	 */
128
	private ListeImageVue listeImage = null;
128
	private ListeImageVue listeImage = null;
129
 
129
 
130
	/**
130
	/**
131
	 * vue agrandie de la l'image selectionnée
131
	 * vue agrandie de la l'image selectionnée
132
	 */
132
	 */
133
	private ZoomImageVue zoomImage = null;
133
	private ZoomImageVue zoomImage = null;
134
 
134
 
135
	/**
135
	/**
136
	 * panneau a onglets affichant les métadonnées et les mots clés
136
	 * panneau a onglets affichant les métadonnées et les mots clés
137
	 */
137
	 */
138
	private PanneauMetadonneesVue metadonneesIptcExif = null;
138
	private PanneauMetadonneesVue metadonneesIptcExif = null;
139
 
139
 
140
	/**
140
	/**
141
	 * panneau conteneur pour le panneau a onglet des metadonnées
141
	 * panneau conteneur pour le panneau a onglet des metadonnées
142
	 */
142
	 */
143
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
143
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
144
 
144
 
145
	/**
145
	/**
146
	 * menu contextuel de manipulation des images
146
	 * menu contextuel de manipulation des images
147
	 */
147
	 */
148
	private MenuImageVue menuImageVue = null;
148
	private MenuImageVue menuImageVue = null;
149
 
149
 
150
	/**
150
	/**
151
	 * barre d'outils
151
	 * barre d'outils
152
	 */
152
	 */
153
	private BarreOutilsVue barreOutilsVue = null;
153
	private BarreOutilsVue barreOutilsVue = null;
154
 
154
 
155
	/**
155
	/**
156
	 * l'indice du dernier onglet sélectionné
156
	 * l'indice du dernier onglet sélectionné
157
	 */
157
	 */
158
	private int dernierIndexOnglet = 0;
158
	private int dernierIndexOnglet = 0;
159
 
159
 
160
	/**
160
	/**
161
	 * booleen explicitant s'il y a une selection en cours
161
	 * booleen explicitant s'il y a une selection en cours
162
	 */
162
	 */
163
	private boolean selection = false;
163
	private boolean selection = false;
164
 
164
 
165
 
165
 
166
	/**
166
	/**
167
	 * Filtre pour les commentaires
167
	 * Filtre pour les commentaires
168
	 */
168
	 */
169
	private BarreRechercheFiltreVue filtreCommentaires = null;
169
	private BarreRechercheFiltreVue filtreCommentaires = null;
170
	
170
	
171
	/**
171
	/**
172
	 * Boolean indiquand si le médiateur a seulement été crée ou bien si tous
172
	 * Boolean indiquand si le médiateur a seulement été crée ou bien si tous
173
	 * les composants ont été crées
173
	 * les composants ont été crées
174
	 */
174
	 */
175
	private boolean estInitialise = false;
175
	private boolean estInitialise = false;
176
 
176
 
177
	/**
177
	/**
178
	 * constructeur privé (on accède a la classe par la méthode getInstance)
178
	 * constructeur privé (on accède a la classe par la méthode getInstance)
179
	 */
179
	 */
180
	private ImageMediateur() {			
180
	private ImageMediateur() {			
181
				initialiser() ;
181
				initialiser() ;
182
	}
182
	}
183
 
183
 
184
	/**
184
	/**
185
	 * constructeur avec paramètres privé (on accède a la classe par la méthode
185
	 * constructeur avec paramètres privé (on accède a la classe par la méthode
186
	 * getInstance)
186
	 * getInstance)
187
	 * 
187
	 * 
188
	 * @param cm
188
	 * @param cm
189
	 *            le médiateur du carnet à associer à la partie image
189
	 *            le médiateur du carnet à associer à la partie image
190
	 */
190
	 */
191
	private ImageMediateur(CarnetEnLigneMediateur cm) {
191
	private ImageMediateur(CarnetEnLigneMediateur cm) {
192
		
192
		
193
		cMediateur = cm;
193
		cMediateur = cm;
194
		panneauPrincipalImage = new Panel("Images") ;
194
		panneauPrincipalImage = new Panel("Images") ;
195
		panneauPrincipalImage.addListener(new PanelListenerAdapter() {
195
		panneauPrincipalImage.addListener(new PanelListenerAdapter() {
196
			public boolean doBeforeRender(Component c) {
196
			public boolean doBeforeRender(Component c) {
197
				if(!estInitialise) {
197
				if(!estInitialise) {
198
					initialiser() ;
198
					initialiser() ;
199
				}
199
				}
200
				return true;
200
				return true;
201
			}
201
			}
202
		});
202
		});
203
	}
203
	}
204
 
204
 
205
	/**
205
	/**
206
	 * Change la valeur du booleen de selection
206
	 * Change la valeur du booleen de selection
207
	 * 
207
	 * 
208
	 * @param selection
208
	 * @param selection
209
	 *            la nouvelle valeur du booléen
209
	 *            la nouvelle valeur du booléen
210
	 */
210
	 */
211
	public void setSelection(boolean selection) {
211
	public void setSelection(boolean selection) {
212
		this.selection = selection;
212
		this.selection = selection;
213
	}
213
	}
214
 
214
 
215
	/**
215
	/**
216
	 * renvoie la valeur du booleen de selection
216
	 * renvoie la valeur du booleen de selection
217
	 * 
217
	 * 
218
	 * @return la valeur du booleen de selection
218
	 * @return la valeur du booleen de selection
219
	 */
219
	 */
220
	public boolean isSelection() {
220
	public boolean isSelection() {
221
		return selection;
221
		return selection;
222
	}
222
	}
223
 
223
 
224
	/**
224
	/**
225
	 * Retourne une instance de manière unique
225
	 * Retourne une instance de manière unique
226
	 * 
226
	 * 
227
	 * @return l'instance unique du médiateur
227
	 * @return l'instance unique du médiateur
228
	 */
228
	 */
229
	public static ImageMediateur Instance() {
229
	public static ImageMediateur Instance() {
230
		if (!estInstancie && thisMediateur == null) {
230
		if (!estInstancie && thisMediateur == null) {
231
			// on en crée un nouveau
231
			// on en crée un nouveau
232
			estInstancie = true;
232
			estInstancie = true;
233
			thisMediateur = new ImageMediateur();
233
			thisMediateur = new ImageMediateur();
234
		}
234
		}
235
		// sinon on retourne le "pointeur" vers le médiateur lui-même
235
		// sinon on retourne le "pointeur" vers le médiateur lui-même
236
		return thisMediateur;
236
		return thisMediateur;
237
	}
237
	}
238
 
238
 
239
	/**
239
	/**
240
	 * Retourne une instance de manière unique en lui associant un médiateur
240
	 * Retourne une instance de manière unique en lui associant un médiateur
241
	 * pour les observations
241
	 * pour les observations
242
	 * 
242
	 * 
243
	 * @param cm le médiateur de carnet à associer
243
	 * @param cm le médiateur de carnet à associer
244
	 * @return l'instance unique du médiateur
244
	 * @return l'instance unique du médiateur
245
	 */
245
	 */
246
	public static ImageMediateur Instance(CarnetEnLigneMediateur cm) {
246
	public static ImageMediateur Instance(CarnetEnLigneMediateur cm) {
247
		if (!estInstancie && thisMediateur == null) {
247
		if (!estInstancie && thisMediateur == null) {
248
			// on en crée un nouveau
248
			// on en crée un nouveau
249
			estInstancie = true;
249
			estInstancie = true;
250
			thisMediateur = new ImageMediateur(cm);
250
			thisMediateur = new ImageMediateur(cm);
251
		}
251
		}
252
		// sinon on retourne le "pointeur" vers le médiateur lui-même
252
		// sinon on retourne le "pointeur" vers le médiateur lui-même
253
		return thisMediateur;
253
		return thisMediateur;
254
	}
254
	}
255
	
255
	
256
	private void initialiser()
256
	private void initialiser()
257
	{
257
	{
258
		// quelques variables de position pour les borderlayouts
258
		// quelques variables de position pour les borderlayouts
259
		final BorderLayoutData regionNord = new BorderLayoutData(
259
		final BorderLayoutData regionNord = new BorderLayoutData(
260
				RegionPosition.NORTH);
260
				RegionPosition.NORTH);
261
 
261
 
262
		final BorderLayoutData regionCentre = new BorderLayoutData(
262
		final BorderLayoutData regionCentre = new BorderLayoutData(
263
				RegionPosition.CENTER);
263
				RegionPosition.CENTER);
264
 
264
 
265
		final BorderLayoutData regionEst = new BorderLayoutData(
265
		final BorderLayoutData regionEst = new BorderLayoutData(
266
				RegionPosition.EAST);
266
				RegionPosition.EAST);
267
		regionEst.setSplit(true);
267
		regionEst.setSplit(true);
268
 
268
 
269
		final BorderLayoutData regionOuest = new BorderLayoutData(
269
		final BorderLayoutData regionOuest = new BorderLayoutData(
270
				RegionPosition.WEST);
270
				RegionPosition.WEST);
271
		regionOuest.setSplit(true);
271
		regionOuest.setSplit(true);
272
		
272
		
273
		panneauPrincipalImage.setSize(cMediateur.getPanneauPrincipalCarnetEnLigne().getWidth(), cMediateur.getPanneauPrincipalCarnetEnLigne().getHeight()) ;
273
		panneauPrincipalImage.setSize(cMediateur.getPanneauPrincipalCarnetEnLigne().getWidth(), cMediateur.getPanneauPrincipalCarnetEnLigne().getHeight()) ;
274
		panneauPrincipalImage.setLayout(new BorderLayout()) ;
274
		panneauPrincipalImage.setLayout(new BorderLayout()) ;
275
 
275
 
276
		// on crée un modèle
276
		// on crée un modèle
277
		iModele = ImageModele.Instance(this);
277
		iModele = ImageModele.Instance(this);
278
		// et on demande l'arbre des mots clés
278
		// et on demande l'arbre des mots clés
279
 
279
 
280
		// on gère la mise en page du panneau principal
280
		// on gère la mise en page du panneau principal
281
 
281
 
282
		// on crée le panneau des filtres
282
		// on crée le panneau des filtres
283
		filtres = new PanneauFiltresImagesVues(this);
283
		filtres = new PanneauFiltresImagesVues(this);
284
		filtres.setWidth("15%");
284
		filtres.setWidth("15%");
285
 
285
 
286
		// le panneau à onglet qui contient les trois vues
286
		// le panneau à onglet qui contient les trois vues
287
		ongletsImage = new TabPanel();
287
		ongletsImage = new TabPanel();
288
 
288
 
289
		// la galerie
289
		// la galerie
290
		galerieImage = new GalerieImageVue(this);
290
		galerieImage = new GalerieImageVue(this);
291
 
291
 
292
		// la liste des images
292
		// la liste des images
293
		listeImage = new ListeImageVue(this);
293
		listeImage = new ListeImageVue(this);
294
		listeImage.setTitle("Liste") ;
294
		listeImage.setTitle("Liste") ;
295
 
295
 
296
		// le panneau zoom
296
		// le panneau zoom
297
		zoomImage = new ZoomImageVue(this);
297
		zoomImage = new ZoomImageVue(this);
298
 
298
 
299
		// on ajoute les panneaux au panneau à onglets
299
		// on ajoute les panneaux au panneau à onglets
300
		ongletsImage.add(galerieImage);
300
		ongletsImage.add(galerieImage);
301
		ongletsImage.add(listeImage);
301
		ongletsImage.add(listeImage);
302
		ongletsImage.add(zoomImage);
302
		ongletsImage.add(zoomImage);
303
 
303
 
304
		// on crée les menu et la barre de vue
304
		// on crée les menu et la barre de vue
305
		menuImageVue = new MenuImageVue(this);
305
		menuImageVue = new MenuImageVue(this);
306
		barreOutilsVue = new BarreOutilsVue(this);
306
		barreOutilsVue = new BarreOutilsVue(this);
307
 
307
 
308
		// on initialise le volet qui contient les mots clés
308
		// on initialise le volet qui contient les mots clés
309
		detailsEtMotsCles.setWidth("15%");
309
		detailsEtMotsCles.setWidth("15%");
310
		detailsEtMotsCles.setAnimCollapse(true);
310
		detailsEtMotsCles.setAnimCollapse(true);
311
		detailsEtMotsCles.setTitleCollapse(true);
311
		detailsEtMotsCles.setTitleCollapse(true);
312
		detailsEtMotsCles.setCollapsible(true);
312
		detailsEtMotsCles.setCollapsible(true);
313
 
313
 
314
		// on crée le panneau conteneur des métadonnées et infos
314
		// on crée le panneau conteneur des métadonnées et infos
315
		metadonneesIptcExif = new PanneauMetadonneesVue(this);
315
		metadonneesIptcExif = new PanneauMetadonneesVue(this);
316
		// et on l'inclut dans le volet approprié
316
		// et on l'inclut dans le volet approprié
317
		detailsEtMotsCles.add(metadonneesIptcExif);
317
		detailsEtMotsCles.add(metadonneesIptcExif);
318
		
318
		
319
		panneauMenuEtOngletsImage = new Panel() ;
319
		panneauMenuEtOngletsImage = new Panel() ;
320
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
320
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
321
		// on ajoute la barre de vue au nord du panneau qui contient menu et
321
		// on ajoute la barre de vue au nord du panneau qui contient menu et
322
		// onglets d'images
322
		// onglets d'images
323
		panneauMenuEtOngletsImage.add(barreOutilsVue, regionNord);
323
		panneauMenuEtOngletsImage.add(barreOutilsVue, regionNord);
324
		// les onglets au centre
324
		// les onglets au centre
325
		panneauMenuEtOngletsImage.add(ongletsImage, regionCentre);
325
		panneauMenuEtOngletsImage.add(ongletsImage, regionCentre);
326
		
326
		
327
		// et le panneau de métadonnées et d'info sur le coté droit
327
		// et le panneau de métadonnées et d'info sur le coté droit
328
		panneauPrincipalImage.add(detailsEtMotsCles, regionEst);
328
		panneauPrincipalImage.add(detailsEtMotsCles, regionEst);
329
		
329
		
330
		// on ajoute le panneau qui contient le menu et les onglets d'images au
330
		// on ajoute le panneau qui contient le menu et les onglets d'images au
331
		// centre
331
		// centre
332
		panneauPrincipalImage.add(panneauMenuEtOngletsImage, regionCentre);
332
		panneauPrincipalImage.add(panneauMenuEtOngletsImage, regionCentre);
333
		
333
		
334
		// on ajoute les filtres au panneau gauche
334
		// on ajoute les filtres au panneau gauche
335
		panneauPrincipalImage.add(filtres,regionOuest) ;
335
		panneauPrincipalImage.add(filtres,regionOuest) ;
336
		
336
		
337
		detailsEtMotsCles.addListener(new ContainerListenerAdapter() {
337
		detailsEtMotsCles.addListener(new ContainerListenerAdapter() {
338
 
338
 
339
			public void onResize(BoxComponent component,int adjWidth,int adjHeight,int rawWidth,int rawHeight)
339
			public void onResize(BoxComponent component,int adjWidth,int adjHeight,int rawWidth,int rawHeight)
340
			{
340
			{
341
				if(detailsEtMotsCles != null && detailsEtMotsCles.isRendered() && metadonneesIptcExif != null && metadonneesIptcExif.isRendered()) {
341
				if(detailsEtMotsCles != null && detailsEtMotsCles.isRendered() && metadonneesIptcExif != null && metadonneesIptcExif.isRendered()) {
342
					metadonneesIptcExif.doLayout();
342
					metadonneesIptcExif.doLayout();
343
				}
343
				}
344
			}
344
			}
345
		});
345
		});
346
		
346
		
347
		// filtres.setCollapsed(false) ;
347
		// filtres.setCollapsed(false) ;
348
		thisMediateur = this ;
348
		thisMediateur = this ;
349
		
349
		
350
		estInitialise = true ;
350
		estInitialise = true ;
351
		
351
		
352
		changerUtilisateur() ;
352
		changerUtilisateur() ;
353
	}
353
	}
354
 
354
 
355
	/**
355
	/**
356
	 * Renvoie l'identifiant de l'utilisateur en cours
356
	 * Renvoie l'identifiant de l'utilisateur en cours
357
	 * 
357
	 * 
358
	 * @return l'identifiant de l'utilisateur
358
	 * @return l'identifiant de l'utilisateur
359
	 */
359
	 */
360
	public String getIdentifiant() {
360
	public String getIdentifiant() {
361
		
361
		
362
		return cMediateur.getUtilisateur().getIdentite();
362
		return cMediateur.getUtilisateur().getIdentite();
363
	
363
	
364
	}
364
	}
365
 
365
 
366
	/**
366
	/**
367
	 * . Setteur pour l'identifiant de l'utilisateur en cours
367
	 * . Setteur pour l'identifiant de l'utilisateur en cours
368
	 * 
368
	 * 
369
	 * @param id
369
	 * @param id
370
	 *            le nouvel identifiant utilisateur
370
	 *            le nouvel identifiant utilisateur
371
	 */
371
	 */
372
	public void setIdentifiant(String id) {
372
	public void setIdentifiant(String id) {
373
		identifiant = id;
373
		identifiant = id;
374
	}
374
	}
375
 
375
 
376
	/**
376
	/**
377
	 * Appelle les fonctions de chargement de données, suit généralement un
377
	 * Appelle les fonctions de chargement de données, suit généralement un
378
	 * appel à setIdentifiant, pour obtenir l'arbre des mots clés et les images
378
	 * appel à setIdentifiant, pour obtenir l'arbre des mots clés et les images
379
	 * du nouvel utilisateur
379
	 * du nouvel utilisateur
380
	 */
380
	 */
381
	public void changerUtilisateur() {
381
	public void changerUtilisateur() {
382
		getIModele().initialiserArbreMotsCles();
382
		getIModele().initialiserArbreMotsCles();
383
		obtenirPhotoGalerie(getGalerieImage());
383
		obtenirPhotoGalerie(getGalerieImage());
384
	}
384
	}
385
 
385
 
386
	/**
386
	/**
387
	 * Accesseur pour le modèle associé au médiateur
387
	 * Accesseur pour le modèle associé au médiateur
388
	 * 
388
	 * 
389
	 * @return le modèle associé
389
	 * @return le modèle associé
390
	 */
390
	 */
391
	public ImageModele getIModele() {
391
	public ImageModele getIModele() {
392
		return iModele;
392
		return iModele;
393
	}
393
	}
394
 
394
 
395
	/**
395
	/**
396
	 * Accesseur pour le panneau principal
396
	 * Accesseur pour le panneau principal
397
	 * 
397
	 * 
398
	 * @return le panneau principal
398
	 * @return le panneau principal
399
	 */
399
	 */
400
	public Panel getPanneauPrincipalImage() {
400
	public Panel getPanneauPrincipalImage() {
401
		return panneauPrincipalImage;
401
		return panneauPrincipalImage;
402
	}
402
	}
403
 
403
 
404
	/**
404
	/**
405
	 * Accesseur pour le panneau à onglets
405
	 * Accesseur pour le panneau à onglets
406
	 * 
406
	 * 
407
	 * @return le panneau à onglets
407
	 * @return le panneau à onglets
408
	 */
408
	 */
409
	public TabPanel getOngletsImage() {
409
	public TabPanel getOngletsImage() {
410
		return ongletsImage;
410
		return ongletsImage;
411
	}
411
	}
412
 
412
 
413
	/**
413
	/**
414
	 * Accesseur pour la galerie d'images
414
	 * Accesseur pour la galerie d'images
415
	 * 
415
	 * 
416
	 * @return la galerie d'image
416
	 * @return la galerie d'image
417
	 */
417
	 */
418
	public GalerieImageVue getGalerieImage() {
418
	public GalerieImageVue getGalerieImage() {
419
		return galerieImage;
419
		return galerieImage;
420
	}
420
	}
421
 
421
 
422
	public ListeImageVue getListeImage() {
422
	public ListeImageVue getListeImage() {
423
		return listeImage;
423
		return listeImage;
424
	}
424
	}
425
 
425
 
426
	/**
426
	/**
427
	 * Accesseur pour le panneau "zoom"
427
	 * Accesseur pour le panneau "zoom"
428
	 * 
428
	 * 
429
	 * @return le panneau zoom
429
	 * @return le panneau zoom
430
	 */
430
	 */
431
	public ZoomImageVue getZoomImage() {
431
	public ZoomImageVue getZoomImage() {
432
		return zoomImage;
432
		return zoomImage;
433
	}
433
	}
434
 
434
 
435
	/**
435
	/**
436
	 * Accesseur pour le panneau détails et mot clés
436
	 * Accesseur pour le panneau détails et mot clés
437
	 * 
437
	 * 
438
	 * @return le panneau détails et mots clés
438
	 * @return le panneau détails et mots clés
439
	 */
439
	 */
440
	public Panel getDetailsEtMotsCles() {
440
	public Panel getDetailsEtMotsCles() {
441
		return detailsEtMotsCles;
441
		return detailsEtMotsCles;
442
	}
442
	}
443
 
443
 
444
	/**
444
	/**
445
	 * Accesseur pour le booleen d'instanciation
445
	 * Accesseur pour le booleen d'instanciation
446
	 * 
446
	 * 
447
	 * @return le booleen d'instanciation
447
	 * @return le booleen d'instanciation
448
	 */
448
	 */
449
	public static boolean isEstInstancie() {
449
	public static boolean isEstInstancie() {
450
		return estInstancie;
450
		return estInstancie;
451
	}
451
	}
452
 
452
 
453
	/**
453
	/**
454
	 * Accesseur pour la panneau contenant le menu et les onglets images
454
	 * Accesseur pour la panneau contenant le menu et les onglets images
455
	 * 
455
	 * 
456
	 * @return le panneauMenuEtOngletsImage
456
	 * @return le panneauMenuEtOngletsImage
457
	 */
457
	 */
458
	public Panel getPanneauMenuEtOngletsImage() {
458
	public Panel getPanneauMenuEtOngletsImage() {
459
		return panneauMenuEtOngletsImage;
459
		return panneauMenuEtOngletsImage;
460
	}
460
	}
461
 
461
 
462
	/**
462
	/**
463
	 * Accesseur pour le menu image
463
	 * Accesseur pour le menu image
464
	 * 
464
	 * 
465
	 * @return the menuImageVue
465
	 * @return the menuImageVue
466
	 */
466
	 */
467
	public MenuImageVue getMenuImageVue() {
467
	public MenuImageVue getMenuImageVue() {
468
		return menuImageVue;
468
		return menuImageVue;
469
	}
469
	}
470
 
470
 
471
	/**
471
	/**
472
	 * Accesseur pour la barre d'outils
472
	 * Accesseur pour la barre d'outils
473
	 * 
473
	 * 
474
	 * @return the barreOutilsVue
474
	 * @return the barreOutilsVue
475
	 */
475
	 */
476
	public BarreOutilsVue getBarreOutilsVue() {
476
	public BarreOutilsVue getBarreOutilsVue() {
477
		return barreOutilsVue;
477
		return barreOutilsVue;
478
	}
478
	}
479
 
479
 
480
	/**
480
	/**
481
	 * Accesseur pour le panneau infos et métadonnées
481
	 * Accesseur pour le panneau infos et métadonnées
482
	 * 
482
	 * 
483
	 * @return the metadonneesIptcExif
483
	 * @return the metadonneesIptcExif
484
	 */
484
	 */
485
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
485
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
486
		return metadonneesIptcExif;
486
		return metadonneesIptcExif;
487
	}
487
	}
488
 
488
 
489
	/**
489
	/**
490
	 * Renvoie l'index du dernier onglet sélectionné
490
	 * Renvoie l'index du dernier onglet sélectionné
491
	 * 
491
	 * 
492
	 * @return l'index du dernier onglet
492
	 * @return l'index du dernier onglet
493
	 */
493
	 */
494
	public int getDernierIndexOnglet() {
494
	public int getDernierIndexOnglet() {
495
		return dernierIndexOnglet;
495
		return dernierIndexOnglet;
496
	}
496
	}
497
 
497
 
498
 
498
 
499
	/**
499
	/**
500
	 * Accesseur pour la barre de recherche
500
	 * Accesseur pour la barre de recherche
501
	 * 
501
	 * 
502
	 * @return la barre de recherche pour filtrer les commentaires
502
	 * @return la barre de recherche pour filtrer les commentaires
503
	 */
503
	 */
504
	public BarreRechercheFiltreVue getFiltreCommentaires() {
504
	public BarreRechercheFiltreVue getFiltreCommentaires() {
505
		return filtreCommentaires;
505
		return filtreCommentaires;
506
	}
506
	}
507
 
507
 
508
	/**
508
	/**
509
	 * Renvoie la vue sélectionné par l'utilisateur
509
	 * Renvoie la vue sélectionné par l'utilisateur
510
	 * 
510
	 * 
511
	 * @return la vue selectionnée par l'utilisateur
511
	 * @return la vue selectionnée par l'utilisateur
512
	 */
512
	 */
513
	public VueListable getVueSelectionnee() {
513
	public VueListable getVueSelectionnee() {
514
		Panel active = ongletsImage.getActiveTab();
514
		Panel active = ongletsImage.getActiveTab();
515
		if (active != zoomImage) {
515
		if (active != zoomImage) {
516
			if (active == galerieImage) {
516
			if (active == galerieImage) {
517
				return galerieImage;
517
				return galerieImage;
518
			} else {
518
			} else {
519
				return listeImage;
519
				return listeImage;
520
			}
520
			}
521
 
521
 
522
		} else {
522
		} else {
523
			if (dernierIndexOnglet == 0) {
523
			if (dernierIndexOnglet == 0) {
524
				return galerieImage;
524
				return galerieImage;
525
			} else {
525
			} else {
526
				return listeImage;
526
				return listeImage;
527
			}
527
			}
528
 
528
 
529
		}
529
		}
530
 
530
 
531
	}
531
	}
532
 
532
 
533
	/**
533
	/**
534
	 * Renvoie l'identifiant de la vue en cours
534
	 * Renvoie l'identifiant de la vue en cours
535
	 * 
535
	 * 
536
	 * @return l'identifiant de la vue en cours de visualisation
536
	 * @return l'identifiant de la vue en cours de visualisation
537
	 */
537
	 */
538
	public String getIdVueSelectionnee() {
538
	public String getIdVueSelectionnee() {
539
		Panel active = ongletsImage.getActiveTab();
539
		Panel active = ongletsImage.getActiveTab();
540
		if (active != zoomImage) {
540
		if (active != zoomImage) {
541
			if (active == galerieImage) {
541
			if (active == galerieImage) {
542
				return galerieImage.getId();
542
				return galerieImage.getId();
543
			} else {
543
			} else {
544
				return listeImage.getId();
544
				return listeImage.getId();
545
			}
545
			}
546
 
546
 
547
		} else {
547
		} else {
548
			if (dernierIndexOnglet == 0) {
548
			if (dernierIndexOnglet == 0) {
549
				return galerieImage.getId();
549
				return galerieImage.getId();
550
			} else {
550
			} else {
551
				return listeImage.getId();
551
				return listeImage.getId();
552
			}
552
			}
553
 
553
 
554
		}
554
		}
555
 
555
 
556
	}
556
	}
557
 
557
 
558
	/**
558
	/**
559
	 * Met a jour les données provenant du modèle et synchronise les vues entre
559
	 * Met a jour les données provenant du modèle et synchronise les vues entre
560
	 * elles
560
	 * elles
561
	 * 
561
	 * 
562
	 * @param o
562
	 * @param o
563
	 *            données de mises a jour pour les vues
563
	 *            données de mises a jour pour les vues
564
	 * @param r
564
	 * @param r
565
	 *            le refraichissable qui a demandé la mise a jour
565
	 *            le refraichissable qui a demandé la mise a jour
566
	 */
566
	 */
567
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r) {
567
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r) {
568
 
568
 
569
		if (o instanceof Store) {
569
		if (o instanceof Store) {
570
 
570
 
571
			Store li = (Store) o;
571
			Store li = (Store) o;
572
 
572
 
573
			if (li.getCount() <= 0) {
573
			if (li.getCount() <= 0) {
574
				aucuneSelection();
574
				aucuneSelection();
575
			} else {
575
			} else {
576
				selection();
576
				selection();
577
			}
577
			}
578
 
578
 
579
		}
579
		}
580
 
580
 
581
		if (r != getGalerieImage()) {
581
		if (r != getGalerieImage()) {
582
			getGalerieImage().rafraichir(o, false);
582
			getGalerieImage().rafraichir(o, false);
583
		}
583
		}
584
		if (r != getZoomImage()) {
584
		if (r != getZoomImage()) {
585
			getZoomImage().rafraichir(o, false);
585
			getZoomImage().rafraichir(o, false);
586
		}
586
		}
587
		if (r != getListeImage()) {
587
		if (r != getListeImage()) {
588
			getListeImage().rafraichir(o, false);
588
			getListeImage().rafraichir(o, false);
589
		}
589
		}
590
 
590
 
591
		aucuneSelection();
591
		aucuneSelection();
592
		demasquerChargement();
592
		demasquerChargement();
593
	}
593
	}
-
 
594
	
-
 
595
 
-
 
596
	public void obtenirPhotoGalerie() {
-
 
597
		
-
 
598
		obtenirPhotoGalerie(getGalerieImage());
-
 
599
	}
594
 
600
 
595
	/**
601
	/**
596
	 * envoie au modèle une demande de mise a jour
602
	 * envoie au modèle une demande de mise a jour
597
	 * 
603
	 * 
598
	 * @param r
604
	 * @param r
599
	 *            la vue demandeuse de mise a jour
605
	 *            la vue demandeuse de mise a jour
600
	 */
606
	 */
601
	public void obtenirPhotoGalerie(Rafraichissable r) {
607
	public void obtenirPhotoGalerie(Rafraichissable r) {
602
		masquerChargement();
608
		masquerChargement();
603
		getIModele().obtenirNombrePhotoGalerie(r);
609
		getIModele().obtenirNombrePhotoGalerie(r);
604
	}
610
	}
605
 
611
 
606
	/**
612
	/**
607
	 * demande au modèle les métadonnées associées a une image
613
	 * demande au modèle les métadonnées associées a une image
608
	 * 
614
	 * 
609
	 * @param r
615
	 * @param r
610
	 *            la vue demandeuse de mise a jour
616
	 *            la vue demandeuse de mise a jour
611
	 * @param id
617
	 * @param id
612
	 *            l'identifiant de l'image
618
	 *            l'identifiant de l'image
613
	 */
619
	 */
614
	public void obtenirMetadonnees(Rafraichissable r, String id) {
620
	public void obtenirMetadonnees(Rafraichissable r, String id) {
615
		getIModele().obtenirMetadonnees(r, id);
621
		getIModele().obtenirMetadonnees(r, id);
616
	}
622
	}
617
 
623
 
618
	/**
624
	/**
619
	 * demande au modèle les ids des mots clés associés a une image
625
	 * demande au modèle les ids des mots clés associés a une image
620
	 * 
626
	 * 
621
	 * @param r
627
	 * @param r
622
	 *            la vue demandeuse de mise a jour
628
	 *            la vue demandeuse de mise a jour
623
	 * @param id
629
	 * @param id
624
	 *            l'identifiant de l'image
630
	 *            l'identifiant de l'image
625
	 */
631
	 */
626
	public void obtenirMotsClesId(Rafraichissable r, String id) {
632
	public void obtenirMotsClesId(Rafraichissable r, String id) {
627
		getIModele().obtenirMotsClesId(r, id);
633
		getIModele().obtenirMotsClesId(r, id);
628
	}
634
	}
629
 
635
 
630
	/**
636
	/**
631
	 * Envoie au modèle une demande pour obtenir l'arbre des mots clés
637
	 * Envoie au modèle une demande pour obtenir l'arbre des mots clés
632
	 * 
638
	 * 
633
	 * @param r
639
	 * @param r
634
	 *            le raffraichissable qui a demandé la mise à jour
640
	 *            le raffraichissable qui a demandé la mise à jour
635
	 */
641
	 */
636
	public void obtenirArbreMotsCles(Rafraichissable r) {
642
	public void obtenirArbreMotsCles(Rafraichissable r) {
637
		getIModele().initialiserArbreMotsCles();
643
		getIModele().initialiserArbreMotsCles();
638
	}
644
	}
639
 
645
 
640
	/**
646
	/**
641
	 * envoie au modèle une demande de mise a jour des informations modifiables
647
	 * envoie au modèle une demande de mise a jour des informations modifiables
642
	 * associées a une image
648
	 * associées a une image
643
	 * 
649
	 * 
644
	 * @param commentaires
650
	 * @param commentaires
645
	 *            le commentaire de l'image
651
	 *            le commentaire de l'image
646
	 * @param date
652
	 * @param date
647
	 *            la date modifiée par l'utilisateur
653
	 *            la date modifiée par l'utilisateur
648
	 */
654
	 */
649
	public void mettreAJourInfo(String commentaires, String date, String note) {
655
	public void mettreAJourInfo(String commentaires, String date, String note) {
650
		String ids[] = getVueSelectionnee().getIdSelectionnees();
656
		String ids[] = getVueSelectionnee().getIdSelectionnees();
651
 
657
 
652
		getIModele().mettreAJourCacheImage(commentaires, date, note, ids);
658
		getIModele().mettreAJourCacheImage(commentaires, date, note, ids);
653
		getListeImage().mettreAjourInfos(commentaires, date, note);
659
		getListeImage().mettreAjourInfos(commentaires, date, note);
654
	}
660
	}
655
 
661
 
656
	/**
662
	/**
657
	 * Met à jour l'arbre des mots clés affichés dans le volet de droite à
663
	 * Met à jour l'arbre des mots clés affichés dans le volet de droite à
658
	 * partir de l'arbre passé en paramètre
664
	 * partir de l'arbre passé en paramètre
659
	 * 
665
	 * 
660
	 * @param arbreMC
666
	 * @param arbreMC
661
	 *            le nouvel arbre des mots clés
667
	 *            le nouvel arbre des mots clés
662
	 */
668
	 */
663
	public void rafraichirArbreMotsCles(Tree arbreMC) {
669
	public void rafraichirArbreMotsCles(Tree arbreMC) {
664
		metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false);
670
		metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false);
665
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
671
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
666
	}
672
	}
667
 
673
 
668
	/**
674
	/**
669
	 * envoie au modèle une demande pour lancer le formulaire ou l'application
675
	 * envoie au modèle une demande pour lancer le formulaire ou l'application
670
	 * d'upload
676
	 * d'upload
671
	 */
677
	 */
672
	public void uploaderImages(boolean multiple) {
678
	public void uploaderImages(boolean multiple) {
673
		if(cMediateur.getUtilisateur().isIdentifie()) {
679
		if(cMediateur.getUtilisateur().isIdentifie()) {
674
			getIModele().uploaderImages(multiple);
680
			getIModele().uploaderImages(multiple);
675
		}
681
		}
676
		else
682
		else
677
		{
683
		{
678
			if(Window.confirm("L'envoi d'images nécéssite d'être identifié. Voulez-vous vous identifier maintenant ?")) {
684
			if(Window.confirm("L'envoi d'images nécéssite d'être identifié. Voulez-vous vous identifier maintenant ?")) {
679
				cMediateur.afficherDialogueConnexion();
685
				cMediateur.afficherDialogueConnexion();
680
			}
686
			}
681
			else
687
			else
682
			{
688
			{
683
				
689
				
684
			}
690
			}
685
		}
691
		}
686
	}
692
	}
687
 
693
 
688
	/**
694
	/**
689
	 * Envoie une demande au modèle pour obtenir toutes les données annexes de
695
	 * Envoie une demande au modèle pour obtenir toutes les données annexes de
690
	 * l'image (métadonnées, note, etc ...), on y centralise tous les appels a
696
	 * l'image (métadonnées, note, etc ...), on y centralise tous les appels a
691
	 * obtenirQuelqueChose
697
	 * obtenirQuelqueChose
692
	 * 
698
	 * 
693
	 * @param imgNum
699
	 * @param imgNum
694
	 *            l'identifiant de l'image
700
	 *            l'identifiant de l'image
695
	 */
701
	 */
696
	public void obtenirDonnes(String imgNum) {
702
	public void obtenirDonnes(String imgNum) {
697
		
703
		
698
		if(imgNum == null) {
704
		if(imgNum == null) {
699
			return;
705
			return;
700
		}
706
		}
701
		
707
		
702
		// si on est en mode liaison, on demande la liste des obs
708
		// si on est en mode liaison, on demande la liste des obs
703
		if(getMetadonneesIptcExif().getMiniListeObservation().getMode())
709
		if(getMetadonneesIptcExif().getMiniListeObservation().getMode())
704
		{
710
		{
705
			obtenirObservationsAssociees() ;
711
			obtenirObservationsAssociees() ;
706
		}
712
		}
707
		obtenirMetadonnees(metadonneesIptcExif, imgNum);
713
		obtenirMetadonnees(metadonneesIptcExif, imgNum);
708
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum);
714
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum);
709
		obtenirNote(metadonneesIptcExif.getNoteVue(), imgNum);
715
		obtenirNote(metadonneesIptcExif.getNoteVue(), imgNum);
710
 
716
 
711
	}
717
	}
712
	
718
	
713
	public void changerModeLiaison(boolean mode) {
719
	public void changerModeLiaison(boolean mode) {
714
		
720
		
715
		if(mode) {
721
		if(mode) {
716
			obtenirObservationsAssociees() ;
722
			obtenirObservationsAssociees() ;
717
			metadonneesIptcExif.getRechercheFiltreTaxonVue().disable();
723
			metadonneesIptcExif.getRechercheFiltreTaxonVue().disable();
718
		}
724
		}
719
		else {
725
		else {
720
			obtenirNombreMiniListeObservations() ;
726
			obtenirNombreMiniListeObservations() ;
721
			metadonneesIptcExif.getRechercheFiltreTaxonVue().enable();
727
			metadonneesIptcExif.getRechercheFiltreTaxonVue().enable();
722
		}
728
		}
723
	}
729
	}
724
 
730
 
725
	/**
731
	/**
726
	 * Envoie une demande au modèle pour obtenir la note associée à une image
732
	 * Envoie une demande au modèle pour obtenir la note associée à une image
727
	 * 
733
	 * 
728
	 * @param noteVue
734
	 * @param noteVue
729
	 *            le rafraichissable à qui est destiné cette information
735
	 *            le rafraichissable à qui est destiné cette information
730
	 * @param imgNum
736
	 * @param imgNum
731
	 *            l'identifiant de l'image
737
	 *            l'identifiant de l'image
732
	 */
738
	 */
733
	private void obtenirNote(Rafraichissable r, String imgNum) {
739
	private void obtenirNote(Rafraichissable r, String imgNum) {
734
 
740
 
735
		getIModele().obtenirNote(r, imgNum);
741
		getIModele().obtenirNote(r, imgNum);
736
	}
742
	}
737
 
743
 
738
	/**
744
	/**
739
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie le
745
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie le
740
	 * médiateur gère alors les conséquences
746
	 * médiateur gère alors les conséquences
741
	 * 
747
	 * 
742
	 * @param index
748
	 * @param index
743
	 *            l'index du noeud dans la galerie
749
	 *            l'index du noeud dans la galerie
744
	 * @param node
750
	 * @param node
745
	 *            le noeud selectionné
751
	 *            le noeud selectionné
746
	 * @param e
752
	 * @param e
747
	 *            l'object source de l'évenement
753
	 *            l'object source de l'évenement
748
	 */
754
	 */
749
	public void clicGalerieImage(int index, Element node, EventObject e) {
755
	public void clicGalerieImage(int index, Element node, EventObject e) {
750
		Record rd = getGalerieImage().getDView().getRecord(node);
756
		Record rd = getGalerieImage().getDView().getRecord(node);
751
		String imgUrl = rd.getAsString("url_image");
757
		String imgUrl = rd.getAsString("url_image");
752
		String imgNum = rd.getAsString("num_image");
758
		String imgNum = rd.getAsString("num_image");
753
		String imgTaxon = rd.getAsString("obs_associees");
759
		String imgTaxon = rd.getAsString("obs_associees");
754
		String[] imgXY = getIModele().obtenirTailleImage(
760
		String[] imgXY = getIModele().obtenirTailleImage(
755
				rd.getAsString("num_image"));
761
				rd.getAsString("num_image"));
756
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon};
762
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon};
757
 
763
 
758
		getZoomImage().rafraichir(infosImage, false);
764
		getZoomImage().rafraichir(infosImage, false);
759
		dernierIndexOnglet = 0;
765
		dernierIndexOnglet = 0;
760
 
766
 
761
		if (DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK) {
767
		if (DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK) {
762
 
768
 
763
			getOngletsImage().setActiveTab(2);
769
			getOngletsImage().setActiveTab(2);
764
		}
770
		}
765
 
771
 
766
		obtenirDonnes(imgNum);
772
		obtenirDonnes(imgNum);
767
 
773
 
768
	}
774
	}
769
 
775
 
770
	/**
776
	/**
771
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
777
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
772
	 * médiateur gère alors les conséquences
778
	 * médiateur gère alors les conséquences
773
	 * 
779
	 * 
774
	 * @param rowIndex
780
	 * @param rowIndex
775
	 *            le numéro de ligne selectionné
781
	 *            le numéro de ligne selectionné
776
	 */
782
	 */
777
	public void clicListeImage(int rowIndex) {
783
	public void clicListeImage(int rowIndex) {
778
		Record rd = getListeImage().getSelectionModel().getSelected();
784
		Record rd = getListeImage().getSelectionModel().getSelected();
779
		String imgUrl = rd.getAsString("url_image");
785
		String imgUrl = rd.getAsString("url_image");
780
		String imgNum = rd.getAsString("num_image");
786
		String imgNum = rd.getAsString("num_image");
781
		String imgTaxon = rd.getAsString("obs_associees");
787
		String imgTaxon = rd.getAsString("obs_associees");
782
		String[] imgXY = getIModele().obtenirTailleImage(
788
		String[] imgXY = getIModele().obtenirTailleImage(
783
				rd.getAsString("num_image"));
789
				rd.getAsString("num_image"));
784
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
790
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
785
 
791
 
786
		getZoomImage().rafraichir(infosImage, false);
792
		getZoomImage().rafraichir(infosImage, false);
787
		dernierIndexOnglet = 1;
793
		dernierIndexOnglet = 1;
788
 
794
 
789
		obtenirDonnes(imgNum);
795
		obtenirDonnes(imgNum);
790
	}
796
	}
791
 
797
 
792
	/**
798
	/**
793
	 * gestion du double clic dans la liste
799
	 * gestion du double clic dans la liste
794
	 * 
800
	 * 
795
	 * @param rowIndex
801
	 * @param rowIndex
796
	 */
802
	 */
797
	public void doubleClicListeImage(int rowIndex) {
803
	public void doubleClicListeImage(int rowIndex) {
798
		getOngletsImage().setActiveTab(2);
804
		getOngletsImage().setActiveTab(2);
799
	}
805
	}
800
 
806
 
801
	/**
807
	/**
802
	 * envoie une demande de mise a jour des données au modèle
808
	 * envoie une demande de mise a jour des données au modèle
803
	 */
809
	 */
804
	public void rafraichirToutesVues() {
810
	public void rafraichirToutesVues() {
805
		obtenirPhotoGalerie(getIModele());
811
		obtenirPhotoGalerie(getIModele());
806
	}
812
	}
807
 
813
 
808
	/**
814
	/**
809
	 * montre le menu au coordonnées indiquées
815
	 * montre le menu au coordonnées indiquées
810
	 * 
816
	 * 
811
	 * @param e
817
	 * @param e
812
	 *            l'objet source de l'évenement
818
	 *            l'objet source de l'évenement
813
	 */
819
	 */
814
	public void montrerContextMenu(EventObject e) {
820
	public void montrerContextMenu(EventObject e) {
815
		menuImageVue.showAt(e.getXY());
821
		menuImageVue.showAt(e.getXY());
816
	}
822
	}
817
	
823
	
818
	/**
824
	/**
819
	 * montre le menu au coordonnées indiquées
825
	 * montre le menu au coordonnées indiquées
820
	 * 
826
	 * 
821
	 * @param e
827
	 * @param e
822
	 *            l'objet source de l'évenement
828
	 *            l'objet source de l'évenement
823
	 */
829
	 */
824
	public void montrerContextMenu(int[] XY) {
830
	public void montrerContextMenu(int[] XY) {
825
		menuImageVue.showAt(XY);
831
		menuImageVue.showAt(XY);
826
	}
832
	}
827
	
833
	
828
	/**
834
	/**
829
	 * appelé lors du double clic sur l'image agrandie
835
	 * appelé lors du double clic sur l'image agrandie
830
	 */
836
	 */
831
	public void doubleClicZoomImage() {
837
	public void doubleClicZoomImage() {
832
		getOngletsImage().setActiveTab(dernierIndexOnglet);
838
		getOngletsImage().setActiveTab(dernierIndexOnglet);
833
	}
839
	}
834
 
840
 
835
	/**
841
	/**
836
	 * appelé lors du clic sur un des boutons de la zone zoom
842
	 * appelé lors du clic sur un des boutons de la zone zoom
837
	 * 
843
	 * 
838
	 * @param arg
844
	 * @param arg
839
	 *            le nom du bouton qui a cliqué
845
	 *            le nom du bouton qui a cliqué
840
	 */
846
	 */
841
	public void clicBoutonZoomImage(String arg) {
847
	public void clicBoutonZoomImage(String arg) {
842
 
848
 
843
		Store st;
849
		Store st;
844
		int selected;
850
		int selected;
845
		int storeIndex;
851
		int storeIndex;
846
		Record nRec = null;
852
		Record nRec = null;
847
 
853
 
848
		// tout d'abord on obtient les index selectionnés suivant la vue
854
		// tout d'abord on obtient les index selectionnés suivant la vue
849
		if (getVueSelectionnee() == galerieImage) {
855
		if (getVueSelectionnee() == galerieImage) {
850
			DataView dv = getGalerieImage().getDView();
856
			DataView dv = getGalerieImage().getDView();
851
			st = getGalerieImage().getSt();
857
			st = getGalerieImage().getSt();
852
 
858
 
853
			if (st.getCount() <= 0) {
859
			if (st.getCount() <= 0) {
854
				return;
860
				return;
855
			}
861
			}
856
 
862
 
857
			selected = st.indexOf(dv.getSelectedRecords()[0]);
863
			selected = st.indexOf(dv.getSelectedRecords()[0]);
858
			storeIndex = dv.indexOf(selected);
864
			storeIndex = dv.indexOf(selected);
859
		} else {
865
		} else {
860
			st = listeImage.getSt();
866
			st = listeImage.getSt();
861
 
867
 
862
			if (st.getCount() <= 0) {
868
			if (st.getCount() <= 0) {
863
				return;
869
				return;
864
			}
870
			}
865
 
871
 
866
			selected = st.indexOf(listeImage.getSelectionModel().getSelected());
872
			selected = st.indexOf(listeImage.getSelectionModel().getSelected());
867
			storeIndex = selected;
873
			storeIndex = selected;
868
		}
874
		}
869
 
875
 
870
		if (arg.equals("prev")) {
876
		if (arg.equals("prev")) {
871
			// si la photo séléctionnée est la première, on passe a la
877
			// si la photo séléctionnée est la première, on passe a la
872
			// dernière
878
			// dernière
873
			if (selected == 0) {
879
			if (selected == 0) {
874
				storeIndex = st.getCount() - 1;
880
				storeIndex = st.getCount() - 1;
875
				nRec = st.getAt(storeIndex);
881
				nRec = st.getAt(storeIndex);
876
 
882
 
877
			} else {
883
			} else {
878
				storeIndex = storeIndex - 1;
884
				storeIndex = storeIndex - 1;
879
				nRec = st.getAt(storeIndex);
885
				nRec = st.getAt(storeIndex);
880
			}
886
			}
881
 
887
 
882
		}
888
		}
883
 
889
 
884
		if (arg.equals("suiv")) {
890
		if (arg.equals("suiv")) {
885
			// si la photo selectionnée est la dernière on passe a la
891
			// si la photo selectionnée est la dernière on passe a la
886
			// première
892
			// première
887
			if (selected == st.getCount() - 1) {
893
			if (selected == st.getCount() - 1) {
888
 
894
 
889
				storeIndex = 0;
895
				storeIndex = 0;
890
				nRec = st.getAt(0);
896
				nRec = st.getAt(0);
891
			} else {
897
			} else {
892
				storeIndex = storeIndex + 1;
898
				storeIndex = storeIndex + 1;
893
				nRec = st.getAt(storeIndex);
899
				nRec = st.getAt(storeIndex);
894
			}
900
			}
895
		}
901
		}
896
 
902
 
897
		if (nRec != null) {
903
		if (nRec != null) {
898
						
904
						
899
			String imgUrl = nRec.getAsString("url_image");
905
			String imgUrl = nRec.getAsString("url_image");
900
			String imgNum = nRec.getAsString("num_image");
906
			String imgNum = nRec.getAsString("num_image");
901
			String[] imgXY = getIModele().obtenirTailleImage(
907
			String[] imgXY = getIModele().obtenirTailleImage(
902
					nRec.getAsString("num_image"));
908
					nRec.getAsString("num_image"));
903
			String imgTaxon = nRec.getAsString("obs_associees");
909
			String imgTaxon = nRec.getAsString("obs_associees");
904
			String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
910
			String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
905
			getZoomImage().rafraichir(infosImage, false);
911
			getZoomImage().rafraichir(infosImage, false);
906
 
912
 
907
			if (getGalerieImage().isRendered()) {
913
			if (getGalerieImage().isRendered()) {
908
				getGalerieImage().getDView().select(storeIndex);
914
				getGalerieImage().getDView().select(storeIndex);
909
			}
915
			}
910
 
916
 
911
			if (getListeImage().isRendered()) {
917
			if (getListeImage().isRendered()) {
912
				getListeImage().getSelectionModel().selectRecords(nRec);
918
				getListeImage().getSelectionModel().selectRecords(nRec);
913
			}
919
			}
914
 
920
 
915
			obtenirDonnes(imgNum);
921
			obtenirDonnes(imgNum);
916
		}
922
		}
917
	}
923
	}
918
 
924
 
919
	/**
925
	/**
920
	 * synchronise la selection entre la galerie et la liste
926
	 * synchronise la selection entre la galerie et la liste
921
	 * 
927
	 * 
922
	 * @param string
928
	 * @param string
923
	 *            le nom de la vue qui doit être synchronisee
929
	 *            le nom de la vue qui doit être synchronisee
924
	 */
930
	 */
925
	public void synchroniserSelection(String string) {
931
	public void synchroniserSelection(String string) {
926
 
932
 
927
		if (string.equals("galerie") && getDernierIndexOnglet() != 2) {
933
		if (string.equals("galerie") && getDernierIndexOnglet() != 2) {
928
			Record[] sel = getGalerieImage().getDView().getSelectedRecords();
934
			Record[] sel = getGalerieImage().getDView().getSelectedRecords();
929
			getListeImage().selectionnerEnregistrements(sel);
935
			getListeImage().selectionnerEnregistrements(sel);
930
		}
936
		}
931
 
937
 
932
		if (string.equals("liste") && getDernierIndexOnglet() != 0) {
938
		if (string.equals("liste") && getDernierIndexOnglet() != 0) {
933
 
939
 
934
			Record[] sel = getListeImage().getSelectionModel().getSelections();
940
			Record[] sel = getListeImage().getSelectionModel().getSelections();
935
			int[] ids = new int[sel.length];
941
			int[] ids = new int[sel.length];
936
 
942
 
937
			for (int i = 0; i < sel.length; i++) {
943
			for (int i = 0; i < sel.length; i++) {
938
 
944
 
939
				ids[i] = getGalerieImage().getSt().indexOf(sel[i]);
945
				ids[i] = getGalerieImage().getSt().indexOf(sel[i]);
940
			}
946
			}
941
 
947
 
942
			getGalerieImage().selectionnerImages(ids);
948
			getGalerieImage().selectionnerImages(ids);
943
		}
949
		}
944
 
950
 
945
	}
951
	}
946
 
952
 
947
	/**
953
	/**
948
	 * fait une demande de suppression des images (en local et en distant) des
954
	 * fait une demande de suppression des images (en local et en distant) des
949
	 * images selectionnees
955
	 * images selectionnees
950
	 */
956
	 */
951
	public void supprimerImages() {
957
	public void supprimerImages() {
952
 
958
 
953
		String[] ids = null;
959
		String[] ids = null;
954
 
960
 
955
		if (dernierIndexOnglet == 0) {
961
		if (dernierIndexOnglet == 0) {
956
			ids = getGalerieImage().getIdSelectionnees();
962
			ids = getGalerieImage().getIdSelectionnees();
957
		} else {
963
		} else {
958
			ids = getListeImage().getIdSelectionnees();
964
			ids = getListeImage().getIdSelectionnees();
959
		}
965
		}
960
 
966
 
961
		if (ids.length > 0) {
967
		if (ids.length > 0) {
962
 
968
 
963
			if (com.google.gwt.user.client.Window
969
			if (com.google.gwt.user.client.Window
964
					.confirm("Supprimer les images selectionnees ?")) {
970
					.confirm("Supprimer les images selectionnees ?")) {
965
				masquerChargement();
971
				masquerChargement();
966
				getIModele().supprimerImages(ids);
972
				getIModele().supprimerImages(ids);
967
				aucuneSelection();
973
				aucuneSelection();
968
			}
974
			}
969
		} else {
975
		} else {
970
			Window.alert("Impossible de supprimer : aucune image selectionnee");
976
			Window.alert("Impossible de supprimer : aucune image selectionnee");
971
		}
977
		}
972
 
978
 
973
	}
979
	}
974
 
980
 
975
	/**
981
	/**
976
	 * desactive les onglets de metadonnees et de zoom (dans le cas ou rien
982
	 * desactive les onglets de metadonnees et de zoom (dans le cas ou rien
977
	 * n'est selectionne)
983
	 * n'est selectionne)
978
	 */
984
	 */
979
	public void aucuneSelection() {
985
	public void aucuneSelection() {
980
 
986
 
981
		if (getListeImage().getSelectionModel().getCount() <= 0
987
		if (getListeImage().getSelectionModel().getCount() <= 0
982
				&& getGalerieImage().getDView().getSelectionCount() <= 0) {
988
				&& getGalerieImage().getDView().getSelectionCount() <= 0) {
983
			getZoomImage().disable();
989
			getZoomImage().disable();
984
			getMetadonneesIptcExif().desactiverPanneau();
990
			getMetadonneesIptcExif().desactiverPanneau();
985
			getZoomImage().desactiverPanneau();
991
			getZoomImage().desactiverPanneau();
986
			setSelection(false);
992
			setSelection(false);
987
		}
993
		}
988
 
994
 
989
	}
995
	}
990
 
996
 
991
	/**
997
	/**
992
	 * reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il
998
	 * reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il
993
	 * n'y en avait pas)
999
	 * n'y en avait pas)
994
	 */
1000
	 */
995
	public void selection() {
1001
	public void selection() {
996
 
1002
 
997
		if (!isSelection()) {
1003
		if (!isSelection()) {
998
			getMetadonneesIptcExif().activerPanneau();
1004
			getMetadonneesIptcExif().activerPanneau();
999
			getZoomImage().activerPanneau();
1005
			getZoomImage().activerPanneau();
1000
			getZoomImage().enable();
1006
			getZoomImage().enable();
1001
			setSelection(true);
1007
			setSelection(true);
1002
		}
1008
		}
1003
	}
1009
	}
1004
 
1010
 
1005
	/**
1011
	/**
1006
	 * Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau
1012
	 * Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau
1007
	 * d'un noeud donné
1013
	 * d'un noeud donné
1008
	 * 
1014
	 * 
1009
	 * @param n
1015
	 * @param n
1010
	 *            le noeud ou le menu doit apparaitre
1016
	 *            le noeud ou le menu doit apparaitre
1011
	 * @param ev
1017
	 * @param ev
1012
	 *            l'objet contenant les données sur l'évenement
1018
	 *            l'objet contenant les données sur l'évenement
1013
	 * @param te
1019
	 * @param te
1014
	 *            l'éditeur associé à l'arbre qui permet de modifier les
1020
	 *            l'éditeur associé à l'arbre qui permet de modifier les
1015
	 *            libellés des noeuds
1021
	 *            libellés des noeuds
1016
	 */
1022
	 */
1017
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev,
1023
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev,
1018
			final TreeEditor te) {
1024
			final TreeEditor te) {
1019
		Menu mn = new Menu();
1025
		Menu mn = new Menu();
1020
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
1026
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
1021
				"Ajouter mot cle");
1027
				"Ajouter mot cle");
1022
		final com.gwtext.client.widgets.menu.Item suppN = new Item(
1028
		final com.gwtext.client.widgets.menu.Item suppN = new Item(
1023
				"Supprimer mot cle");
1029
				"Supprimer mot cle");
1024
 
1030
 
1025
		mn.addItem(ajoutN);
1031
		mn.addItem(ajoutN);
1026
		mn.addItem(suppN);
1032
		mn.addItem(suppN);
1027
 
1033
 
1028
		mn.addListener(new MenuListenerAdapter() {
1034
		mn.addListener(new MenuListenerAdapter() {
1029
 
1035
 
1030
			public void onItemClick(BaseItem item, EventObject e) {
1036
			public void onItemClick(BaseItem item, EventObject e) {
1031
				if (item.equals(suppN)) {
1037
				if (item.equals(suppN)) {
1032
					getMetadonneesIptcExif().getPanneauMotsCles()
1038
					getMetadonneesIptcExif().getPanneauMotsCles()
1033
							.supprimerNoeud(n);
1039
							.supprimerNoeud(n);
1034
				}
1040
				}
1035
				if (item.equals(ajoutN)) {
1041
				if (item.equals(ajoutN)) {
1036
					getMetadonneesIptcExif().getPanneauMotsCles().ajouterNoeud(
1042
					getMetadonneesIptcExif().getPanneauMotsCles().ajouterNoeud(
1037
							n);
1043
							n);
1038
				}
1044
				}
1039
			}
1045
			}
1040
		});
1046
		});
1041
 
1047
 
1042
		mn.showAt(ev.getXY());
1048
		mn.showAt(ev.getXY());
1043
 
1049
 
1044
	}
1050
	}
1045
 
1051
 
1046
	/**
1052
	/**
1047
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
1053
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
1048
	 * mot clé
1054
	 * mot clé
1049
	 * 
1055
	 * 
1050
	 * @param text
1056
	 * @param text
1051
	 *            le texte du mot clé
1057
	 *            le texte du mot clé
1052
	 * @param id
1058
	 * @param id
1053
	 *            l'identifiant du mot clé
1059
	 *            l'identifiant du mot clé
1054
	 */
1060
	 */
1055
	public void mettreAjourMotsClesId(String text, String id) {
1061
	public void mettreAjourMotsClesId(String text, String id) {
1056
 
1062
 
1057
		getIModele().mettreAjourMotsClesId(text, id);
1063
		getIModele().mettreAjourMotsClesId(text, id);
1058
 
1064
 
1059
	}
1065
	}
1060
 
1066
 
1061
	/**
1067
	/**
1062
	 * Récupère les identifiants des images selectionnés et appelle le modèle
1068
	 * Récupère les identifiants des images selectionnés et appelle le modèle
1063
	 * pour qu'il mette à jour les associations mots clés/images
1069
	 * pour qu'il mette à jour les associations mots clés/images
1064
	 * 
1070
	 * 
1065
	 * @param motsClesEnCours
1071
	 * @param motsClesEnCours
1066
	 *            les mots clés à associer aux images selectionnés séparés par
1072
	 *            les mots clés à associer aux images selectionnés séparés par
1067
	 *            une ','
1073
	 *            une ','
1068
	 * @param arbreMC
1074
	 * @param arbreMC
1069
	 *            l'arbre des mots clés à mettre à jour
1075
	 *            l'arbre des mots clés à mettre à jour
1070
	 */
1076
	 */
1071
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
1077
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
1072
 
1078
 
1073
		String[] ids = getGalerieImage().getIdSelectionnees();
1079
		String[] ids = getGalerieImage().getIdSelectionnees();
1074
		getIModele().mettreAjourMotsCles(ids, motsClesEnCours, arbreMC);
1080
		getIModele().mettreAjourMotsCles(ids, motsClesEnCours, arbreMC);
1075
 
1081
 
1076
	}
1082
	}
1077
 
1083
 
1078
	/**
1084
	/**
1079
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
1085
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
1080
	 * clés
1086
	 * clés
1081
	 * 
1087
	 * 
1082
	 * @param n
1088
	 * @param n
1083
	 *            le noeud à ajouter à l'arbre
1089
	 *            le noeud à ajouter à l'arbre
1084
	 * @param arbreMC
1090
	 * @param arbreMC
1085
	 *            le nouvel arbre de mots clés à mettre à jour
1091
	 *            le nouvel arbre de mots clés à mettre à jour
1086
	 */
1092
	 */
1087
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
1093
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
1088
		getIModele().ajouterMotCleDansArbre(n, arbreMC);
1094
		getIModele().ajouterMotCleDansArbre(n, arbreMC);
1089
		filtres.getMotsClesFiltre().rafraichir(n, false);
1095
		filtres.getMotsClesFiltre().rafraichir(n, false);
1090
 
1096
 
1091
	}
1097
	}
1092
 
1098
 
1093
	/**
1099
	/**
1094
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
1100
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
1095
	 * dans l'arbre des mots clés
1101
	 * dans l'arbre des mots clés
1096
	 * 
1102
	 * 
1097
	 * @param n
1103
	 * @param n
1098
	 *            le noeud à supprimer
1104
	 *            le noeud à supprimer
1099
	 * @param arbreMC
1105
	 * @param arbreMC
1100
	 *            le nouvel arbre de mots clés à mettre à jour
1106
	 *            le nouvel arbre de mots clés à mettre à jour
1101
	 */
1107
	 */
1102
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1108
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1103
 
1109
 
1104
		getIModele().supprimerMotCleDansArbre(n, arbreMC);
1110
		getIModele().supprimerMotCleDansArbre(n, arbreMC);
1105
		filtres.getMotsClesFiltre().rafraichir(n.getId(), false);
1111
		filtres.getMotsClesFiltre().rafraichir(n.getId(), false);
1106
 
1112
 
1107
	}
1113
	}
1108
 
1114
 
1109
	/**
1115
	/**
1110
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1116
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1111
	 * clés
1117
	 * clés
1112
	 * 
1118
	 * 
1113
	 * @param n
1119
	 * @param n
1114
	 *            le noeud à modifier
1120
	 *            le noeud à modifier
1115
	 * @param arbreMC
1121
	 * @param arbreMC
1116
	 *            le nouvel arbre de mots clés à mettre à jour
1122
	 *            le nouvel arbre de mots clés à mettre à jour
1117
	 */
1123
	 */
1118
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1124
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1119
 
1125
 
1120
		getIModele().modifierMotCleDansArbre(n, arbreMC);
1126
		getIModele().modifierMotCleDansArbre(n, arbreMC);
1121
		filtres.getMotsClesFiltre().rafraichir(n, false);
1127
		filtres.getMotsClesFiltre().rafraichir(n, false);
1122
 
1128
 
1123
	}
1129
	}
1124
 
1130
 
1125
	/**
1131
	/**
1126
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1132
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1127
	 * l'arbre des mots clés
1133
	 * l'arbre des mots clés
1128
	 * 
1134
	 * 
1129
	 * @param n
1135
	 * @param n
1130
	 *            le noeud à déplacer
1136
	 *            le noeud à déplacer
1131
	 * @param arbreMC
1137
	 * @param arbreMC
1132
	 *            le nouvel arbre de mots clés à mettre à jour
1138
	 *            le nouvel arbre de mots clés à mettre à jour
1133
	 */
1139
	 */
1134
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1140
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1135
 
1141
 
1136
		getIModele().deplacerMotCleDansArbre(n, arbreMC);
1142
		getIModele().deplacerMotCleDansArbre(n, arbreMC);
1137
		filtres.getMotsClesFiltre().rafraichir(n, false);
1143
		filtres.getMotsClesFiltre().rafraichir(n, false);
1138
	}
1144
	}
1139
 
1145
 
1140
	/**
1146
	/**
1141
	 * initialise les mots clés cochés par rapport aux images sélectionnées
1147
	 * initialise les mots clés cochés par rapport aux images sélectionnées
1142
	 */
1148
	 */
1143
	public void initialiserMotsCleCoches() {
1149
	public void initialiserMotsCleCoches() {
1144
 
1150
 
1145
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(),
1151
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(),
1146
				getGalerieImage().getIdSelectionnees()[0]);
1152
				getGalerieImage().getIdSelectionnees()[0]);
1147
	}
1153
	}
1148
 
1154
 
1149
	/**
1155
	/**
1150
	 * Appelle le modèle pour lui demander les données d'une page à afficher
1156
	 * Appelle le modèle pour lui demander les données d'une page à afficher
1151
	 * 
1157
	 * 
1152
	 * @param pageCourante
1158
	 * @param pageCourante
1153
	 *            le numéro de page à affciher
1159
	 *            le numéro de page à affciher
1154
	 */
1160
	 */
1155
	public void changerNumeroPage(int pageCourante) {
1161
	public void changerNumeroPage(int pageCourante) {
1156
 
1162
 
1157
		// on met le mesage d'attente
1163
		// on met le mesage d'attente
1158
		masquerChargement();
1164
		masquerChargement();
1159
 
1165
 
1160
		// on appelle le modèle
1166
		// on appelle le modèle
1161
		getIModele().changerNumeroPage(pageCourante);
1167
		getIModele().changerNumeroPage(pageCourante);
1162
 
1168
 
1163
		// et met à jour les numéros de page dans les barre d'outils
1169
		// et met à jour les numéros de page dans les barre d'outils
1164
		getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
1170
		getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
1165
		getListeImage().getToolBarVue().changerPageCourante(pageCourante);
1171
		getListeImage().getToolBarVue().changerPageCourante(pageCourante);
1166
	}
1172
	}
1167
 
1173
 
1168
	/**
1174
	/**
1169
	 * Appelle le modèle pour qu'il change la taille de page utilisée
1175
	 * Appelle le modèle pour qu'il change la taille de page utilisée
1170
	 * 
1176
	 * 
1171
	 * @param nouvelleTaillePage
1177
	 * @param nouvelleTaillePage
1172
	 *            la nouvelle taille de page
1178
	 *            la nouvelle taille de page
1173
	 */
1179
	 */
1174
	public void changerTaillePage(int nouvelleTaillePage) {
1180
	public void changerTaillePage(int nouvelleTaillePage) {
1175
		// on met le message d'attente
1181
		// on met le message d'attente
1176
		masquerChargement();
1182
		masquerChargement();
1177
 
1183
 
1178
		// on appelle le modèle
1184
		// on appelle le modèle
1179
		getIModele().changerTaillePage(nouvelleTaillePage);
1185
		getIModele().changerTaillePage(nouvelleTaillePage);
1180
 
1186
 
1181
		// et on met à jour la taille de page dans les barres d'outils
1187
		// et on met à jour la taille de page dans les barres d'outils
1182
		getGalerieImage().getToolBarVue().selectionnerTaillePage(
1188
		getGalerieImage().getToolBarVue().selectionnerTaillePage(
1183
				nouvelleTaillePage);
1189
				nouvelleTaillePage);
1184
		getListeImage().getToolBarVue().selectionnerTaillePage(
1190
		getListeImage().getToolBarVue().selectionnerTaillePage(
1185
				nouvelleTaillePage);
1191
				nouvelleTaillePage);
1186
	}
1192
	}
1187
 
1193
 
1188
	/**
1194
	/**
1189
	 * Met à jour les barre d'outils avec des nouvelles valeurs
1195
	 * Met à jour les barre d'outils avec des nouvelles valeurs
1190
	 * 
1196
	 * 
1191
	 * @param pageMax
1197
	 * @param pageMax
1192
	 *            le nombre de pages
1198
	 *            le nombre de pages
1193
	 * @param pageEncours
1199
	 * @param pageEncours
1194
	 *            la page en cours
1200
	 *            la page en cours
1195
	 * @param taillePage
1201
	 * @param taillePage
1196
	 *            la taille de page
1202
	 *            la taille de page
1197
	 * @param nbElement
1203
	 * @param nbElement
1198
	 *            le nombre d'élements par page
1204
	 *            le nombre d'élements par page
1199
	 */
1205
	 */
1200
	public void changerPageMaxEtCourante(int pageMax, int pageEncours,
1206
	public void changerPageMaxEtCourante(int pageMax, int pageEncours,
1201
			int taillePage, int nbElement) {
1207
			int taillePage, int nbElement) {
1202
 
1208
 
1203
		int[] pages = { pageMax, pageEncours, taillePage, nbElement };
1209
		int[] pages = { pageMax, pageEncours, taillePage, nbElement };
1204
		getGalerieImage().getToolBarVue().rafraichir(pages, false);
1210
		getGalerieImage().getToolBarVue().rafraichir(pages, false);
1205
		getListeImage().getToolBarVue().rafraichir(pages, false);
1211
		getListeImage().getToolBarVue().rafraichir(pages, false);
1206
 
1212
 
1207
	}
1213
	}
1208
 
1214
 
1209
	/**
1215
	/**
1210
	 * Recherche l'élement actuellement affiché et affiche son message de
1216
	 * Recherche l'élement actuellement affiché et affiche son message de
1211
	 * chargement
1217
	 * chargement
1212
	 */
1218
	 */
1213
	public void masquerChargement() {
1219
	public void masquerChargement() {
1214
		
1220
		
1215
		if(GWT.isScript()) {
1221
		if(GWT.isScript()) {
1216
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1222
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1217
	
1223
	
1218
			if (masked != null && !masked.isMasked()) {
1224
			if (masked != null && !masked.isMasked()) {
1219
				masked.mask("Chargement", true);
1225
				masked.mask("Chargement", true);
1220
			}
1226
			}
1221
		}
1227
		}
1222
	}
1228
	}
1223
 
1229
 
1224
	/**
1230
	/**
1225
	 * Recherche l'élement actuellement affiché et retire son message de
1231
	 * Recherche l'élement actuellement affiché et retire son message de
1226
	 * chargement si l'était affiché
1232
	 * chargement si l'était affiché
1227
	 */
1233
	 */
1228
	public void demasquerChargement() {
1234
	public void demasquerChargement() {
1229
		
1235
		
1230
		if(GWT.isScript()) {
1236
		if(GWT.isScript()) {
1231
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1237
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1232
			if (masked != null && masked.isMasked()) {
1238
			if (masked != null && masked.isMasked()) {
1233
				masked.unmask();
1239
				masked.unmask();
1234
			}
1240
			}
1235
		}
1241
		}
1236
	}
1242
	}
1237
 
1243
 
1238
	public void afficherMenuId() {
1244
	public void afficherMenuId() {
1239
		IdVue i = new IdVue(this);
1245
		IdVue i = new IdVue(this);
1240
		i.show();
1246
		i.show();
1241
	}
1247
	}
1242
 
1248
 
1243
	/**
1249
	/**
1244
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des
1250
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des
1245
	 * filtres sous forme de tableau [nom, valeur]
1251
	 * filtres sous forme de tableau [nom, valeur]
1246
	 * 
1252
	 * 
1247
	 * @return Les noms et valeurs des filtres
1253
	 * @return Les noms et valeurs des filtres
1248
	 */
1254
	 */
1249
	public String[][] renvoyerFiltres() {
1255
	public String[][] renvoyerFiltres() {
1250
		String[][] valeursFiltres = filtres.renvoyerValeursAFiltrer();
1256
		String[][] valeursFiltres = filtres.renvoyerValeursAFiltrer();
1251
 
1257
 
1252
		return valeursFiltres;
1258
		return valeursFiltres;
1253
	}
1259
	}
1254
 
1260
 
1255
	/**
1261
	/**
1256
	 * Indique si les filtres ont changés depuis la dernière requête (il faut
1262
	 * Indique si les filtres ont changés depuis la dernière requête (il faut
1257
	 * faire un OR sur le résultat de toutes les fonctions renvoyerEtatFiltre
1263
	 * faire un OR sur le résultat de toutes les fonctions renvoyerEtatFiltre
1258
	 * s'il y a plus d'un filtre)
1264
	 * s'il y a plus d'un filtre)
1259
	 * 
1265
	 * 
1260
	 * @return true si au moins un des filtres a changé, false sinon
1266
	 * @return true si au moins un des filtres a changé, false sinon
1261
	 */
1267
	 */
1262
	public boolean getEtatFiltres() {
1268
	public boolean getEtatFiltres() {
1263
		return (filtres.renvoyerEtatFiltre());
1269
		return (filtres.renvoyerEtatFiltre());
1264
	}
1270
	}
1265
 
1271
 
1266
	/**
1272
	/**
1267
	 * Accesseur pour le panneau de droite contenant les filtres
1273
	 * Accesseur pour le panneau de droite contenant les filtres
1268
	 * 
1274
	 * 
1269
	 * @return le panneau contenant les filtres
1275
	 * @return le panneau contenant les filtres
1270
	 */
1276
	 */
1271
	public PanneauFiltresImagesVues getPanneauFiltres() {
1277
	public PanneauFiltresImagesVues getPanneauFiltres() {
1272
		return filtres;
1278
		return filtres;
1273
	}
1279
	}
1274
 
1280
 
1275
	/**
1281
	/**
1276
	 * ajoute les images séléctionnées dans la vue courante au tampon
1282
	 * ajoute les images séléctionnées dans la vue courante au tampon
1277
	 */
1283
	 */
1278
	public void ajouterImagesSelection() {
1284
	public void ajouterImagesSelection() {
1279
		String[] ids = getVueSelectionnee().getIdSelectionnees();
1285
		String[] ids = getVueSelectionnee().getIdSelectionnees();
1280
		String id = "";
1286
		String id = "";
1281
		for (int i = 0; i < ids.length; i++) {
1287
		for (int i = 0; i < ids.length; i++) {
1282
			id += " - " + ids[i];
1288
			id += " - " + ids[i];
1283
		}
1289
		}
1284
		getIModele().ajouterImagesSelection(ids);
1290
		getIModele().ajouterImagesSelection(ids);
1285
 
1291
 
1286
		Window.alert(ids.length + " image(s) ajoutées au tampon ");
1292
		Window.alert(ids.length + " image(s) ajoutées au tampon ");
1287
 
1293
 
1288
	}
1294
	}
1289
	
1295
	
1290
	/**
1296
	/**
1291
	 * Affiche les ids des images contenues dans le tampon
1297
	 * Affiche les ids des images contenues dans le tampon
1292
	 */
1298
	 */
1293
	public void afficherIdSelectionImages() {
1299
	public void afficherIdSelectionImages() {
1294
 
1300
 
1295
		Window.alert("Contenu du tampon : " + getIModele().renvoyerSelection());
1301
		Window.alert("Contenu du tampon : " + getIModele().renvoyerSelection());
1296
 
1302
 
1297
	}
1303
	}
1298
	
1304
	
1299
	/**
1305
	/**
1300
	 * Renvoie les ids des images contenues dans le tampon en une seule string
1306
	 * Renvoie les ids des images contenues dans le tampon en une seule string
1301
	 * @return une string de la forme id1, id2, id3
1307
	 * @return une string de la forme id1, id2, id3
1302
	 */
1308
	 */
1303
	public String renvoyerSelection() {
1309
	public String renvoyerSelection() {
1304
		return getIModele().renvoyerSelection();
1310
		return getIModele().renvoyerSelection();
1305
	}
1311
	}
1306
	
1312
	
1307
	/**
1313
	/**
1308
	 * Vide le tampon d'images
1314
	 * Vide le tampon d'images
1309
	 */
1315
	 */
1310
	public void viderSelection() {
1316
	public void viderSelection() {
1311
 
1317
 
1312
		getIModele().viderSelection();
1318
		getIModele().viderSelection();
1313
		Window.alert("Le tampon a été vidé ");
1319
		Window.alert("Le tampon a été vidé ");
1314
 
1320
 
1315
	}
1321
	}
1316
	
1322
	
1317
	public int getCompteSelection() {
1323
	public int getCompteSelection() {
1318
		return getIModele().getCompteSelection();
1324
		return getIModele().getCompteSelection();
1319
	}
1325
	}
1320
 
1326
 
1321
	/**
1327
	/**
1322
	 * Fonction appelée lors du drag 'n drop d'une image sur une observation
1328
	 * Fonction appelée lors du drag 'n drop d'une image sur une observation
1323
	 * @param source la source du drag
1329
	 * @param source la source du drag
1324
	 * @param e l'objet sur lequel on a fait le drop
1330
	 * @param e l'objet sur lequel on a fait le drop
1325
	 * @param data les données
1331
	 * @param data les données
1326
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1332
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1327
	 */
1333
	 */
1328
	public boolean lierImagesDD(DragSource source, EventObject e, DragData data) {
1334
	public boolean lierImagesDD(DragSource source, EventObject e, DragData data) {
1329
		
1335
		
1330
		// on peut convertir directement les données car on a testé avant le type de données
1336
		// on peut convertir directement les données car on a testé avant le type de données
1331
		GridDragData gdd = (GridDragData)data ;
1337
		GridDragData gdd = (GridDragData)data ;
1332
		// les ids des images sont initialisées 
1338
		// les ids des images sont initialisées 
1333
  		String idsImg = "" ;
1339
  		String idsImg = "" ;
1334
  		
1340
  		
1335
  		// on obtient la liste des selections dans la source
1341
  		// on obtient la liste des selections dans la source
1336
  		Record[] aLier =  gdd.getSelections() ;
1342
  		Record[] aLier =  gdd.getSelections() ;
1337
  		for (int i = 0; i < aLier.length; i++) 
1343
  		for (int i = 0; i < aLier.length; i++) 
1338
  		{
1344
  		{
1339
			// on les concatènes en une seule chaine	
1345
			// on les concatènes en une seule chaine	
1340
  			idsImg += aLier[i].getAsString("id_image")+"," ;
1346
  			idsImg += aLier[i].getAsString("id_image")+"," ;
1341
		}
1347
		}
1342
  		
1348
  		
1343
  		MiniListeObservationVue mv = getMetadonneesIptcExif().getMiniListeObservation() ;
1349
  		MiniListeObservationVue mv = getMetadonneesIptcExif().getMiniListeObservation() ;
1344
  		// on cherche quel est la ligne sur laquelle on a fait le drop dans la la liste des observations
1350
  		// on cherche quel est la ligne sur laquelle on a fait le drop dans la la liste des observations
1345
  		int index = mv.getView().findRowIndex(e) ;
1351
  		int index = mv.getView().findRowIndex(e) ;
1346
  		Record rddrop = mv.getStore().getRecordAt(index) ;
1352
  		Record rddrop = mv.getStore().getRecordAt(index) ;
1347
  		
1353
  		
1348
  		// SI l'enregistrement existe bel et bien
1354
  		// SI l'enregistrement existe bel et bien
1349
  		if(rddrop != null)
1355
  		if(rddrop != null)
1350
  		{
1356
  		{
1351
	  		String idObss = "";
1357
	  		String idObss = "";
1352
			Record[] selection = mv.getSelectionModel().getSelections();
1358
			Record[] selection = mv.getSelectionModel().getSelections();
1353
			boolean lierSelection = false;
1359
			boolean lierSelection = false;
1354
			// on itère sur toutes les observations selectionnées
1360
			// on itère sur toutes les observations selectionnées
1355
			for(int i=0; i<selection.length && lierSelection == false; i++) {
1361
			for(int i=0; i<selection.length && lierSelection == false; i++) {
1356
				// si l'element sur lequel on a fait le drop fait partie
1362
				// si l'element sur lequel on a fait le drop fait partie
1357
				// de la selection alors on lie tout à la selection
1363
				// de la selection alors on lie tout à la selection
1358
				if(selection[i].getId() == rddrop.getId()) {
1364
				if(selection[i].getId() == rddrop.getId()) {
1359
					lierSelection = true;
1365
					lierSelection = true;
1360
				}
1366
				}
1361
				// si l'élement ne fait pas partie de la selection 
1367
				// si l'élement ne fait pas partie de la selection 
1362
				//alors on ne lit qu'à celui sur lequel on a fait le drop
1368
				//alors on ne lit qu'à celui sur lequel on a fait le drop
1363
				idObss += selection[i].getAsString("id_obs")+"," ;
1369
				idObss += selection[i].getAsString("id_obs")+"," ;
1364
			}  			
1370
			}  			
1365
			String message = "";
1371
			String message = "";
1366
	  		
1372
	  		
1367
	  		if(!lierSelection) {
1373
	  		if(!lierSelection) {
1368
	  			idObss = rddrop.getAsString("id_obs")+","; 
1374
	  			idObss = rddrop.getAsString("id_obs")+","; 
1369
				message = "Lier la selection d'images à l'observation pointée ?";
1375
				message = "Lier la selection d'images à l'observation pointée ?";
1370
			} else {
1376
			} else {
1371
				message = "Lier la selection d'images aux observations selectionnées ?";
1377
				message = "Lier la selection d'images aux observations selectionnées ?";
1372
			}
1378
			}
1373
			if(Window.confirm(message)) {
1379
			if(Window.confirm(message)) {
1374
				lierImagesObservation(idObss, idsImg) ;
1380
				lierImagesObservation(idObss, idsImg) ;
1375
			}
1381
			}
1376
  		}
1382
  		}
1377
  		return true ;	  
1383
  		return true ;	  
1378
	}
1384
	}
1379
	
1385
	
1380
	/**
1386
	/**
1381
	 * Fonction appelée lors du drag 'n drop d'une observation sur une image
1387
	 * Fonction appelée lors du drag 'n drop d'une observation sur une image
1382
	 * @param source la source du drag
1388
	 * @param source la source du drag
1383
	 * @param e l'objet sur lequel on a fait le drop
1389
	 * @param e l'objet sur lequel on a fait le drop
1384
	 * @param data les données
1390
	 * @param data les données
1385
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1391
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1386
	 */
1392
	 */
1387
	public boolean lierObsDD(DragSource source, EventObject e, DragData data, String idDest) {
1393
	public boolean lierObsDD(DragSource source, EventObject e, DragData data, String idDest) {
1388
		
1394
		
1389
		// on peut convertir directement les données car on a testé avant le type de données
1395
		// on peut convertir directement les données car on a testé avant le type de données
1390
		GridDragData gdd = (GridDragData)data ;
1396
		GridDragData gdd = (GridDragData)data ;
1391
		// les ids des images sont initialisées 
1397
		// les ids des images sont initialisées 
1392
  		String idsObs = "" ;
1398
  		String idsObs = "" ;
1393
  		
1399
  		
1394
  		// on obtient la liste des selections dans la source
1400
  		// on obtient la liste des selections dans la source
1395
  		Record[] aLier =  gdd.getSelections() ;
1401
  		Record[] aLier =  gdd.getSelections() ;
1396
  		for (int i = 0; i < aLier.length; i++) 
1402
  		for (int i = 0; i < aLier.length; i++) 
1397
  		{
1403
  		{
1398
  			// on les concatènes en une seule chaine		
1404
  			// on les concatènes en une seule chaine		
1399
  			idsObs += aLier[i].getAsString("id_obs")+"," ;
1405
  			idsObs += aLier[i].getAsString("id_obs")+"," ;
1400
		}
1406
		}
1401
  		
1407
  		
1402
  		Record rddrop = null ;
1408
  		Record rddrop = null ;
1403
  		int index = -1;
1409
  		int index = -1;
1404
  		
1410
  		
1405
  		// si la destination est la galerie d'images
1411
  		// si la destination est la galerie d'images
1406
  		if(idDest.equals(getGalerieImage().getId()))
1412
  		if(idDest.equals(getGalerieImage().getId()))
1407
  		{
1413
  		{
1408
  			GalerieImageVue gv = getGalerieImage() ;
1414
  			GalerieImageVue gv = getGalerieImage() ;
1409
  			
1415
  			
1410
  			// alors l'élément sur lequel on a fait le drop n'est pas le bon
1416
  			// alors l'élément sur lequel on a fait le drop n'est pas le bon
1411
  			index = gv.getDView().indexOf(e.getTarget()) ;
1417
  			index = gv.getDView().indexOf(e.getTarget()) ;
1412
  			Element el = e.getTarget() ;
1418
  			Element el = e.getTarget() ;
1413
  			
1419
  			
1414
  			// alors on cherche son parent tant que celui-ci n'est pas présent dans la dataview
1420
  			// alors on cherche son parent tant que celui-ci n'est pas présent dans la dataview
1415
  			while(index == -1 && el != null)
1421
  			while(index == -1 && el != null)
1416
  			{
1422
  			{
1417
  				index = gv.getDView().indexOf(el) ;
1423
  				index = gv.getDView().indexOf(el) ;
1418
  				el = (Element) el.getParentElement() ;
1424
  				el = (Element) el.getParentElement() ;
1419
  			}
1425
  			}
1420
  			
1426
  			
1421
  			// si on l'a trouvé, on obtient l'enregistrement qui correspond
1427
  			// si on l'a trouvé, on obtient l'enregistrement qui correspond
1422
  			if(index != -1)
1428
  			if(index != -1)
1423
  			{
1429
  			{
1424
  				rddrop = gv.getSt().getAt(index) ;
1430
  				rddrop = gv.getSt().getAt(index) ;
1425
  			}
1431
  			}
1426
				
1432
				
1427
  		}
1433
  		}
1428
  		
1434
  		
1429
  		// si la destination est la liste d'images
1435
  		// si la destination est la liste d'images
1430
  		if(idDest.equals(getListeImage().getId()))
1436
  		if(idDest.equals(getListeImage().getId()))
1431
  		{
1437
  		{
1432
  			// on obtient directement l'enregistrement correspondant à l'élément sur lequel on a fait le drop
1438
  			// on obtient directement l'enregistrement correspondant à l'élément sur lequel on a fait le drop
1433
  			ListeImageVue lv = getListeImage() ;
1439
  			ListeImageVue lv = getListeImage() ;
1434
  			index = lv.getView().findRowIndex(e) ;
1440
  			index = lv.getView().findRowIndex(e) ;
1435
  			rddrop = lv.getSt().getAt(index) ;
1441
  			rddrop = lv.getSt().getAt(index) ;
1436
  		}
1442
  		}
1437
  		
1443
  		
1438
  		// si on a bien obtenu un enregistrement 
1444
  		// si on a bien obtenu un enregistrement 
1439
  		if(rddrop != null)
1445
  		if(rddrop != null)
1440
  		{
1446
  		{
1441
  			String idImgs = "";
1447
  			String idImgs = "";
1442
  			Record[] selection = galerieImage.getDView().getSelectedRecords();
1448
  			Record[] selection = galerieImage.getDView().getSelectedRecords();
1443
  			
1449
  			
1444
  			boolean lierSelection = false;
1450
  			boolean lierSelection = false;
1445
	  		String message = "";
1451
	  		String message = "";
1446
	  		
1452
	  		
1447
			// si l'element sur lequel on a fait le drop fait partie
1453
			// si l'element sur lequel on a fait le drop fait partie
1448
			// de la selection alors on lie tout à la selection
1454
			// de la selection alors on lie tout à la selection
1449
  			if(galerieImage.getDView().isSelected(index)) {
1455
  			if(galerieImage.getDView().isSelected(index)) {
1450
				lierSelection = true;
1456
				lierSelection = true;
1451
				// on itère sur toutes les images selectionnées
1457
				// on itère sur toutes les images selectionnées
1452
  	  			for(int i=0; i<selection.length; i++) {
1458
  	  			for(int i=0; i<selection.length; i++) {
1453
  					// et on récupère leur ids
1459
  					// et on récupère leur ids
1454
  					idImgs += selection[i].getAsString("id_image")+"," ;
1460
  					idImgs += selection[i].getAsString("id_image")+"," ;
1455
  	  			}
1461
  	  			}
1456
  			}
1462
  			}
1457
  			
1463
  			
1458
  			if(!lierSelection) {
1464
  			if(!lierSelection) {
1459
  				idImgs = rddrop.getAsString("id_image")+","; 
1465
  				idImgs = rddrop.getAsString("id_image")+","; 
1460
  				message = "Lier la selection d'observations à l'image pointée ?";
1466
  				message = "Lier la selection d'observations à l'image pointée ?";
1461
  			} else {
1467
  			} else {
1462
  				message = "Lier la selection d'observations aux images selectionnées ?";
1468
  				message = "Lier la selection d'observations aux images selectionnées ?";
1463
  			}
1469
  			}
1464
  			
1470
  			
1465
  			if(Window.confirm(message)) {
1471
  			if(Window.confirm(message)) {
1466
  				lierImagesObservation(idsObs, idImgs) ;
1472
  				lierImagesObservation(idsObs, idImgs) ;
1467
  			}
1473
  			}
1468
  			return true ;
1474
  			return true ;
1469
  		}
1475
  		}
1470
	
1476
	
1471
  		
1477
  		
1472
  		// si la destination est l'image zoomée
1478
  		// si la destination est l'image zoomée
1473
  		if(idDest.equals(getZoomImage().getId()))
1479
  		if(idDest.equals(getZoomImage().getId()))
1474
  		{
1480
  		{
1475
  			// on obtient directement l'id correspondant
1481
  			// on obtient directement l'id correspondant
1476
  			ZoomImageVue zv = getZoomImage() ;
1482
  			ZoomImageVue zv = getZoomImage() ;
1477
  			String idImg = zv.getIdImage() ;
1483
  			String idImg = zv.getIdImage() ;
1478
  			lierImagesObservation(idsObs, idImg) ;
1484
  			lierImagesObservation(idsObs, idImg) ;
1479
  			
1485
  			
1480
  			return true ; 			
1486
  			return true ; 			
1481
  		}
1487
  		}
1482
  		
1488
  		
1483
  		return false ;
1489
  		return false ;
1484
  		  
1490
  		  
1485
	}
1491
	}
1486
	
1492
	
1487
	public void LierTamponObservations() {
1493
	public void LierTamponObservations() {
1488
		
1494
		
1489
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1495
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1490
		String idsObs = "" ;
1496
		String idsObs = "" ;
1491
		
1497
		
1492
		for(int i =0 ; i< obsRec.length ; i++)
1498
		for(int i =0 ; i< obsRec.length ; i++)
1493
		{
1499
		{
1494
			idsObs += obsRec[i].getAsString("id_obs")+"," ;
1500
			idsObs += obsRec[i].getAsString("id_obs")+"," ;
1495
		}
1501
		}
1496
		
1502
		
1497
		if(getIModele().renvoyerSelection().equals("-255"))
1503
		if(getIModele().renvoyerSelection().equals("-255"))
1498
		{
1504
		{
1499
			Window.alert("Le tampon est vide") ;
1505
			Window.alert("Le tampon est vide") ;
1500
			return ;
1506
			return ;
1501
		}
1507
		}
1502
		
1508
		
1503
		if(obsRec.length == 0)
1509
		if(obsRec.length == 0)
1504
		{
1510
		{
1505
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1511
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1506
			return ;
1512
			return ;
1507
		}
1513
		}
1508
		
1514
		
1509
		else
1515
		else
1510
		{
1516
		{
1511
			lierImagesObservation(idsObs, getIModele().renvoyerSelection()) ;
1517
			lierImagesObservation(idsObs, getIModele().renvoyerSelection()) ;
1512
		}
1518
		}
1513
		
1519
		
1514
	}
1520
	}
1515
	
1521
	
1516
	public void LierObservations() {
1522
	public void LierObservations() {
1517
		
1523
		
1518
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1524
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1519
		String idsObs = "" ;
1525
		String idsObs = "" ;
1520
	
1526
	
1521
		String[] idsImg = getGalerieImage().getIdSelectionnees();
1527
		String[] idsImg = getGalerieImage().getIdSelectionnees();
1522
		String selectionImages = "";
1528
		String selectionImages = "";
1523
		
1529
		
1524
		if(idsImg.length <= 0)
1530
		if(idsImg.length <= 0)
1525
		{
1531
		{
1526
			Window.alert("Aucune image selectionnée") ;
1532
			Window.alert("Aucune image selectionnée") ;
1527
			return ;
1533
			return ;
1528
		} else {
1534
		} else {
1529
			for (int i = 0; i < idsImg.length; i++) {
1535
			for (int i = 0; i < idsImg.length; i++) {
1530
	
1536
	
1531
				String idEncours = idsImg[i];
1537
				String idEncours = idsImg[i];
1532
				selectionImages += idEncours + ",";
1538
				selectionImages += idEncours + ",";
1533
			}
1539
			}
1534
		}
1540
		}
1535
		
1541
		
1536
		if(obsRec.length == 0)
1542
		if(obsRec.length == 0)
1537
		{
1543
		{
1538
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1544
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1539
			return ;
1545
			return ;
1540
		} else  {
1546
		} else  {
1541
			
1547
			
1542
			for(int i =0 ; i< obsRec.length ; i++)
1548
			for(int i =0 ; i< obsRec.length ; i++)
1543
			{
1549
			{
1544
				idsObs += obsRec[i].getAsString("id_obs")+"," ;
1550
				idsObs += obsRec[i].getAsString("id_obs")+"," ;
1545
			}
1551
			}
1546
		}
1552
		}
1547
		
1553
		
1548
		String message = "Lier la selection d'images aux observations selectionnées ?";
1554
		String message = "Lier la selection d'images aux observations selectionnées ?";
1549
		if(Window.confirm(message)) {
1555
		if(Window.confirm(message)) {
1550
			lierImagesObservation(idsObs, selectionImages) ;
1556
			lierImagesObservation(idsObs, selectionImages) ;
1551
		}
1557
		}
1552
	}
1558
	}
1553
	
1559
	
1554
	/**
1560
	/**
1555
	 * Lie une ou plusieurs images à une ou plusieurs observations
1561
	 * Lie une ou plusieurs images à une ou plusieurs observations
1556
	 * @param idsObs les identifiants des observations séparés par des ","
1562
	 * @param idsObs les identifiants des observations séparés par des ","
1557
	 * @param idsImg les identifiants des images séparés par des ","
1563
	 * @param idsImg les identifiants des images séparés par des ","
1558
	 */
1564
	 */
1559
	public void lierImagesObservation(String idsObs, String idsImg)
1565
	public void lierImagesObservation(String idsObs, String idsImg)
1560
	{
1566
	{
1561
		getIModele().lierImagesObervations(idsObs,idsImg) ;
1567
		getIModele().lierImagesObervations(idsObs,idsImg) ;
1562
	}
1568
	}
1563
 
1569
 
1564
	public void deconnecterUtilisateur() {
1570
	public void deconnecterUtilisateur() {
1565
		
1571
		
1566
		if(panneauPrincipalImage.isVisible())
1572
		if(panneauPrincipalImage.isVisible())
1567
		{
1573
		{
1568
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiant()) ;
1574
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiant()) ;
1569
			changerUtilisateur() ;
1575
			changerUtilisateur() ;
1570
		}
1576
		}
1571
		else
1577
		else
1572
		{
1578
		{
1573
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1579
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1574
			{
1580
			{
1575
				public void onRender(Component component)
1581
				public void onRender(Component component)
1576
				{
1582
				{
1577
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiant()) ;
1583
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiant()) ;
1578
					changerUtilisateur() ;
1584
					changerUtilisateur() ;
1579
					panneauPrincipalImage.purgeListeners() ;
1585
					panneauPrincipalImage.purgeListeners() ;
1580
				}
1586
				}
1581
				
1587
				
1582
			}) ;
1588
			}) ;
1583
		}
1589
		}
1584
		
1590
		
1585
	}
1591
	}
1586
	
1592
	
1587
	
1593
	
1588
	public void connecterUtilisateur() {
1594
	public void connecterUtilisateur() {
1589
		
1595
		
1590
		if(panneauPrincipalImage.isVisible()) {
1596
		if(panneauPrincipalImage.isVisible()) {
1591
			
1597
			
1592
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiant());
1598
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiant());
1593
			getIModele().initialiserArbreMotsCles();
1599
			getIModele().initialiserArbreMotsCles();
1594
			obtenirPhotoGalerie(getGalerieImage());
1600
			obtenirPhotoGalerie(getGalerieImage());
1595
		}	
1601
		}	
1596
		else
1602
		else
1597
		{
1603
		{
1598
			if(this.iModele != null) {
-
 
1599
				panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1604
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1600
				{
-
 
1601
					public void onShow(Component c)
-
 
1602
					{
-
 
1603
						setIdentifiant(cMediateur.getUtilisateur().getIdentifiant());
-
 
1604
						getIModele().initialiserArbreMotsCles();
-
 
1605
						obtenirPhotoGalerie(getGalerieImage());
-
 
1606
						panneauPrincipalImage.purgeListeners() ;
-
 
1607
					}
-
 
1608
					
-
 
1609
				}) ;
-
 
1610
			}
-
 
1611
			else
-
 
1612
			{
1605
			{
1613
				panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1606
				public void onRender(Component c)
1614
				{
1607
				{
1615
					public void onRender(Component c)
-
 
1616
					{
-
 
1617
						setIdentifiant(cMediateur.getUtilisateur().getIdentifiant());
1608
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiant());
1618
						getIModele().initialiserArbreMotsCles();
1609
					getIModele().initialiserArbreMotsCles();
1619
						obtenirPhotoGalerie(getGalerieImage());
1610
					obtenirPhotoGalerie(getGalerieImage());
1620
						panneauPrincipalImage.purgeListeners() ;
1611
					panneauPrincipalImage.purgeListeners() ;
1621
					}
1612
				}
1622
					
1613
				
1623
				}) ;
1614
			}) ;
1624
			}
-
 
1625
		}
1615
		}
1626
	}
1616
	}
1627
	
1617
	
1628
	public String[] renvoyerFiltresObservation() {
1618
	public String[] renvoyerFiltresObservation() {
1629
		String[] rien = {"nom_taxon",""};
1619
		String[] rien = {"nom_taxon",""};
1630
		if(getMetadonneesIptcExif() != null) {
1620
		if(getMetadonneesIptcExif() != null) {
1631
			return getMetadonneesIptcExif().getRechercheFiltreTaxonVue().renvoyerValeursAFiltrer();
1621
			return getMetadonneesIptcExif().getRechercheFiltreTaxonVue().renvoyerValeursAFiltrer();
1632
		} else {
1622
		} else {
1633
			return rien;
1623
			return rien;
1634
		}
1624
		}
1635
	
1625
	
1636
	}
1626
	}
1637
	
1627
	
1638
	public void obtenirNombreMiniListeObservations(
1628
	public void obtenirNombreMiniListeObservations(
1639
			Rafraichissable r) {
1629
			Rafraichissable r) {
1640
		iModele.obtenirNombreMiniListeObservations(r, renvoyerFiltresObservation()); 
1630
		iModele.obtenirNombreMiniListeObservations(r, renvoyerFiltresObservation()); 
1641
	}
1631
	}
1642
	
1632
	
1643
 
1633
 
1644
	public void obtenirNombreMiniListeObservations() {
1634
	public void obtenirNombreMiniListeObservations() {
1645
		iModele.obtenirNombreMiniListeObservations(getMetadonneesIptcExif().getMiniListeObservation(), renvoyerFiltresObservation()); 
1635
		iModele.obtenirNombreMiniListeObservations(getMetadonneesIptcExif().getMiniListeObservation(), renvoyerFiltresObservation()); 
1646
	}
1636
	}
1647
 
1637
 
1648
	public void obtenirMiniListeObservations(
1638
	public void obtenirMiniListeObservations(
1649
			Rafraichissable r, int taillePage, int numeroPage) {
1639
			Rafraichissable r, int taillePage, int numeroPage) {
1650
		
1640
		
1651
		iModele.obtenirMiniListeObservations(r, renvoyerFiltresObservation(), taillePage, numeroPage) ;
1641
		iModele.obtenirMiniListeObservations(r, renvoyerFiltresObservation(), taillePage, numeroPage) ;
1652
		
1642
		
1653
	}
1643
	}
1654
 
1644
 
1655
	public void afficherAide() {
1645
	public void afficherAide() {
1656
		
1646
		
1657
		String aideUrl = Configuration.getAideBaseUrl() ;
1647
		String aideUrl = Configuration.getAideBaseUrl() ;
1658
		Window.open(aideUrl, "", "") ;
1648
		Window.open(aideUrl, "", "") ;
1659
	}
1649
	}
1660
 
1650
 
1661
	public void soumettreBugRemarque() {
1651
	public void soumettreBugRemarque() {
1662
	
1652
	
1663
		String suiviUrl = Configuration.getSuiviBugUrl() ;
1653
		String suiviUrl = Configuration.getSuiviBugUrl() ;
1664
		Window.open(suiviUrl, "", "") ;
1654
		Window.open(suiviUrl, "", "") ;
1665
		
1655
		
1666
	}
1656
	}
1667
 
1657
 
1668
	public void obtenirObservationsAssociees() {
1658
	public void obtenirObservationsAssociees() {
1669
	
1659
	
1670
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
1660
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
1671
		if(ids.length > 0) {
1661
		if(ids.length > 0) {
1672
			getMetadonneesIptcExif().getMiniListeObservation().masquerChargement() ;
1662
			getMetadonneesIptcExif().getMiniListeObservation().masquerChargement() ;
1673
			getIModele().obtenirLiaisonObservations(this,ids[0]);
1663
			getIModele().obtenirLiaisonObservations(this,ids[0]);
1674
		}
1664
		}
1675
	}
1665
	}
1676
	
1666
	
1677
	public void rafraichirMiniListeObservations(ListeObservation listeObs) {
1667
	public void rafraichirMiniListeObservations(ListeObservation listeObs) {
1678
		
1668
		
1679
		if(getMetadonneesIptcExif() != null && getMetadonneesIptcExif().isCreated()) {
1669
		if(getMetadonneesIptcExif() != null && getMetadonneesIptcExif().isCreated()) {
1680
			if(getMetadonneesIptcExif().getMiniListeObservation().isCreated())
1670
			if(getMetadonneesIptcExif().getMiniListeObservation().isCreated())
1681
			{
1671
			{
1682
				getMetadonneesIptcExif().getMiniListeObservation().rafraichir(listeObs, false) ;
1672
				getMetadonneesIptcExif().getMiniListeObservation().rafraichir(listeObs, false) ;
1683
			}
1673
			}
1684
		}
1674
		}
1685
	}
1675
	}
1686
 
1676
 
1687
	public void supprimerLiaisonObsImage() {
1677
	public void supprimerLiaisonObsImage() {
1688
		
1678
		
1689
 
1679
 
1690
		String idsImg[] = getVueSelectionnee().getIdSelectionnees() ;
1680
		String idsImg[] = getVueSelectionnee().getIdSelectionnees() ;
1691
		
1681
		
1692
		String idObs = getMetadonneesIptcExif().getMiniListeObservation().getIdSelectionnees() ;
1682
		String idObs = getMetadonneesIptcExif().getMiniListeObservation().getIdSelectionnees() ;
1693
		
1683
		
1694
		if(Window.confirm("Supprimer le lien entre image(s) et observation(s) ?"))
1684
		if(Window.confirm("Supprimer le lien entre image(s) et observation(s) ?"))
1695
		{
1685
		{
1696
			getMetadonneesIptcExif().getMiniListeObservation().supprimerLiaison() ;
1686
			getMetadonneesIptcExif().getMiniListeObservation().supprimerLiaison() ;
1697
			iModele.supprimerLiaisonImages(idsImg,idObs) ;
1687
			iModele.supprimerLiaisonImages(idsImg,idObs) ;
1698
		}
1688
		}
1699
		
1689
		
1700
	}
1690
	}
1701
	
1691
	
1702
	public boolean estInstancie() {
1692
	public boolean estInstancie() {
1703
		return estInstancie ;
1693
		return estInstancie ;
1704
	}
1694
	}
1705
 
1695
 
1706
	public void donneesExterieures(Object o) {
1696
	public void donneesExterieures(Object o) {
1707
		
1697
		
1708
		if(estInitialise) { 
1698
		if(estInitialise) { 
1709
			iModele.rafraichir(o, true);
1699
			iModele.rafraichir(o, true);
1710
		}
1700
		}
1711
	}
1701
	}
-
 
1702
 
-
 
1703
	public void obtenirDatesImages(Rafraichissable r) {
-
 
1704
		iModele.obtenirDatesImages(r);	
-
 
1705
	}
-
 
1706
 
1712
}
1707
}