Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 46 | Blame | Compare with Previous | 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 {
        

        /**
         * Constructeur avec un objet JSON
         * @param image
         */
        public ImageCarnet(JSONObject image)
        {       
                // l'objet JSON est une table de hachage
                Set im = image.keySet() ;
                
                // on la parcourt pour chaque clé
                for (Iterator iterator = im.iterator(); iterator.hasNext();) {
                        
                        // si elle est associée à une valeur, on l'ajoute
                        String key = (String) 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 iterator = this.keySet().iterator(); iterator.hasNext();) {
                        
                        
                        String key = (String) iterator.next();
                        if(this.get(key) != null)
                        {
                                valeur += "cle : "+key+" valeur :"+(String)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 = (String)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 "http://162.38.234.9/Documents/images_serveur/" ;
        }
        
        /**
         * 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() {
                
                return renvoyerValeurCorrecte("ci_meta_date_time") ;
        }

        /**
         * 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 it = this.keySet().iterator(); it.hasNext();) 
                {
                                                
                        String key = (String)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 it = this.keySet().iterator(); it.hasNext();) 
                {
                                                
                        String key = (String)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] = (String)this.get("ci_meta_comment") ;
                
                metaGen[1][0] = "ci_meta_date" ;
                metaGen[1][1] = (String)this.get("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) ;
                
        }
        
}