Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 46 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 aperonnet 1
package org.tela_botanica.client.modeles;
2
 
12 aperonnet 3
import java.util.HashMap;
4
import java.util.Iterator;
5
import java.util.Set;
6
 
7
import com.google.gwt.json.client.JSONObject;
8
 
9
/**
10
 *
11
 * Classe representant une image du carnet,
12
 * elle ne contient pas d'image à proprement parler mais
36 aperonnet 13
 * plutôt les informations associées ainsi que l'url distante.
14
 * C'est une table de hachage qui contient des paires propriété/valeur
12 aperonnet 15
 *
16
 */
17
public class ImageCarnet extends HashMap {
4 aperonnet 18
 
12 aperonnet 19
 
36 aperonnet 20
	/**
21
	 * Constructeur avec un objet JSON
22
	 * @param image
23
	 */
12 aperonnet 24
	public ImageCarnet(JSONObject image)
25
	{
36 aperonnet 26
		// l'objet JSON est une table de hachage
12 aperonnet 27
		Set im = image.keySet() ;
28
 
36 aperonnet 29
		// on la parcourt pour chaque clé
12 aperonnet 30
		for (Iterator iterator = im.iterator(); iterator.hasNext();) {
31
 
36 aperonnet 32
			// si elle est associée à une valeur, on l'ajoute
12 aperonnet 33
			String key = (String) iterator.next();
34
			if(image.get(key).isString() != null)
35
			{
36
				String valeur = image.get(key).isString().stringValue() ;
37
				this.put(key, valeur) ;
38
			}
16 aperonnet 39
			else
40
			{
36 aperonnet 41
				// sinon on ajoute la clé avec une valeur vide
16 aperonnet 42
				String valeur = " " ;
43
				this.put(key, valeur) ;
44
			}
12 aperonnet 45
 
46
		}
47
 
48
	}
49
 
36 aperonnet 50
	/**
51
	 * Surcharge de toString qui affiche toutes les propriétés de l'image
52
	 */
48 aperonnet 53
 
16 aperonnet 54
	public String toString()
55
	{
56
		String valeur = " ";
57
 
58
		for (Iterator iterator = this.keySet().iterator(); iterator.hasNext();) {
59
 
60
 
61
			String key = (String) iterator.next();
62
			if(this.get(key) != null)
63
			{
64
				valeur += "cle : "+key+" valeur :"+(String)this.get(key)+"\n" ;
65
			}
66
 
67
		}
68
 
69
		return valeur ;
70
	}
71
 
36 aperonnet 72
	/**
73
	 * Pour éviter que l'on traite des valeurs nulles à l'affichage
74
	 * on passe par cette fonction qui retire les charactères nuls qui font planter
75
	 * l'affichage, il ne faut pas utiliser get directement
76
	 * @param cle
77
	 * @return la valeur associée à la clé
78
	 */
12 aperonnet 79
	public String renvoyerValeurCorrecte(String cle)
4 aperonnet 80
	{
12 aperonnet 81
		if(this.containsKey((cle)))
82
		{
83
			String valeur = (String)this.get(cle) ;
30 aperonnet 84
			if(valeur.equals("null") || valeur == null)
12 aperonnet 85
			{
36 aperonnet 86
				return " " ;
30 aperonnet 87
			}
12 aperonnet 88
			else
89
			{
22 aperonnet 90
				char nullChar = '\u0000' ;
91
				String sNull = ""+nullChar ;
92
				valeur = valeur.replaceAll(sNull, "") ;
12 aperonnet 93
				return valeur ;
94
			}
95
		}
96
		else
97
		{
36 aperonnet 98
			return " " ;
12 aperonnet 99
		}
4 aperonnet 100
	}
101
 
36 aperonnet 102
	/**
103
	 * Acesseur pour l'id de l'image
104
	 * @return l'id de l'image
105
	 */
22 aperonnet 106
	public String getId() {
107
 
108
		return renvoyerValeurCorrecte("ci_id_image") ;
109
	}
12 aperonnet 110
 
36 aperonnet 111
	/**
112
	 * Acesseur pour le numero d'ordre de l'image
113
	 * @return l'ordre de l'image
114
	 */
12 aperonnet 115
	public String getOrdre() {
116
 
117
		return renvoyerValeurCorrecte("ci_ordre") ;
118
	}
119
 
36 aperonnet 120
	/**
121
	 * Base de l'url serveur pour les images
122
	 * @return url racine pour les images
123
	 */
12 aperonnet 124
	public String getBaseUrl()
125
	{
16 aperonnet 126
		return "http://162.38.234.9/Documents/images_serveur/" ;
12 aperonnet 127
	}
43 aperonnet 128
 
129
	/**
130
	 * Renvoie le nom de base du fichier image et ses sous dossier
131
	 * @return le nom de base du fichier de type (XXX_XXX_XXX), et ses sous dossier
132
	 */
133
	public String[] getBaseFileName()
134
	{
135
		String id = getId() ;
136
 
137
		int maxZeros = 9 - id.length() ;
138
 
139
		for(int i = 0 ; i < maxZeros ; i++)
140
		{
141
			id = "0"+id ;
142
		}
143
 
144
		String dossierNv1 = id.substring(0, 3) ;
145
		String dossierNv2 = id.substring(3, 6) ;
146
		String fichierNv = id.substring(6, 9) ;
147
 
148
		String nomFichier = dossierNv1+"_"+dossierNv2+"_"+fichierNv ;
149
 
150
		String[] infosFichier = {nomFichier , dossierNv1 , dossierNv2} ;
151
 
152
		return infosFichier ;
153
	}
12 aperonnet 154
 
36 aperonnet 155
	/**
156
	 * Renvoie le chemin et nom du fichier grand format
157
	 * @return le chemin du fichier grand format
158
	 */
43 aperonnet 159
	public String getLUrl() {
12 aperonnet 160
 
43 aperonnet 161
		String[] infosFichier = getBaseFileName() ;
162
 
163
		return getBaseUrl()+infosFichier[1]+"/"+infosFichier[2]+"/L/"+infosFichier[0]+"_L.jpg" ;
4 aperonnet 164
	}
12 aperonnet 165
 
36 aperonnet 166
	/**
167
	 * Renvoie le chemin et nom du fichier petit format
168
	 * @return le chemin du fichier petit format
169
	 */
12 aperonnet 170
	public String getSUrl() {
171
 
43 aperonnet 172
		String[] infosFichier = getBaseFileName() ;
173
 
174
		return getBaseUrl()+infosFichier[1]+"/"+infosFichier[2]+"/S/"+infosFichier[0]+"_S.jpg" ;
12 aperonnet 175
	}
176
 
36 aperonnet 177
	/**
178
	 * Renvoie le chemin et nom du fichier moyen format
179
	 * @return le chemin du fichier moyen format
180
	 */
12 aperonnet 181
	public String getMUrl() {
182
 
43 aperonnet 183
		String[] infosFichier = getBaseFileName() ;
184
 
185
		return getBaseUrl()+infosFichier[1]+"/"+infosFichier[2]+"/M/"+infosFichier[0]+"_M.jpg" ;
12 aperonnet 186
	}
187
 
36 aperonnet 188
	/**
189
	 * Renvoie la taille de l'image
190
	 * @return un tableau de deux string contenant la hauteur puis la largeur
191
	 */
192
	public String[] getTailleImage()
193
	{
194
		String[] XY = { renvoyerValeurCorrecte("ci_meta_height") , renvoyerValeurCorrecte("ci_meta_width") } ;
195
		return XY ;
196
	}
197
 
46 aperonnet 198
	public String[] getNote()
199
	{
200
		String[] note = {renvoyerValeurCorrecte("ci_note_image") } ;
201
		return note ;
202
	}
203
 
36 aperonnet 204
	/**
205
	 * Renvoie la date exif associée à l'image
206
	 * @return la date associée à l'image
207
	 */
12 aperonnet 208
	public String getDate() {
209
 
210
		return renvoyerValeurCorrecte("ci_meta_date_time") ;
4 aperonnet 211
	}
212
 
36 aperonnet 213
	/**
214
	 * Renvoie la ville associée à l'image
215
	 * @return la ville iptc
216
	 */
12 aperonnet 217
	public Object getIptcCity() {
218
 
219
		return renvoyerValeurCorrecte("ci_meta_iptc_city") ;
4 aperonnet 220
	}
221
 
36 aperonnet 222
	/**
223
	 * Renvoie le fabricant de l'appareil
224
	 * @return le fabricant
225
	 */
12 aperonnet 226
	public String getMake() {
227
 
228
		return renvoyerValeurCorrecte("ci_meta_make") ;
229
	}
230
 
36 aperonnet 231
	/**
232
	 * Renvoie le modele de l'appareil
233
	 * @return le modele
234
	 */
12 aperonnet 235
	public String getModel() {
236
 
237
		return renvoyerValeurCorrecte("ci_meta_model") ;
238
	}
16 aperonnet 239
 
36 aperonnet 240
	/**
241
	 * Renvoie un tableau nom / valeur de toutes les metadonnées Iptc
242
	 * @return les métadonnées iptc
243
	 */
16 aperonnet 244
	public String[][] getMetadonnesIptc() {
245
 
48 aperonnet 246
		String[][] metaIptc = new String[14][2] ;
16 aperonnet 247
		int elem = 0 ;
248
 
249
		for (Iterator it = this.keySet().iterator(); it.hasNext();)
250
		{
251
 
252
			String key = (String)it.next();
253
 
254
				// on filtre le "ci"
255
				String type[] = key.split("_",3) ;
256
 
257
 
258
				// si c'est une metadonnee exif ou iptc
259
				if(type[1].equals("meta"))
260
				{
261
					String[] genre =  type[2].split("_",2) ;
262
					if(genre[0].equals("iptc"))
263
					{
264
						String nom = genre[1] ;
265
						metaIptc[elem][0] = nom ;
266
						metaIptc[elem][1] = renvoyerValeurCorrecte(key) ;
267
						elem++ ;
268
					}
269
 
270
				}
271
 
272
		}
273
 
274
		return metaIptc ;
275
	}
276
 
36 aperonnet 277
	/**
278
	 * Renvoie un tableau nom / valeur de toutes les metadonnées Exif
279
	 * @return les métadonnées Exif
280
	 */
281
	public String[][] getMetadonnesExif() {
48 aperonnet 282
 
16 aperonnet 283
		String[][] metaExif = new String[31][2] ;
284
		int elem = 0 ;
285
 
286
		for (Iterator it = this.keySet().iterator(); it.hasNext();)
287
		{
288
 
289
			String key = (String)it.next();
290
 
291
				// on filtre le "ci"
292
				String type[] = key.split("_",3) ;
293
 
294
 
295
				// si c'est une metadonnee exif ou iptc
296
				if(type[1].equals("meta"))
297
				{
298
					String[] genre =  type[2].split("_",2) ;
299
					if(genre[0].equals("exif"))
300
					{
301
						String nom = genre[1] ;
302
						metaExif[elem][0] = nom ;
303
						metaExif[elem][1] = renvoyerValeurCorrecte(key) ;
304
						elem++ ;
305
					}
306
 
307
				}
308
 
309
		}
310
 
311
		return metaExif ;
312
 
313
	}
18 aperonnet 314
 
36 aperonnet 315
	/**
316
	 * Renvoie un tableau nom / valeur contenant les infos générales
317
	 * @return les infos générales
318
	 */
319
	public String[][] getInfoGenerales() {
18 aperonnet 320
 
321
		String[][] metaGen = new String[2][2] ;
322
 
323
		metaGen[0][0] = "ci_meta_comment" ;
324
		metaGen[0][1] = (String)this.get("ci_meta_comment") ;
325
 
326
		metaGen[1][0] = "ci_meta_date" ;
327
		metaGen[1][1] = (String)this.get("ci_meta_date") ;
328
 
329
		return metaGen ;
330
	}
331
 
36 aperonnet 332
	/**
333
	 * Renvoie une string contenant les mots clés séparés par des ','
334
	 * @return les mots clés
335
	 */
27 aperonnet 336
	public String getMotsCles() {
337
 
338
		return renvoyerValeurCorrecte("ci_meta_mots_cles") ;
339
	}
340
 
36 aperonnet 341
	/**
342
	 * Met à jour le commenentaire et la date
343
	 * @param commentaires le nouveau commentaire
344
	 * @param date la nouvelle date
345
	 */
46 aperonnet 346
	public void miseAJourInfoGenerales(String commentaires, String date, String note)
18 aperonnet 347
	{
348
			put("ci_meta_comment",commentaires) ;
46 aperonnet 349
			put("ci_note_image",note) ;
18 aperonnet 350
			put("ci_meta_date",date) ;
351
	}
36 aperonnet 352
 
353
	/**
354
	 * Met à jour les mots clés
355
	 * @param motsClesEnCours la liste de mots clés séparés par des ','
356
	 */
27 aperonnet 357
	public void mettreAjourMotsCles(String motsClesEnCours) {
358
 
359
		put("ci_meta_mots_cles",motsClesEnCours) ;
360
 
361
	}
46 aperonnet 362
 
4 aperonnet 363
}