Subversion Repositories eFlore/Applications.cel

Rev

Rev 2 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 5
Line 1... Line 1...
1
package org.tela_botanica.client.image;
1
package org.tela_botanica.client.image;
Line 2... Line 2...
2
 
2
 
3
import java.util.HashMap;
3
import java.util.HashMap;
-
 
4
import java.util.Iterator;
Line 4... Line 5...
4
import java.util.Iterator;
5
import java.util.Vector;
5
 
6
 
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.modeles.Configuration;
8
import org.tela_botanica.client.modeles.Configuration;
8
import org.tela_botanica.client.modeles.ImageAsynchroneDAO;
9
import org.tela_botanica.client.modeles.ImageAsynchroneDAO;
-
 
10
import org.tela_botanica.client.modeles.ImageCarnet;
9
import org.tela_botanica.client.modeles.ImageCarnet;
11
import org.tela_botanica.client.modeles.ImageUploaderAsynchroneDAO;
10
import org.tela_botanica.client.modeles.ImageUploaderAsynchroneDAO;
12
import org.tela_botanica.client.modeles.LienImageAsynchroneDAO;
11
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO;
13
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO;
12
import org.tela_botanica.client.modeles.ListeImageCarnet;
14
import org.tela_botanica.client.modeles.ListeImageCarnet;
Line 25... Line 27...
25
import com.gwtext.client.data.StringFieldDef;
27
import com.gwtext.client.data.StringFieldDef;
26
import com.gwtext.client.data.Tree;
28
import com.gwtext.client.data.Tree;
27
import com.gwtext.client.widgets.tree.TreeNode;
29
import com.gwtext.client.widgets.tree.TreeNode;
Line 28... Line 30...
28
 
30
 
29
/**
31
/**
30
 * Modèle d'accès aux données pour les images.
32
 * Modèle d'accès aux données pour les images. C'est un singleton
31
 * C'est un singleton
33
 * 
32
 * @author aurelien
34
 * @author aurelien
33
 *
35
 * 
34
 */
36
 */
