Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

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