Subversion Repositories eFlore/Applications.cel

Rev

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

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