Rev 1315 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.modeles.objets;import java.util.HashMap;import java.util.Iterator;import java.util.Set;import org.tela_botanica.client.i18n.VocabulaireMetadonnees;import org.tela_botanica.client.util.Util;import com.google.gwt.json.client.JSONObject;import com.google.gwt.xml.client.Document;import com.google.gwt.xml.client.Node;import com.google.gwt.xml.client.NodeList;import com.google.gwt.xml.client.Text;import com.google.gwt.xml.client.XMLParser;import com.google.gwt.xml.client.impl.DOMParseException;/**** Classe representant une image du carnet, elle ne contient pas d'image à* proprement parler mais plutôt les informations associées ainsi que l'url* distante. C'est une table de hachage qui contient des paires propriété/valeur**/public class ImageCarnet extends HashMap<String, String> {/****/private static final long serialVersionUID = -6220175386957259859L;/*** Constructeur avec un objet JSON** @param image*/public ImageCarnet(JSONObject image) {// l'objet JSON est une table de hachageSet<String> im = image.keySet();// on la parcourt pour chaque cléfor (Iterator<String> iterator = im.iterator(); iterator.hasNext();) {// si elle est associée à une valeur, on l'ajouteString key = iterator.next();if (Util.jsonNonNull(image, key)) {String valeur = image.get(key).isString().stringValue();this.put(key, valeur);} else {// sinon on ajoute la clé avec une valeur videString valeur = " ";this.put(key, valeur);}}}public ImageCarnet(String[][] image) {for (int i = 0; i < image.length; i++) {if (image[i][0] != null && image[i][1] != null) {this.put(image[i][0], image[i][1]);}}}/*** Surcharge de toString qui affiche toutes les propriétés de l'image*/@Overridepublic String toString() {String valeur = " ";for (Iterator<String> iterator = this.keySet().iterator(); iterator.hasNext();) {String key = iterator.next();if (this.get(key) != null) {valeur += "cle : " + key + " valeur :" + this.get(key) + "\n";}}return valeur;}/*** Pour éviter que l'on traite des valeurs nulles à l'affichage on passe par* cette fonction qui retire les charactères nuls qui font planter* l'affichage, il ne faut pas utiliser get directement** @param cle* @return la valeur associée à la clé*/public String renvoyerValeurCorrecte(String cle) {if (this.containsKey((cle))) {String valeur = this.get(cle);if (valeur.equals("null") || valeur == null) {return " ";} else {char nullChar = '\u0000';String sNull = "" + nullChar;valeur = valeur.replaceAll(sNull, "");return valeur;}} else {return " ";}}/*** Acesseur pour l'id de l'image** @return l'id de l'image*/public String getId() {return renvoyerValeurCorrecte("id_image");}/*** Acesseur pour le numero d'ordre de l'image** @return l'ordre de l'image*/public String getOrdre() {return renvoyerValeurCorrecte("ordre");}/*** Base de l'url serveur pour les images** @return url racine pour les images*/public String getVraieBaseUrl() {return Configuration.getImageBaseUrl() ;}/*** Base de l'url serveur pour les images** @return url racine pour les images*/public String getBaseUrlRedirect() {return Configuration.getImageRedirectUrl() ;}public String getIdAvecPadding() {String id = getId();int maxZeros = 9 - id.length();for (int i = 0; i < maxZeros; i++) {id = "0" + id;}return id;}private String getUrlFormat(String format) {String urlImage = "";if(Configuration.utiliseRedirectionImages()) {String identifiantRedirect = getIdAvecPadding()+format;urlImage = getBaseUrlRedirect()+identifiantRedirect;} else {urlImage = getVraieUrlFormat(format);}return urlImage;}/*** Renvoie le nom de base du fichier image et ses sous dossier** @return le nom de base du fichier de type (XXX_XXX_XXX), et ses sous* dossier*/public String[] getVraiCheminBaseFichier() {String id = getIdAvecPadding();String dossierNv1 = id.substring(0, 3);String dossierNv2 = id.substring(3, 6);String fichierNv = id.substring(6, 9);String nomFichier = dossierNv1 + "_" + dossierNv2 + "_" + fichierNv;String[] infosFichier = { nomFichier, dossierNv1, dossierNv2 };return infosFichier;}private String getVraieUrlFormat(String format) {String[] infosFichier = getVraiCheminBaseFichier();return getVraieBaseUrl() + infosFichier[1] + "/" + infosFichier[2] + "/"+format+"/"+ infosFichier[0] + "_"+format+".jpg";}/*** Renvoie le chemin et nom du fichier format original** @return le chemin du fichier grand original*/public String getUrlFormatOriginal() {return getUrlFormat(Configuration.getFormatOriginal());}/*** Renvoie le chemin et nom du fichier grand format** @return le chemin du fichier grand format*/public String getUrlFormatZoom() {return getUrlFormat(Configuration.getFormatZoom());}/*** Renvoie le chemin et nom du fichier petit format** @return le chemin du fichier petit format*/public String getUrlFormatGalerie() {return getUrlFormat(Configuration.getFormatGalerie());}/*** Renvoie le chemin et nom du fichier moyen format** @return le chemin du fichier moyen format*/public String getUrlFormatListe() {return getUrlFormat(Configuration.getFormatListe());}/*** Renvoie la taille de l'image** @return un tableau de deux string contenant la hauteur puis la largeur*/public String[] getTailleImage() {String[] XY = { renvoyerValeurCorrecte("hauteur"),renvoyerValeurCorrecte("largeur") };return XY;}public String[] getNote() {String[] note = { renvoyerValeurCorrecte("note_qualite") };return note;}/*** Renvoie la date exif associée à l'image** @return la date associée à l'image*/public String getDate() {if(renvoyerValeurCorrecte("date_prise_de_vue").equals("00/00/0000")){return "" ;}return renvoyerValeurCorrecte("date_prise_de_vue");}/*** Renvoie la ville associée à l'image** @return la ville iptc*/public Object getIptcCity() {return renvoyerValeurCorrecte("");}/*** Renvoie le fabricant de l'appareil** @return le fabricant*/public String getFabriquantAppareil() {return renvoyerValeurCorrecte("appareil_fabricant");}/*** Renvoie le modele de l'appareil** @return le modele*/public String getModeleAppareil() {return renvoyerValeurCorrecte("appareil_modele");}/*** Renvoie un tableau nom / valeur de toutes les metadonnées Iptc** @return les métadonnées iptc*/public String[][] getMetadonnesIptc() {return getMetadonneesXml("meta_iptc");}/*** Renvoie un tableau nom / valeur de toutes les metadonnées Exif** @return les métadonnées Exif*/public String[][] getMetadonnesExif() {return getMetadonneesXml("meta_exif");}private String[][] getMetadonneesXml(String type) {String[][] metadonnees = {{},{}};String xml = renvoyerValeurCorrecte(type);String invalidXmlPattern = "[^"+ "\\u0009\\u000A\\u000D"+ "\\u0020-\\uD7FF"+ "\\uE000-\\uFFFD"+ "\\u10000-\\u10FFFF"+ "]+";xml = xml.replaceAll(invalidXmlPattern, " ");try {Document d = XMLParser.parse(xml);if(d.hasChildNodes()) {NodeList attributs = d.getFirstChild().getChildNodes();int taille = attributs.getLength();metadonnees = new String[taille][2];for(int i = 0; i < taille; i++) {if(attributs.item(i) != null) {XMLParser.removeWhitespace(attributs.item(i));attributs.item(i).normalize();String nomMetaDonneestraduite = VocabulaireMetadonnees.getTraduction(attributs.item(i).getNodeName());metadonnees[i][0] = nomMetaDonneestraduite;if(attributs.item(i).hasChildNodes()) {Node valeur = attributs.item(i).getFirstChild();if(valeur.getNodeType() == Node.TEXT_NODE) {metadonnees[i][1] = ((Text)valeur).getData();} else {metadonnees[i][1] = "";}}}}}} catch(DOMParseException e) {}return metadonnees;}/*** Renvoie un tableau nom / valeur contenant les infos générales** @return les infos générales*/public String[][] getInfoGenerales() {String[][] metaGen = new String[2][2];metaGen[0][0] = "commentaire";metaGen[0][1] = this.renvoyerValeurCorrecte("commentaire");metaGen[1][0] = "date_prise_de_vue";metaGen[1][1] = this.renvoyerValeurCorrecte("date_prise_de_vue");return metaGen;}/*** Renvoie une string contenant les mots clés séparés par des ','** @return les mots clés*/public String getMotsCles() {return renvoyerValeurCorrecte("mots_cles");}/*** Met à jour le commenentaire et la date** @param commentaires* le nouveau commentaire* @param date* la nouvelle date*/public void miseAJourInfoGenerales(String commentaires, String date,String note) {put("commentaire", commentaires);put("note_qualite", note);put("date_prise_de_vue", date);}/*** Met à jour les mots clés** @param motsClesEnCours* la liste de mots clés séparés par des ','*/public void mettreAjourMotsCles(String motsClesEnCours) {put("mots_cles", motsClesEnCours);}public void mettreAjourObsAssociees(String idsObsAssociees) {put("id_observation", idsObsAssociees);}/*** Accesseur pour le nom original** @return le nom orginal de l'image*/public String getNomOriginal() {return renvoyerValeurCorrecte("nom_original");}public String getIdsObsAssociees() {String observationsAssociees = renvoyerValeurCorrecte("id_observation");observationsAssociees = observationsAssociees.replaceAll("null", "");return observationsAssociees;}public String[][] obtenirChampsModifiablesImage() {String[][] champs = {{"commentaire", renvoyerValeurCorrecte("commentaire")},{"note_qualite", renvoyerValeurCorrecte("note_qualite")},{"date_prise_de_vue",renvoyerValeurCorrecte("date_prise_de_vue")}};return champs;}}