Subversion Repositories eFlore/Applications.cel

Rev

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

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