Subversion Repositories eFlore/Applications.cel

Rev

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