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