35
public class ImageModele implements Rafraichissable {
37
public class ImageModele implements Rafraichissable {
36
	
38
 
37
	/**
39
	/**
-
 
40
	 * Booleen indiquant si le médiateur est instancié (l'instance doit être
38
	 * Booleen indiquant si le médiateur est instancié (l'instance doit être unique donc le booleen est static)
41
	 * unique donc le booleen est static)
39
	 */
42
	 */
40
	private static boolean estInstancie = false ;
43
	private static boolean estInstancie = false;
41
	
44
 
42
	/**
45
	/**
43
	 * le modèle lui même
46
	 * le modèle lui même
44
	 */
47
	 */
45
	private static ImageModele thisModele = null ;
48
	private static ImageModele thisModele = null;
46
	
49
 
47
	/**
50
	/**
48
	 * Le médiateur associé au modèle
51
	 * Le médiateur associé au modèle
49
	 */
52
	 */
50
	private ImageMediateur iMediateur = null ;
53
	private ImageMediateur iMediateur = null;
51
	
54
 
52
	/**
55
	/**
53
	 * La configuration en cours
56
	 * La configuration en cours
54
	 */
57
	 */
55
	private Configuration config = null ;
58
	private Configuration config = null;
56
	
59
 
57
	/**
60
	/**
58
	 * La liste des image affichées en cours
61
	 * La liste des image affichées en cours
59
	 */
62
	 */
60
	private ListeImageCarnet cacheImage = new ListeImageCarnet(0) ;
63
	private ListeImageCarnet cacheImage = new ListeImageCarnet(0);
61
	/**
64
	/**
62
	 * Table de correspondance entre les mots clés et leurs identifiants
65
	 * Table de correspondance entre les mots clés et leurs identifiants
63
	 */
66
	 */
64
	private HashMap<String, String> motsCles = new HashMap<String, String>(0) ;
67
	private HashMap<String, String> motsCles = new HashMap<String, String>(0);
65
	/**
68
	/**
-
 
69
	 * Le store contenant les données à afficher, que le modèle transmet au
66
	 * Le store contenant les données à afficher, que le modèle transmet au médiateur quand il le demande
70
	 * médiateur quand il le demande
67
	 */
71
	 */
68
	private Store st = null ;
72
	private Store st = null;
69
	/**
73
	/**
70
	 * Arbre des mots clés
74
	 * Arbre des mots clés
71
	 */
75
	 */
72
	private com.gwtext.client.data.Tree arbreMotsCles =  new Tree() ;
76
	private com.gwtext.client.data.Tree arbreMotsCles = new Tree();
73
	
77
 
74
	/**
78
	/**
75
	 * Numéro de page en cours
79
	 * Numéro de page en cours
76
	 */
80
	 */
77
	private int pageEncours = 0 ;
81
	private int pageEncours = 0;
78
	/**
82
	/**
79
	 * Nombre de pages totales
83
	 * Nombre de pages totales
80
	 */
84
	 */
81
	private int pageMax = 1 ;
85
	private int pageMax = 1;
82
	/**
86
	/**
83
	 * Taille de page (par défaut 50)
87
	 * Taille de page (par défaut 50)
84
	 */
88
	 */
85
	private int taillePage = 50 ;
89
	private int taillePage = 50;
86
	/**
90
	/**
87
	 * Nombre d'éléments total correspondant à la requete
91
	 * Nombre d'éléments total correspondant à la requete
88
	 */
92
	 */
-
 
93
	private int nbElements = 0;
-
 
94
 
-
 
95
	/**
-
 
96
	 * "Presse papier" pour les images qui permet de garder en mémoire une
-
 
97
	 * sélection
-
 
98
	 */
89
	private int nbElements = 0 ;
99
	private Vector<String> selectionImages = new Vector<String>(0);
90
	
100
 
91
	/**
101
	/**
-
 
102
	 * Retourne une instance de manière unique
-
 
103
	 * 
92
	 * Retourne une instance de manière unique
104
	 * @param im
93
	 * @param im le médiateur à associer
105
	 *            le médiateur à associer
94
	 * @return l'instance du modèle
106
	 * @return l'instance du modèle
95
	 */
107
	 */
96
	static ImageModele Instance(ImageMediateur im)
-
 
97
	{
108
	static ImageModele Instance(ImageMediateur im) {
98
		// si le modèle n'est pas encore instancié
109
		// si le modèle n'est pas encore instancié
99
		if(!estInstancie)
-
 
100
		{
110
		if (!estInstancie) {
101
			// on en crée un nouveau
111
			// on en crée un nouveau
102
			estInstancie = true ;
112
			estInstancie = true;
103
			thisModele = new ImageModele(im);
113
			thisModele = new ImageModele(im);
104
		}
114
		}
105
		
115
 
106
		// sinon on retourne le "pointeur" vers le modèle lui-même
116
		// sinon on retourne le "pointeur" vers le modèle lui-même
Line 107... Line 117...
107
		return thisModele ;
117
		return thisModele;
108
 
118
 
109
	}
119
	}
110
	
120
 
-
 
121
	/**
-
 
122
	 * Le constructeur est privé et seule la méthode instance y accède
111
	/**
123
	 * 
112
	 * Le constructeur est privé et seule la méthode instance y accède
124
	 * @param im
113
	 * @param im le médiateur à associer
125
	 *            le médiateur à associer
114
	 */
126
	 */
115
	private ImageModele(ImageMediateur im) {
127
	private ImageModele(ImageMediateur im) {
116
		
128
 
117
		iMediateur = im ;
129
		iMediateur = im;
118
		config = new Configuration() ;
130
		config = new Configuration();
119
	}
131
	}
120
	
132
 
-
 
133
	/**
121
	/**
134
	 * Accesseur pour le médiateur
122
	 * Accesseur pour le médiateur
135
	 * 
123
	 * @return le médiateur associé
136
	 * @return le médiateur associé
124
	 */
-
 
125
	public ImageMediateur getIMediateur()
137
	 */
126
	{
138
	public ImageMediateur getIMediateur() {
127
		return iMediateur ;
139
		return iMediateur;
128
	}
140
	}
129
	
141
 
-
 
142
	/**
-
 
143
	 * Appelle le DAO asynchrone pour obtenir la liste des images
130
	/**
144
	 * 
131
	 * Appelle le DAO asynchrone pour obtenir la liste des images
145
	 * @param r
-
 
146
	 *            le rafraichissable auxquel on enverra les données
-
 
147
	 */
-
 
148
	public void obtenirNombrePhotoGalerie(Rafraichissable r) {
-
 
149
 
-
 
150
		String valeursFiltres[][] = getIMediateur().renvoyerFiltres();
-
 
151
 
-
 
152
		int tailleFiltres = valeursFiltres.length;
-
 
153
 
-
 
154
		String[][] criteres = new String[tailleFiltres + 1][2];
-
 
155
 
-
 
156
		String[] utilisateur = { "ci_ce_utilisateur",
-
 
157
				"" + getIMediateur().getIdentifiant() };
-
 
158
		criteres[0] = utilisateur;
-
 
159
 
-
 
160
 
-
 
161
		for (int i = 0; i < valeursFiltres.length; i++) {
-
 
162
			
-
 
163
			criteres[i + 1] = valeursFiltres[i];
-
 
164
		}
-
 
165
 
-
 
166
		// on les crée un DAO auquel on les transmet et qui demande le nombre
-
 
167
		// d'images correspondantes (pour les pages)
-
 
168
		NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO(this);
-
 
169
		niaDAO.obtenirNombreImages(this, criteres);
132
	 * @param r le rafraichissable auxquel on enverra les données
170
	}
133
	 */
171
	
-
 
172
	public void obtenirPhotoGalerie(Rafraichissable r)
Line 134... Line -...
134
	public void obtenirPhotoGalerie(Rafraichissable r)
-
 
135
	{
-
 
136
		
173
	{
137
		String motsClesFiltres[][] = getIMediateur().renvoyerFiltres() ;
-
 
138
		
-
 
139
		int tailleFiltres = motsClesFiltres.length ;
-
 
Line 140... Line 174...
140
				
174
		String valeursFiltres[][] = getIMediateur().renvoyerFiltres();
141
		String[][] criteres = new String[tailleFiltres+1][2] ; 
-
 
Line 142... Line 175...
142
		String[][] criteres2 = new String[tailleFiltres+2][2] ;
175
		
143
		
176
		int tailleFiltres = valeursFiltres.length;
Line 144... Line 177...
144
		String[] utilisateur = {"ci_ce_utilisateur", ""+getIMediateur().getIdentifiant()} ;
177
		
145
		criteres[0] = utilisateur ;
178
		String[][] criteres2 = new String[tailleFiltres + 2][2];
146
		
179
		
147
		String[] limite =  {"ci_limite" ,""+taillePage } ;
180
		String[] limite = { "ci_limite", "" + taillePage };
148
		String[] taillePage = {"ci_numero_page",""+pageEncours} ;  
-
 
149
		
-
 
150
		criteres2[0] = limite ;
181
		String[] taillePage = { "ci_numero_page", "" + pageEncours };
151
		criteres2[1] = taillePage ;
182
		
Line 152... Line 183...
152
		
183
		criteres2[0] = limite;
153
		for (int i = 0 ; i < motsClesFiltres.length; i++) {
-
 
154
			
184
		criteres2[1] = taillePage;
155
			criteres[i+1] = motsClesFiltres[i] ;
-
 
156
			criteres2[i+2] = motsClesFiltres[i] ;
-
 
157
		}
185
 
158
		
186
		for (int i = 0; i < valeursFiltres.length; i++) {
159
		// on les crée un DAO auquel on les transmet et qui demande le nombre d'images correspondantes (pour les pages)
187
			criteres2[i + 2] = valeursFiltres[i];
160
		NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO(this) ;
188
		}
161
		niaDAO.obtenirNombreImages(this, criteres) ;
189
		
162
	
190
		// et on crée un DAO auquel on les transmet et qui envoie une requete
163
		// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images
191
		// pour recevoir les images
164
		ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO(this);
192
		ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO(this);
165
		liaDAO.ObtenirListeImages(this, criteres2);		
193
		liaDAO.ObtenirListeImages(this, criteres2);
166
	}
194
	}
167
	
-
 
168
	/**
195
 
169
	 * Appelle le DAO d'upload qui va choisir la methode d'upload adaptée
196
	/**
170
	 * et lancer l'interface appropriée
197
	 * Appelle le DAO d'upload qui va choisir la methode d'upload adaptée et
171
	 */
198
	 * lancer l'interface appropriée
172
	@SuppressWarnings("static-access")
199
	 */
173
	public void uploaderImages()
200
	@SuppressWarnings("static-access")
-
 
201
	public void uploaderImages() {
-
 
202
		ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO(this);
174
	{
203
		IuADaO.choisirMethodeUpload();
175
		ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO(this) ;
204
	}
176
		IuADaO.choisirMethodeUpload() ;
205
 
177
	}
-
 
178
	
206
	/**
179
	/**
207
	 * Met à jour la liste des images à partir d'un objet
180
	 * Met à jour la liste des images à partir d'un objet
208
	 * 
181
	 * @param o la nouvelle liste d'image 
209
	 * @param o
182
	 */
210
	 *            la nouvelle liste d'image
-
 
211
	 */
-
 
212
	public void rafraichirListeImage(Object o) {
183
	public void rafraichirListeImage(Object o)
213
		cacheImage = (ListeImageCarnet) o;
184
	{
214
	}
185
		cacheImage = (ListeImageCarnet)o ;
215
 
186
	}
-
 
187
	
216
	/**
188
	/**
217
	 * Met à jour l'arbre des mots clés à partir d'un objet
189
	 * Met à jour l'arbre des mots clés à partir d'un objet
218
	 * 
190
	 * @param o le nouvel arbre de mots clés
219
	 * @param o
191
	 */
220
	 *            le nouvel arbre de mots clés
-
 
221
	 */
192
	public void rafraichirArbreMotsCles(Object o)
222
	public void rafraichirArbreMotsCles(Object o) {
193
	{
223
		arbreMotsCles = (com.gwtext.client.data.Tree) o;
194
		arbreMotsCles = (com.gwtext.client.data.Tree)o ;
224
	}
195
	}
225
 
196
	
226
	/**
197
	/**
-
 
198
	 * Met à jour la table de correspondance mots clés / ids
227
	 * Met à jour la table de correspondance mots clés / ids à partir d'un objet
199
	 * à partir d'un objet
-
 
200
	 * @param o la nouvelle table des mots clés
228
	 * 
201
	 */
229
	 * @param o
202
	@SuppressWarnings("unchecked")
230
	 *            la nouvelle table des mots clés
203
	public void rafraichirMotsCles(Object o)
231
	 */
204
	{
232
	@SuppressWarnings("unchecked")
205
		if(o instanceof HashMap)
233
	public void rafraichirMotsCles(Object o) {
206
		{
234
		if (o instanceof HashMap) {
-
 
235
			motsCles = (HashMap<String, String>) o;
-
 
236
		}
207
			motsCles = (HashMap<String, String>)o ;
237
	}
-
 
238
 
208
		}
239
	/**
209
	}
240
	 * Va chercher les métadonnées associées à une image dans la liste des
210
	
241
	 * images chargée dans le modèle
211
	/**
-
 
212
	 * Va chercher les métadonnées associées à une image dans la liste 
242
	 * 
213
	 * des images chargée dans le modèle
243
	 * @param r
214
	 * @param r le rafraichissable auquel on enverra les informations
244
	 *            le rafraichissable auquel on enverra les informations
215
	 * @param id l'identifiant de l'image
245
	 * @param id
216
	 */
246
	 *            l'identifiant de l'image
217
	public void obtenirMetadonnees(Rafraichissable r, String id)
247
	 */
218
	{			
248
	public void obtenirMetadonnees(Rafraichissable r, String id) {
219
		ImageCarnet im = (ImageCarnet)cacheImage.get(id) ;
249
		ImageCarnet im = (ImageCarnet) cacheImage.get(id);
220
				
250
 
221
		Object meta[] = new Object[3] ;
251
		Object meta[] = new Object[3];
222
		meta[0] = im.getMetadonnesExif() ;
252
		meta[0] = im.getMetadonnesExif();
223
		meta[1] = im.getMetadonnesIptc() ;
253
		meta[1] = im.getMetadonnesIptc();
224
		meta[2] = im.getInfoGenerales() ;
254
		meta[2] = im.getInfoGenerales();
-
 
255
 
-
 
256
		r.rafraichir(meta, false);
225
		
257
	}
-
 
258
 
226
		r.rafraichir(meta,false) ;	
259
	/**
227
	}
260
	 * Va chercher les mots clés associés à une image dans la liste des images
228
	
261
	 * chargée dans le modèle
229
	/**
-
 
230
	 * Va chercher les mots clés associés à une image dans la liste 
262
	 * 
231
	 * des images chargée dans le modèle
263
	 * @param r
232
	 * @param r le rafraichissable auquel on enverra les informations
264
	 *            le rafraichissable auquel on enverra les informations
233
	 * @param id l'identifiant de l'image
265
	 * @param id
234
	 */
266
	 *            l'identifiant de l'image
235
	public void obtenirMotsClesId(Rafraichissable r, String id)
267
	 */
236
	{	
268
	public void obtenirMotsClesId(Rafraichissable r, String id) {
237
		ImageCarnet im = cacheImage.get(id) ;
269
		ImageCarnet im = cacheImage.get(id);
238
		String motsClesId = im.getMotsCles() ;
270
		String motsClesId = im.getMotsCles();
239
		String[] motsClesIdTab = motsClesId.split(",") ;
271
		String[] motsClesIdTab = motsClesId.split(",");
-
 
272
 
-
 
273
		r.rafraichir(motsClesIdTab, false);
240
		
274
	}
-
 
275
 
241
		r.rafraichir(motsClesIdTab, false) ;
276
	/**
-
 
277
	 * Met à jour la liste des images en local et appelle le DAO de mise à jour
242
	}
278
	 * pour les commentaires et la date des images selectionnées
243
	
279
	 * 
244
	/**
280
	 * @param commentaires
245
	 * Met à jour la liste des images en local et appelle le DAO de mise
281
	 *            le commentaire à appliquer
246
	 * à jour pour les commentaires et la date des images selectionnées
282
	 * @param date
247
	 * @param commentaires le commentaire à appliquer
-
 
248
	 * @param date la date à appliquer
283
	 *            la date à appliquer
249
	 * @param ids les identifiants des images selectionnées
284
	 * @param ids
250
	 */
285
	 *            les identifiants des images selectionnées
251
	public void mettreAJourCacheImage(String commentaires, String date, String note, String ids[])
286
	 */
252
	{
287
	public void mettreAJourCacheImage(String commentaires, String date,
253
			for (int i = 0; i < ids.length; i++) 
288
			String note, String ids[]) {
254
			{	
289
		for (int i = 0; i < ids.length; i++) {
255
				String key = ids[i] ;
290
			String key = ids[i];
256
				ImageCarnet ic = cacheImage.get(key) ;
291
			ImageCarnet ic = cacheImage.get(key);
257
				ic.miseAJourInfoGenerales(commentaires, date, note) ;
292
			ic.miseAJourInfoGenerales(commentaires, date, note);
-
 
293
			mettreAjourBaseDeDonneesImageCarnet(ic);
-
 
294
		}
258
				mettreAjourBaseDeDonneesImageCarnet(ic) ;	
295
 
-
 
296
	}
259
			}
297
 
260
			
298
	/**
261
	}
299
	 * Ajoute un nouveau mot clés à la liste des mots clés locale
262
	
-
 
263
	/**
300
	 * 
264
	 * Ajoute un nouveau mot clés à la liste des mots clés locale
301
	 * @param text
265
	 * @param text le mot clé
302
	 *            le mot clé
266
	 * @param id l'identifiant du mot clé
303
	 * @param id
267
	 */
304
	 *            l'identifiant du mot clé
268
	public void mettreAjourMotsClesId(String text, String id)
305
	 */
269
	{
306
	public void mettreAjourMotsClesId(String text, String id) {
270
				 motsCles.put(id, text) ;
307
		motsCles.put(id, text);
271
	}
-
 
272
	
308
	}
273
	/**
309
 
274
	 * Appelle le DAO chargé de mettre à jour la base de données avec
310
	/**
275
	 * les toutes les informations des images modifiées par l'utilisateur
311
	 * Appelle le DAO chargé de mettre à jour la base de données avec les toutes
276
	 */
312
	 * les informations des images modifiées par l'utilisateur
277
	public void mettreAJourBaseDeDonneesListeImageCarnet()
313
	 */
278
	{
314
	public void mettreAJourBaseDeDonneesListeImageCarnet() {
279
		ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO(this);
315
		ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO(this);
-
 
316
 
-
 
317
		liDaO.SynchroniserBaseDeDonnees(cacheImage);
280
		
318
	}
281
		liDaO.SynchroniserBaseDeDonnees(cacheImage);
319
 
282
	}
320
	/**
283
	
-
 
284
	/**
321
	 * Appelle le DAO chargé de mettre à jour la base de données avec les toutes
285
	 * Appelle le DAO chargé de mettre à jour la base de données avec
322
	 * les informations d'une image donnée
286
	 * les toutes les informations d'une image donnée
323
	 * 
Line 287... Line 324...
287
	 * @param ic l'image à synchroniser avec la base
324
	 * @param ic
288
	 */
325
	 *            l'image à synchroniser avec la base
289
	public void mettreAjourBaseDeDonneesImageCarnet(ImageCarnet ic)
326
	 */
-
 
327
	public void mettreAjourBaseDeDonneesImageCarnet(ImageCarnet ic) {
-
 
328
		ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO(this);
290
	{
329
		iaDaO.SynchroniserBaseDeDonnees(ic);
291
		ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO(this);
330
	}
292
		iaDaO.SynchroniserBaseDeDonnees(ic) ;
331
 
293
	}
-
 
294
 
332
	/**
295
	/**
333
	 * Supprime les images données du cache local et appelle le DAO qui les
296
	 * Supprime les images données du cache local et appelle le DAO
334
	 * supprime de la base de données
297
	 * qui les supprime de la base de données
335
	 * 
298
	 * @param ids les identifiants des images selectionnées
-
 
299
	 */
336
	 * @param ids
300
	public void supprimerImages(String[] ids) 
337
	 *            les identifiants des images selectionnées
301
	{
338
	 */
302
		String rids[] = new String[ids.length] ;
339
	public void supprimerImages(String[] ids) {
303
		ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO(this) ;
340
		String rids[] = new String[ids.length];
304
		
341
		ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO(this);
305
		for (int i = 0; i < ids.length; i++) 
342
 
306
		{				
343
		for (int i = 0; i < ids.length; i++) {
307
			String key = ids[i] ;
-
 
308
			ImageCarnet ic = cacheImage.get(key) ;
344
			String key = ids[i];
309
			rids[i] = ic.getId() ;
345
			ImageCarnet ic = cacheImage.get(key);
310
			
346
			rids[i] = ic.getId();
Line 311... Line 347...
311
			cacheImage.remove(key) ;
347
 
312
		}
348
			cacheImage.remove(key);
313
		
349
		}
314
		if(rids.length != 0)
350
 
315
		{	
351
		if (rids.length != 0) {
316
			liDao.supprimerBaseDeDonnees(rids);
-
 
-
 
352
			liDao.supprimerBaseDeDonnees(rids);
317
		}		
353
		}
318
	}
354
	}
319
 
-
 
320
	/**
355
 
321
	 * Met à jour les données locales suivant le type des nouvelles données
356
	/**
322
	 * et appelle le médiateur pour le notifier de la mise à jour
357
	 * Met à jour les données locales suivant le type des nouvelles données et
323
	 */
-
 
324
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) 
-
 
325
	{
-
 
326
		// si l'on a reçu une liste d'images
-
 
327
		if(nouvelleDonnees instanceof ListeImageCarnet)
-
 
328
		{
-
 
329
				ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees ;
-
 
330
				Object[][] photoData = new Object[data.size()][8];
-
 
331
				int i = 0 ;
-
 
332
				
-
 
333
				if(data.size() == 0)
-
 
334
				{
-
 
335
					pageEncours = 0 ;
-
 
336
				}
-
 
337
				
-
 
338
				// on la parse et on récupère les informations quiç nous interessent
-
 
339
				for (Iterator<String> it = data.keySet().iterator(); it.hasNext();) 
-
 
340
				{
-
 
341
					ImageCarnet im =  data.get(it.next());
-
 
342
					photoData[i][0] = im.getOrdre() ;
-
 
343
					photoData[i][1] = im.getDate() ;
-
 
344
					photoData[i][2] = im.getIptcCity() ;
-
 
345
					photoData[i][3] = im.getMake()+" "+im.getModel() ;
-
 
346
					photoData[i][4] = im.getSUrl() ;
-
 
347
					photoData[i][5] = im.getMUrl() ;
-
 
348
					photoData[i][6] = im.getLUrl() ;
-
 
349
					photoData[i][7] = im.getNote() ;
-
 
350
					
-
 
351
					i++ ;
-
 
352
				}
-
 
353
		
-
 
354
				// creation du store qui les contient
-
 
355
				FieldDef defNumImage = new IntegerFieldDef("num_image");
-
 
356
				FieldDef defDatImage = new StringFieldDef("dat_image");
-
 
357
				FieldDef defLieImage = new StringFieldDef("lie_image");
-
 
358
				FieldDef defAppImage = new StringFieldDef("app_image");
-
 
359
				FieldDef defUrlImageS = new StringFieldDef("url_image_S");
-
 
360
				FieldDef defUrlImageM = new StringFieldDef("url_image_M");
-
 
361
				FieldDef defUrlImage = new StringFieldDef("url_image");
-
 
362
				FieldDef defNoteImage = new IntegerFieldDef("note_image") ;
-
 
363
				FieldDef[] defTab = {defNumImage,defDatImage,defLieImage,defAppImage,defUrlImageS,defUrlImageM,defUrlImage,defNoteImage};
-
 
364
				RecordDef rd = new RecordDef(defTab) ;
-
 
365
				
-
 
366
				final MemoryProxy dataProxy = new MemoryProxy(photoData);
-
 
367
				final ArrayReader reader = new ArrayReader(rd);
-
 
368
		
-
 
Line -... Line 358...
-
 
358
	 * appelle le médiateur pour le notifier de la mise à jour
-
 
359
	 */
-
 
360
	public void rafraichir(Object nouvelleDonnees,
369
				final Store photoStore = new Store(dataProxy, reader);
361
			boolean repandreRafraichissement) {
370
				
362
		// si l'on a reçu une liste d'images
-
 
363
		if (nouvelleDonnees instanceof ListeImageCarnet) {
-
 
364
			ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees;
-
 
365
			Object[][] photoData = new Object[data.size()][9];
-
 
366
			int i = 0;
-
 
367
 
-
 
368
			if (data.size() == 0) {
-
 
369
				pageEncours = 0;
-
 
370
			}
-
 
371
 
-
 
372
			// on la parse et on récupère les informations quiç nous interessent
371
				rafraichirListeImage(nouvelleDonnees);
373
			for (Iterator<String> it = data.keySet().iterator(); it.hasNext();) {
-
 
374
				ImageCarnet im = data.get(it.next());
-
 
375
				photoData[i][0] = im.getOrdre();
372
				
376
				photoData[i][1] = im.getDate();
-
 
377
				photoData[i][2] = im.getIptcCity();
-
 
378
				photoData[i][3] = im.getMake() + " " + im.getModel();
-
 
379
				photoData[i][4] = im.getSUrl();
-
 
380
				photoData[i][5] = im.getMUrl();
-
 
381
				photoData[i][6] = im.getLUrl();
-
 
382
				photoData[i][7] = im.getNote();
-
 
383
				photoData[i][8] = im.getId();
-
 
384
 
-
 
385
				i++;
-
 
386
			}
-
 
387
 
-
 
388
			// creation du store qui les contient
-
 
389
			FieldDef defNumImage = new IntegerFieldDef("num_image");
-
 
390
			FieldDef defDatImage = new StringFieldDef("dat_image");
-
 
391
			FieldDef defLieImage = new StringFieldDef("lie_image");
-
 
392
			FieldDef defAppImage = new StringFieldDef("app_image");
-
 
393
			FieldDef defUrlImageS = new StringFieldDef("url_image_S");
-
 
394
			FieldDef defUrlImageM = new StringFieldDef("url_image_M");
-
 
395
			FieldDef defUrlImage = new StringFieldDef("url_image");
-
 
396
			FieldDef defNoteImage = new IntegerFieldDef("note_image");
-
 
397
			FieldDef defIdImage = new IntegerFieldDef("id_image");
-
 
398
			FieldDef[] defTab = { defNumImage, defDatImage, defLieImage,
-
 
399
					defAppImage, defUrlImageS, defUrlImageM, defUrlImage,
-
 
400
					defNoteImage, defIdImage };
-
 
401
			RecordDef rd = new RecordDef(defTab);
-
 
402
 
-
 
403
			final MemoryProxy dataProxy = new MemoryProxy(photoData);
-
 
404
			final ArrayReader reader = new ArrayReader(rd);
-
 
405
 
-
 
406
			final Store photoStore = new Store(dataProxy, reader);
-
 
407
 
-
 
408
			rafraichirListeImage(nouvelleDonnees);
373
				st = photoStore ;
409
 
374
				st.load() ;
410
			st = photoStore;
375
				
411
			st.load();
376
				// par défaut le store est trié sur le numéro d'image
412
 
377
				st.sort("num_image") ;
413
			// par défaut le store est trié sur le numéro d'image
378
 
414
			st.sort("num_image");
379
			
-
 
380
				// si on doit répandre les données, on notifie le médiateur qui les distribuera à son tour
415
 
381
				if(repandreRafraichissement)
416
			// si on doit répandre les données, on notifie le médiateur qui les
382
				{
417
			// distribuera à son tour
383
					getIMediateur().synchroniserDonneesZoomListeGalerie(st, this) ;
418
			if (repandreRafraichissement) {
384
				}
419
				getIMediateur().synchroniserDonneesZoomListeGalerie(st, this);
385
		}
420
			}
386
		
421
		}
387
		// si on reçoit un tableau JSON
-
 
388
		if(nouvelleDonnees instanceof JSONArray)
422
 
389
		{
423
		// si on reçoit un tableau JSON
390
			// alors on a reçu les informations sur les mots clés
424
		if (nouvelleDonnees instanceof JSONArray) {
391
			JSONArray reponse = (JSONArray)nouvelleDonnees ; 
425
			// alors on a reçu les informations sur les mots clés
392
			
426
			JSONArray reponse = (JSONArray) nouvelleDonnees;
393
			final int taillemax = reponse.size();
427
 
394
			
428
			final int taillemax = reponse.size();
395
			// si le tableau est vide
429
 
396
			if(taillemax == 0)
430
			// si le tableau est vide
397
			{
431
			if (taillemax == 0) {
398
				// on crée un arbre vide
432
				// on crée un arbre vide
399
				TreeNode root = new TreeNode() ;
-
 
400
				root.setId("racine") ;
433
				TreeNode root = new TreeNode();
401
				root.setText("Tags") ;
434
				root.setId("racine");
402
				String[] usObj = {"Tags","racine"} ;
-
 
403
				root.setUserObject(usObj) ;
435
				root.setText("Tags");
404
				arbreMotsCles.setRootNode(root) ;				
436
				String[] usObj = { "Tags", "racine" };
405
			}
437
				root.setUserObject(usObj);
-
 
438
				arbreMotsCles.setRootNode(root);
406
			
439
			}
-
 
440
 
407
			// pour chacun des élements du tableau
441
			// pour chacun des élements du tableau
-
 
442
			for (int j = 0; j < taillemax; j++) {
408
			for (int j = 0; j < taillemax ; j++) 
443
				// on extrait les élements du tableau
409
			{
444
				if (reponse.get(j).isObject() != null) {
410
				// on extrait les élements du tableau
445
					JSONObject noeud = (JSONObject) reponse.get(j);
411
				if(reponse.get(j).isObject() != null)
446
 
-
 
447
					String id_noeud = noeud.get("cmc_id_mot_cle_utilisateur")
412
				{
448
							.isString().stringValue();
413
					JSONObject noeud = (JSONObject)reponse.get(j) ;
-
 
414
					
449
					String mot_cle = noeud.get("cmc_mot_cle").isString()
415
					String id_noeud = noeud.get("cmc_id_mot_cle_utilisateur").isString().stringValue() ;
450
							.stringValue();
416
					String mot_cle = noeud.get("cmc_mot_cle").isString().stringValue() ;
451
					String parent = noeud.get("cmc_id_parent").isString()
417
					String parent = noeud.get("cmc_id_parent").isString().stringValue() ;
452
							.stringValue();
418
					
453
 
419
					String[] usObj = {mot_cle, id_noeud} ; 
-
 
420
					
454
					String[] usObj = { mot_cle, id_noeud };
421
					// et on construit l'arbre à partir de la racine (qui est toujoursl e premier élément)
-
 
422
					if(id_noeud.equals("racine"))
455
 
-
 
456
					// et on construit l'arbre à partir de la racine (qui est
423
					{
457
					// toujoursl e premier élément)
424
						TreeNode root = new TreeNode() ;
458
					if (id_noeud.equals("racine")) {
425
						root.setId(id_noeud) ;
459
						TreeNode root = new TreeNode();
426
						root.setText(mot_cle) ;
460
						root.setId(id_noeud);
427
						root.setUserObject(usObj) ;
461
						root.setText(mot_cle);
428
						arbreMotsCles.setRootNode(root) ;
462
						root.setUserObject(usObj);
429
					}
463
						arbreMotsCles.setRootNode(root);
430
					else
464
					} else {
431
					{
465
						// et en ajoutant les noeuds un à un (qui sont renvoyé
432
						// et en ajoutant les noeuds un à un (qui sont renvoyé dans l'ordre hierarchique de leur niveau
466
						// dans l'ordre hierarchique de leur niveau
433
						// ce qui permet de les traiter séquentiellement)
467
						// ce qui permet de les traiter séquentiellement)
434
						TreeNode node = new TreeNode() ;
468
						TreeNode node = new TreeNode();
435
						node.setId(id_noeud) ;
469
						node.setId(id_noeud);
436
						node.setText(mot_cle) ;
470
						node.setText(mot_cle);
-
 
471
						node.setChecked(false);
437
						node.setChecked(false) ;
472
						Node parentNode = arbreMotsCles.getNodeById(parent);
438
						Node parentNode = arbreMotsCles.getNodeById(parent) ;
473
						node.setUserObject(usObj);
439
						node.setUserObject(usObj) ;	
474
						parentNode.appendChild(node);
440
						parentNode.appendChild(node) ;
475
					}
441
					}
476
				}
-
 
477
			}
442
				}
478
			// enfin on met à jour l'arbre des mots clés contenu dans le modèle
443
			}		
-
 
444
				// enfin on met à jour l'arbre des mots clés contenu dans le modèle
479
			rafraichirArbreMotsCles(arbreMotsCles);
445
				rafraichirArbreMotsCles(arbreMotsCles) ;
480
			// et on notifie le médiateur de la mise à jour en lui passant une
446
				// et on notifie le médiateur de la mise à jour en lui passant une copie des données
481
			// copie des données
-
 
482
			getIMediateur().rafraichirArbreMotsCles(arbreMotsCles);
447
				getIMediateur().rafraichirArbreMotsCles(arbreMotsCles) ;			
483
		}
448
		}
484
 
449
		
485
		// Si on reçoit un tableau d'entiers
450
		// Si on reçoit un tableau d'entiers
486
		// c'est un tableau d'un seul entier qui est le nombre d'images
451
		// c'est un tableau d'un seul entier qui est le nombre d'images correspondant aux critères
487
		// correspondant aux critères
-
 
488
		if (nouvelleDonnees instanceof int[]) {
-
 
489
			int[] pages = (int[]) nouvelleDonnees;
-
 
490
 
452
		if(nouvelleDonnees instanceof int[])
491
			// on calcule le nombre de pages nécessaires et on les met à jour
453
		{
492
			// dans le modèle
454
			int[] pages = (int[])nouvelleDonnees ;
493
			pageMax = calculerNbPages(pages[0]);
455
			
494
			nbElements = pages[0];
456
			// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
495
 
457
			pageMax  = calculerNbPages(pages[0]) ;
496
			// et on notifie de le mediateur du changement des valeurs
458
			nbElements = pages[0] ;
497
			getIMediateur().changerPageMaxEtCourante(pageMax, pageEncours,
459
			
-
 
460
			// et on notifie de le mediateur du changement des valeurs
498
					taillePage, pages[0]);
461
			getIMediateur().changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ;
-
 
462
		}
499
			
463
	}
500
			obtenirPhotoGalerie(this) ;
464
	
501
		}
465
	/**
502
	}
466
	 * Affiche les paires / valeur de tous les mots clés stockés
503
 
Line 467... Line 504...
467
	 */
504
	/**
468
	public void afficherMotsCles()
505
	 * Affiche les paires / valeur de tous les mots clés stockés
-
 
506
	 */
-
 
507
	public void afficherMotsCles() {
-
 
508
		for (Iterator<String> it = motsCles.keySet().iterator(); it.hasNext();) {
469
	{
509
			String key = it.next();
-
 
510
			String valeur = (String) motsCles.get(key);
470
		for(Iterator<String> it = motsCles.keySet().iterator() ; it.hasNext() ;)
511
			System.out.println("clé : " + key + " valeur : " + valeur);
-
 
512
		}
471
		{
513
	}
472
			String key = it.next() ;
514
 
473
			String valeur = (String)motsCles.get(key) ; 
515
	/**
474
			System.out.println("clé : "+key+" valeur : "+valeur);
-
 
-
 
516
	 * Met à jour les mots clés associés à une image et appelle le DAO pour
475
		}
517
	 * synchroniser la base de données
476
	}
-
 
477
 
518
	 * 
478
	/**
-
 
479
	 * Met à jour les mots clés associés à une image et appelle le DAO pour synchroniser la base de données
519
	 * @param ids
480
	 * @param ids les identifiants des images selectionnées
520
	 *            les identifiants des images selectionnées
481
	 * @param motsClesEnCours les mots clés à appliquer aux images
521
	 * @param motsClesEnCours
482
	 * @param arbreMC l'arbre de mots clés en cours
522
	 *            les mots clés à appliquer aux images
483
	 */
523
	 * @param arbreMC
484
	public void mettreAjourMotsCles(String[] ids, String motsClesEnCours, com.gwtext.client.data.Tree arbreMC) 
524
	 *            l'arbre de mots clés en cours
485
	{		
525
	 */
486
		for (int i = 0; i < ids.length; i++) 
526
	public void mettreAjourMotsCles(String[] ids, String motsClesEnCours,
487
		{	
527
			com.gwtext.client.data.Tree arbreMC) {
488
			if(cacheImage.containsKey(ids[i]))
528
		for (int i = 0; i < ids.length; i++) {
489
			{
-
 
490
				ImageCarnet ic = (ImageCarnet)cacheImage.get(ids[i]) ;
529
			if (cacheImage.containsKey(ids[i])) {
491
				ic.mettreAjourMotsCles(motsClesEnCours) ;	
530
				ImageCarnet ic = (ImageCarnet) cacheImage.get(ids[i]);
492
				
531
				ic.mettreAjourMotsCles(motsClesEnCours);
-
 
532
 
493
				ImageAsynchroneDAO imgDao = new ImageAsynchroneDAO(this) ;
533
				ImageAsynchroneDAO imgDao = new ImageAsynchroneDAO(this);
494
				imgDao.SynchroniserMotsClesImageBaseDeDonnees(ic) ;
534
				imgDao.SynchroniserMotsClesImageBaseDeDonnees(ic);
495
			}
-
 
496
		}
535
			}
497
		
536
		}
498
		rafraichirArbreMotsCles(arbreMC) ;
537
 
499
	}
538
		rafraichirArbreMotsCles(arbreMC);
500
	
539
	}
501
	
540
 
-
 
541
	/**
-
 
542
	 * Appelle le DAO des mots clés pour obtenir l'arbre complet stocké dans la
-
 
543
	 * base de données
502
	/**
544
	 */
503
	 * Appelle le DAO des mots clés pour obtenir l'arbre complet stocké dans la base de données
545
	public void initialiserArbreMotsCles() {
504
	 */
546
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
505
	public void initialiserArbreMotsCles()
-
 
506
	{
547
		MCDao.obtenirListeMotsCles(this);
507
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
548
	}
Line 508... Line 549...
508
		MCDao.obtenirListeMotsCles(this) ;
549
 
509
	}
550
	/**
510
	
551
	 * Envoie l'arbre des mots clés stocké localement à l'élément rafrachissable
-
 
552
	 * donné, qui le demande
-
 
553
	 * 
511
	/**
554
	 * @param r
-
 
555
	 *            le rafraichissable demandeur de l'arbre
512
	 * Envoie l'arbre des mots clés stocké localement à l'élément rafrachissable donné, qui le demande
556
	 */
513
	 * @param r le rafraichissable demandeur de l'arbre
557
	public void obtenirArbreMotCle(Rafraichissable r) {
514
	 */
558
		r.rafraichir(arbreMotsCles, false);
515
	public void obtenirArbreMotCle(Rafraichissable r)
-
 
-
 
559
	}
516
	{
560
 
517
		r.rafraichir(arbreMotsCles, false) ;
561
	/**
518
	}
562
	 * Ajoute un mot clé à l'arbre des mots clés local et appelle le DAO qui
519
 
563
	 * fait la mise à jour de l'arbre des mots clés dans la base
520
	/**
564
	 * 
521
	 * Ajoute un mot clé à l'arbre des mots clés local et appelle le DAO qui fait la mise
565
	 * @param n
522
	 * à jour de l'arbre des mots clés dans la base
566
	 *            le nouveau noeud contenant le mot clé
523
	 * @param n le nouveau noeud contenant le mot clé
567
	 * @param arbreMC
524
	 * @param arbreMC l'arbre des mots cles en cours
-
 
525
	 */
568
	 *            l'arbre des mots cles en cours
526
	public void ajouterMotCleDansArbre(TreeNode n, com.gwtext.client.data.Tree arbreMC) 
569
	 */
527
	{	
-
 
528
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
570
	public void ajouterMotCleDansArbre(TreeNode n,
529
		
-
 
530
		String[] usObj = (String[])n.getUserObject() ;
571
			com.gwtext.client.data.Tree arbreMC) {
531
		String motCle = usObj[0] ;
572
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
532
		String id = usObj[1] ;
573
 
533
		String parentId = "" ;
574
		String[] usObj = (String[]) n.getUserObject();
534
		
575
		String motCle = usObj[0];
535
		if(!id.equals("racine"))
576
		String id = usObj[1];
-
 
577
		String parentId = "";
536
		{
578
 
537
			String[] parentUsObj = (String[])n.getParentNode().getUserObject() ;
579
		if (!id.equals("racine")) {
Line 538... Line 580...
538
			parentId = parentUsObj[1] ;
580
			String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
539
		}
581
			parentId = parentUsObj[1];
540
		else
582
		} else {
-
 
583
			parentId = "racine";
-
 
584
		}
541
		{
585
 
-
 
586
		rafraichirArbreMotsCles(arbreMC);
542
			parentId = "racine" ;
587
 
543
		}
588
		String nouveauMotCle = "&identifiant=" + getIdentifiant() + "&motcle="
544
		
589
				+ motCle + "&id=" + id + "&parent=" + parentId;
545
		rafraichirArbreMotsCles(arbreMC) ;
-
 
546
		
590
		MCDao.ajouterBaseDeDonnees(nouveauMotCle);
547
		String nouveauMotCle = "&identifiant="+getIdentifiant()+"&motcle="+motCle+"&id="+id+"&parent="+parentId ;
591
	}
548
		MCDao.ajouterBaseDeDonnees(nouveauMotCle) ;		
592
 
549
	}
593
	/**
550
 
594
	 * Supprime un noeud de l'arbre des mots clés et appelle le DAO qui va
551
	/**
595
	 * supprimer les mots clés associés dans la base
552
	 * Supprime un noeud de l'arbre des mots clés et appelle le DAO qui va supprimer
596
	 * 
553
	 * les mots clés associés dans la base
597
	 * @param n
554
	 * @param n le noeud à supprimer
598
	 *            le noeud à supprimer
Line 555... Line 599...
555
	 * @param arbreMC l'arbre des mots clés en cours
599
	 * @param arbreMC
556
	 */
600
	 *            l'arbre des mots clés en cours
557
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) 
601
	 */
-
 
602
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
-
 
603
 
558
	{
604
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
-
 
605
 
559
		
606
		String[] usObj = (String[]) n.getUserObject();
560
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
607
		String id = usObj[1];
561
		
608
 
562
		String[] usObj = (String[])n.getUserObject() ;
-
 
563
		String id = usObj[1] ;
609
		MCDao.supprimerBaseDeDonnees(id);
564
		
610
 
565
		MCDao.supprimerBaseDeDonnees(id) ;
611
	}
566
		
612
 
567
	}
613
	/**
568
 
614
	 * Modifie le noeud donné dans l'arbre des mots clés en cours et appelle le
569
	/**
615
	 * DAO qui synchronise la modification dans la base de données
570
	 * Modifie le noeud donné dans l'arbre des mots clés en cours et appelle le DAO
616
	 * 
571
	 * qui synchronise la modification dans la base de données
617
	 * @param n
572
	 * @param n le noeud modifié
-
 
573
	 * @param arbreMC l'arbre des mots clés en cours
618
	 *            le noeud modifié
574
	 */
619
	 * @param arbreMC
575
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) 
-
 
576
	{
620
	 *            l'arbre des mots clés en cours
577
		
-
 
578
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
621
	 */
579
		
622
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
580
		String[] usObj = (String[])n.getUserObject() ;
623
 
581
		String motCle = usObj[0] ;
624
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
582
		String id = usObj[1] ;
625
 
583
		String parentId = "" ;
626
		String[] usObj = (String[]) n.getUserObject();
-
 
627
		String motCle = usObj[0];
584
		
628
		String id = usObj[1];
585
		if(!id.equals("racine"))
629
		String parentId = "";
586
		{
630
 
587
			String[] parentUsObj = (String[])n.getParentNode().getUserObject() ;
631
		if (!id.equals("racine")) {
588
			parentId = parentUsObj[1] ;
632
			String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
589
		}
633
			parentId = parentUsObj[1];
590
		else
634
		} else {
-
 
635
			parentId = "racine";
-
 
636
		}
591
		{
637
 
-
 
638
		rafraichirArbreMotsCles(arbreMC);
592
			parentId = "racine" ;
639
 
593
		}
640
		String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
594
		
641
				+ parentId;
595
		rafraichirArbreMotsCles(arbreMC) ;
-
 
596
		
642
		MCDao.modifierBaseDeDonnees(motCleModifie);
597
		String motCleModifie = "&motcle="+motCle+"&id="+id+"&parent="+parentId ;	
643
 
598
		MCDao.modifierBaseDeDonnees(motCleModifie) ;
644
	}
599
		
645
 
600
	}
646
	/**
601
	
647
	 * Deplace un noeud dans l'arbre des mots cles et appelle le DAO qui
602
	/**
648
	 * reorganise l'arbre dans la base de donnees suivant le changement
603
	 * Deplace un noeud dans l'arbre des mots cles et appelle le DAO qui reorganise l'arbre
-
 
604
	 * dans la base de donnees suivant le changement
649
	 * 
605
	 * @param n le noeud deplace (et son sous arbre associe)
650
	 * @param n
606
	 * @param arbreMC l'arbre des mots cles en cours
-
 
607
	 */
651
	 *            le noeud deplace (et son sous arbre associe)
608
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC)
-
 
609
	{
652
	 * @param arbreMC
610
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
653
	 *            l'arbre des mots cles en cours
611
		
654
	 */
612
		String[] usObj = (String[])n.getUserObject() ;
655
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
613
		String motCle = usObj[0] ;
656
		MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this);
614
		String id = usObj[1] ;
657
 
-
 
658
		String[] usObj = (String[]) n.getUserObject();
615
		String parentId = "" ;		
659
		String motCle = usObj[0];
616
		if(!id.equals("racine"))
660
		String id = usObj[1];
617
		{
661
		String parentId = "";
618
			String[] parentUsObj = (String[])n.getParentNode().getUserObject() ;
662
		if (!id.equals("racine")) {
619
			parentId = parentUsObj[1] ;
663
			String[] parentUsObj = (String[]) n.getParentNode().getUserObject();
-
 
664
			parentId = parentUsObj[1];
-
 
665
		} else {
-
 
666
			parentId = "racine";
620
		}
667
		}
621
		else
668
 
622
		{
669
		rafraichirArbreMotsCles(arbreMC);
623
			parentId = "racine" ;
-
 
624
		}
670
 
625
		
671
		String motCleModifie = "&motcle=" + motCle + "&id=" + id + "&parent="
626
		rafraichirArbreMotsCles(arbreMC) ;
672
				+ parentId;
627
		
673
		MCDao.deplacerBaseDeDonnees(motCleModifie);
628
		String motCleModifie = "&motcle="+motCle+"&id="+id+"&parent="+parentId ;		
674
	}
629
		MCDao.deplacerBaseDeDonnees(motCleModifie) ;
675
 
-
 
676
	/**
-
 
677
	 * Change le numéro de la page en cours et envoie une demande de mise à jour
630
	}
678
	 * des données
631
	
679
	 * 
632
	/**
680
	 * @param nouvellePageCourante
633
	 * Change le numéro de la page en cours et envoie une demande de mise à jour des données
681
	 *            la nouvelle page à afficher
634
	 * @param nouvellePageCourante la nouvelle page à afficher
682
	 */
635
	 */
-
 
636
	public void changerNumeroPage(int nouvellePageCourante)
683
	public void changerNumeroPage(int nouvellePageCourante) {
-
 
684
		pageEncours = nouvellePageCourante;
637
	{
685
		obtenirNombrePhotoGalerie(this);
638
			pageEncours = nouvellePageCourante ;
686
	}
-
 
687
 
639
			obtenirPhotoGalerie(this) ;		
688
	/**
640
	}
689
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements
641
	
690
	 * donnés en fonction de la taille de page en cours
642
	/**
691
	 * 
643
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
692
	 * @param nbElements
644
	 * en cours
693
	 *            le nombre d'élements total
645
	 * @param nbElements le nombre d'élements total
694
	 * @return le nombre de pages
646
	 * @return le nombre de pages 
695
	 */
647
	 */
696
	public int calculerNbPages(int nbElements) {
648
	public int calculerNbPages(int nbElements)
697
		// A cause de la betise de java pour les conversion implicite on fait
-
 
698
		// quelques conversions manuellement
-
 
699
		// pour eviter qu'il arrondisse mal la division
649
	{
700
		// nombre de pages = (nombre d'element / taille de la page) arrondie à
650
		// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
701
		// l'entier superieur
651
		// pour eviter qu'il arrondisse mal la division
702
		double nPage = (1.0 * nbElements) / (1.0 * taillePage);
652
		// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur 
703
		double nPageRound = Math.ceil(nPage);
653
		double nPage = (1.0*nbElements)/(1.0*taillePage) ; 
-
 
654
		double nPageRound = Math.ceil(nPage) ;
704
		Double nPageInt = new Double(nPageRound);
655
		Double nPageInt = new Double(nPageRound) ;
705
 
656
		
706
		// on convertit en entier
657
		// on convertit en entier
707
		return nPageInt.intValue();
-
 
708
	}
658
		return nPageInt.intValue() ; 
709
 
659
	}
710
	/**
660
	
711
	 * Recalcule la page en cours lors du changement du nombre d'élements
661
	/**
712
	 * 
662
	 * Recalcule la page en cours lors du changement du nombre d'élements
713
	 * @param nbElements
663
	 * @param nbElements le nombre d'élements total
714
	 *            le nombre d'élements total
664
	 * @return la nouvelle page encours
715
	 * @return la nouvelle page encours
665
	 */
716
	 */
666
	public int calculerPageCourante(int nbElements)
717
	public int calculerPageCourante(int nbElements) {
667
	{
718
		// on calcule le nombre de page
668
		// on calcule le nombre de page
719
		int nouvelNbPages = calculerNbPages(nbElements);
-
 
720
		// la nouvelle page en cours
-
 
721
		double nPageCourante = (1.0 * pageEncours) / (1.0 * pageMax)
669
		int nouvelNbPages = calculerNbPages(nbElements) ;
722
				* (1.0 * nouvelNbPages);
670
		// la nouvelle page en cours
723
 
671
		double nPageCourante = (1.0*pageEncours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
724
		// on arrondit au supérieur
672
		
-
 
673
		// on arrondit au supérieur
725
		double nPageRound = Math.ceil(nPageCourante);
674
		double nPageRound = Math.ceil(nPageCourante) ;
726
		Double nPageInt = new Double(nPageRound);
675
		Double nPageInt = new Double(nPageRound) ;
727
 
676
		
728
		// on convertit en entier
677
		// on convertit en entier
729
		return Math.abs(nPageInt.intValue());
678
		return Math.abs(nPageInt.intValue()) ; 
730
	}
679
	}
731
 
-
 
732
	/**
680
	
733
	 * Change la taille de page et recalcule la page encours
681
	/**
734
	 * 
682
	 * Change la taille de page et recalcule la page encours 
-
 
683
	 * @param nouvelleTaillePage la nouvelle taille de page à utiliser
735
	 * @param nouvelleTaillePage
684
	 */
736
	 *            la nouvelle taille de page à utiliser
685
	public void changerTaillePage(int nouvelleTaillePage)
737
	 */
Line 686... Line 738...
686
	{
738
	public void changerTaillePage(int nouvelleTaillePage) {
687
		taillePage = nouvelleTaillePage ;
739
		taillePage = nouvelleTaillePage;
-
 
740
		pageEncours = calculerPageCourante(nbElements);
688
		pageEncours = calculerPageCourante(nbElements) ;
741
		obtenirNombrePhotoGalerie(this);
689
		obtenirPhotoGalerie(this) ;
742
	}
690
	}
743
 
691
	
744
	/**
692
	/**
745
	 * Notifie le mediateur que l'upload ou le download est termine et qu'il
693
	 * Notifie le mediateur que l'upload ou le download est termine et qu'il faut rafraichir les vues avec les nouvelles données
746
	 * faut rafraichir les vues avec les nouvelles données
Line 694... Line 747...
694
	 */
747
	 */
695
	public void requeteTerminee()
748
	public void requeteTerminee() {
-
 
749
		getIMediateur().demasquerChargement();
-
 
750
		getIMediateur().rafraichirToutesVues();
696
	{
751
	}
697
		getIMediateur().demasquerChargement() ;
752
 
698
		getIMediateur().rafraichirToutesVues() ;
753
	/**
699
	}
754
	 * Obtient l'identifiant de l'utilisateur auprès du médiateur
700
 
755
	 * 
701
	/**
756
	 * @return id de l'utilisateur
702
	 * Obtient l'identifiant de l'utilisateur auprès du médiateur
757
	 */
703
	 * @return id de l'utilisateur
758
	public String getIdentifiant() {
Line 704... Line 759...
704
	 */
759
 
705
	public String getIdentifiant() {
760
		return getIMediateur().getIdentifiant();
706
		
761
	}
-
 
762
 
-
 
763
	/**
707
		return getIMediateur().getIdentifiant() ;
764
	 * renvoie la taille d'une image grâce à son identifiant
-
 
765
	 * 
708
	}
766
	 * @param id
709
 
767
	 *            l'identifiant de l'image
710
	/**
768
	 * @return un tableau contenant la longueur et la hauteur de l'image
711
	 * renvoie la taille d'une image grâce à son identifiant
769
	 */
712
	 * @param id l'identifiant de l'image
770
	public String[] obtenirTailleImage(String id) {
713
	 * @return un tableau contenant la longueur et la hauteur de l'image
771
 
714
	 */
772
		return (cacheImage.get(id)).getTailleImage();
715
	public String[] obtenirTailleImage(String id) {
773
 
716
		
774
	}
717
		return  (cacheImage.get(id)).getTailleImage() ;
775
 
-
 
776
	/**
718
		
777
	 * Suivant l'id d'une image donnée, fais une demande au modèle pour qu'il
719
	}
778
	 * renvoie la note associée au rafrachissable qui la demande
720
 
779
	 * 
721
	/**
780
	 * @param r
722
	 * Suivant l'id d'une image donnée, fais une demande au modèle pour qu'il 
781
	 *            le rafraichissable demandeur de l'information
-
 
782
	 * @param id
-
 
783
	 *            l'identifiant del'image
-
 
784
	 */
-
 
785
	public void obtenirNote(Rafraichissable r, String id) {
-
 
786
 
-
 
787
		r.rafraichir((cacheImage.get(id)).getNote(), true);
-
 
788
 
-
 
789
	}
-
 
790
 
-
 
791
	/**
-
 
792
	 * Accesseur pour la configuration en cours d'utilisation
-
 
793
	 * 
-
 
794
	 * @return la configuration
-
 
795
	 */
-
 
796
	public Configuration getConfig() {
-
 
797
 
-
 
798
		return config;
-
 
799
	}
-
 
800
 
-
 
801
	/**
-
 
802
	 * Ajoute des images à la selection en cours
723
	 * renvoie la note associée au rafrachissable qui la demande
803
	 * 
-
 
804
	 * @param ids
-
 
805
	 *            les identifiants des images à ajouter
-
 
806
	 */
-
 
807
	public void ajouterImagesSelection(String[] ids) {
-
 
808
 
-
 
809
		for (int i = 0; i < ids.length; i++) {
-
 
810
 
-
 
811
			selectionImages.add(ids[i]);
-
 
812
		}
-
 
813
	}
-
 
814
 
-
 
815
	/**
Line -... Line 816...
-
 
816
	 * Vide la selection en cours
-
 
817
	 */
-
 
818
	public void viderSelection() {
-
 
819
		selectionImages.clear();
-
 
820
	}
-
 
821
 
-
 
822
	public String renvoyerSelection() {
-
 
823
 
-
 
824
		String selection = "";
-
 
825
		
-
 
826
		if(selectionImages.size() <= 0)
-
 
827
		{
-
 
828
			selection += "-255" ;
-
 
829
		}
-
 
830
		else
724
	 * @param r le rafraichissable demandeur de l'information
831
		{