Subversion Repositories eFlore/Applications.cel

Rev

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