Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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