Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 46 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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