Subversion Repositories eFlore/Applications.cel

Rev

Rev 211 | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.client.modeles;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import com.google.gwt.json.client.JSONObject;

/**
 * 
 * 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 hachage
                Set<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'ajoute
                        String key = iterator.next();
                        if (image.get(key).isString() != null) {
                                String valeur = image.get(key).isString().stringValue();
                                this.put(key, valeur);
                        } else {
                                // sinon on ajoute la clé avec une valeur vide
                                String valeur = " ";
                                this.put(key, valeur);
                        }

                }

        }

        /**
         * Surcharge de toString qui affiche toutes les propriétés de l'image
         */

        public 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("ci_id_image");
        }

        /**
         * Acesseur pour le numero d'ordre de l'image
         * 
         * @return l'ordre de l'image
         */
        public String getOrdre() {

                return renvoyerValeurCorrecte("ci_ordre");
        }

        /**
         * Base de l'url serveur pour les images
         * 
         * @return url racine pour les images
         */
        public String getBaseUrl() {
                return Configuration.getImageBaseUrl() ;
        }

        /**
         * 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[] getBaseFileName() {
                String id = getId();

                int maxZeros = 9 - id.length();

                for (int i = 0; i < maxZeros; i++) {
                        id = "0" + id;
                }

                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;
        }

        /**
         * Renvoie le chemin et nom du fichier grand format
         * 
         * @return le chemin du fichier grand format
         */
        public String getLUrl() {

                String[] infosFichier = getBaseFileName();

                return getBaseUrl() + infosFichier[1] + "/" + infosFichier[2] + "/L/"
                                + infosFichier[0] + "_L.jpg";
        }

        /**
         * Renvoie le chemin et nom du fichier petit format
         * 
         * @return le chemin du fichier petit format
         */
        public String getSUrl() {

                String[] infosFichier = getBaseFileName();

                return getBaseUrl() + infosFichier[1] + "/" + infosFichier[2] + "/S/"
                                + infosFichier[0] + "_S.jpg";
        }

        /**
         * Renvoie le chemin et nom du fichier moyen format
         * 
         * @return le chemin du fichier moyen format
         */
        public String getMUrl() {

                String[] infosFichier = getBaseFileName();

                return getBaseUrl() + infosFichier[1] + "/" + infosFichier[2] + "/M/"
                                + infosFichier[0] + "_M.jpg";
        }

        /**
         * Renvoie la taille de l'image
         * 
         * @return un tableau de deux string contenant la hauteur puis la largeur
         */
        public String[] getTailleImage() {
                String[] XY = { renvoyerValeurCorrecte("ci_meta_height"),
                                renvoyerValeurCorrecte("ci_meta_width") };
                return XY;
        }

        public String[] getNote() {
                String[] note = { renvoyerValeurCorrecte("ci_note_image") };
                return note;
        }

        /**
         * Renvoie la date exif associée à l'image
         * 
         * @return la date associée à l'image
         */
        public String getDate() {

                if(renvoyerValeurCorrecte("ci_meta_date").equals("00/00/0000"))
                {
                        return "" ;
                }
                return renvoyerValeurCorrecte("ci_meta_date");
        }

        /**
         * Renvoie la ville associée à l'image
         * 
         * @return la ville iptc
         */
        public Object getIptcCity() {

                return renvoyerValeurCorrecte("ci_meta_iptc_city");
        }

        /**
         * Renvoie le fabricant de l'appareil
         * 
         * @return le fabricant
         */
        public String getMake() {

                return renvoyerValeurCorrecte("ci_meta_make");
        }

        /**
         * Renvoie le modele de l'appareil
         * 
         * @return le modele
         */
        public String getModel() {

                return renvoyerValeurCorrecte("ci_meta_model");
        }

        /**
         * Renvoie un tableau nom / valeur de toutes les metadonnées Iptc
         * 
         * @return les métadonnées iptc
         */
        public String[][] getMetadonnesIptc() {

                String[][] metaIptc = new String[14][2];
                int elem = 0;

                for (Iterator<String> it = this.keySet().iterator(); it.hasNext();) {

                        String key = it.next();

                        // on filtre le "ci"
                        String type[] = key.split("_", 3);

                        // si c'est une metadonnee exif ou iptc
                        if (type[1].equals("meta")) {
                                String[] genre = type[2].split("_", 2);
                                if (genre[0].equals("iptc")) {
                                        String nom = genre[1];
                                        metaIptc[elem][0] = nom;
                                        metaIptc[elem][1] = renvoyerValeurCorrecte(key);
                                        elem++;
                                }

                        }

                }

                return metaIptc;
        }

        /**
         * Renvoie un tableau nom / valeur de toutes les metadonnées Exif
         * 
         * @return les métadonnées Exif
         */
        public String[][] getMetadonnesExif() {

                String[][] metaExif = new String[31][2];
                int elem = 0;

                for (Iterator<String> it = this.keySet().iterator(); it.hasNext();) {

                        String key = it.next();

                        // on filtre le "ci"
                        String type[] = key.split("_", 3);

                        // si c'est une metadonnee exif ou iptc
                        if (type[1].equals("meta")) {
                                String[] genre = type[2].split("_", 2);
                                if (genre[0].equals("exif")) {
                                        String nom = genre[1];
                                        metaExif[elem][0] = nom;
                                        metaExif[elem][1] = renvoyerValeurCorrecte(key);
                                        elem++;
                                }

                        }

                }

                return metaExif;

        }

        /**
         * 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] = "ci_meta_comment";
                metaGen[0][1] = this.renvoyerValeurCorrecte("ci_meta_comment");

                metaGen[1][0] = "ci_meta_date";
                metaGen[1][1] = this.renvoyerValeurCorrecte("ci_meta_date");

                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("ci_meta_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("ci_meta_comment", commentaires);
                put("ci_note_image", note);
                put("ci_meta_date", 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("ci_meta_mots_cles", motsClesEnCours);

        }
        
        public void mettreAjourObsAssociees(String idsObsAssociees) {
                put("ci_ce_observation", idsObsAssociees);
        }
        
        /**
         * Accesseur pour le nom original
         * 
         * @return le nom orginal de l'image
         */
        public String getNomOriginal() {
                return renvoyerValeurCorrecte("ci_nom_original");
        }
        
        public String getIdsObsAssociees() {
                return renvoyerValeurCorrecte("ci_ce_observation");
        }

}