Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 25 | Rev 30 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.image;

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

import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ImageAsynchroneDAO;
import org.tela_botanica.client.modeles.ImageCarnet;
import org.tela_botanica.client.modeles.ImageUploaderAsynchroneDAO;
import org.tela_botanica.client.modeles.ListeImageCarnet;
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO;
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;

import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.data.Tree;
import com.gwtext.client.widgets.tree.TreeNode;

/**
 * Modèle d'accès aux données pour les images.
 * C'est un singleton
 * @author aurelien
 *
 */
public class ImageModele implements Rafraichissable {
        
        private static boolean estInstancie = false ;
        
        private ImageMediateur iMediateur = null ;
        
        private ListeImageCarnet cacheImage = new ListeImageCarnet(0) ;
        
        private HashMap motsCles = new HashMap(0) ;
        
        private Store st = null ;
        
        private com.gwtext.client.data.Tree arbreMotsCles = null ;
        
        private String arbreAplati = "" ;
        
        static ImageModele Instance(ImageMediateur im)
        {
                if(!estInstancie)
                {
                        return new ImageModele(im);
                }
                else
                {
                        return null ;
                }
        }
        
        private ImageModele(ImageMediateur im) {
                
                iMediateur = im ;
        }
        
        public ImageMediateur getIMediateur()
        {
                return iMediateur ;
        }
        
        public void obtenirPhotoGalerie(Rafraichissable r)
        {
                ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO();
                liaDAO.ObtenirListeImages(this);                
        }
        
        public void uploaderImages()
        {
                ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO() ;
                IuADaO.setIMediateur(getIMediateur());
                IuADaO.choisirMethodeUpload() ;
        }
        
        public void rafraichirListeImage(Object o)
        {
                cacheImage = (ListeImageCarnet)o ;
        }
        
        public void rafraichirArbreMotsCles(Object o)
        {
                arbreMotsCles = (com.gwtext.client.data.Tree)o ;
        }
        
        public void rafraichirMotsCles(Object o)
        {
                motsCles = (HashMap)o ;
        }
        
        public void obtenirMetadonnees(Rafraichissable r, String id)
        {
                        
                ImageCarnet im = (ImageCarnet)cacheImage.get(id) ;
                                
                                Object meta[] = new Object[3] ;
                                meta[0] = im.getMetadonnesExif() ;
                                meta[1] = im.getMetadonnesIptc() ;
                                meta[2] = im.getInfoGenerales() ;
                                
                                r.rafraichir(meta,false) ;
        
        }
        
        public void obtenirMotsClesId(Rafraichissable r, String id)
        {
                ImageCarnet im = (ImageCarnet)cacheImage.get(id) ;
                String motsClesId = im.getMotsCles() ;
                String[] motsClesIdTab = motsClesId.split(",") ;
                
                r.rafraichir(motsClesIdTab, false) ;
        }
        
        public void mettreAJourCacheImage(String commentaires, String date, String ids[])
        {
                        for (int i = 0; i < ids.length; i++) 
                        {       
                                String key = ids[i] ;
                                ImageCarnet ic = (ImageCarnet)cacheImage.get(key) ;
                                ic.miseAJourInfoGenerales(commentaires, date) ;
                                mettreAjourBaseDeDonneesImageCarnet(ic) ;       
                        }
        }
        
        public void mettreAjourMotsClesId(String text, String id)
        {
                                 motsCles.put(id, text) ;
        }
        
        public void mettreAjourBaseDeDonneesMotsClesId()
        {
                
        }
        
        public void mettreAJourBaseDeDonneesListeImageCarnet()
        {
                ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO();
                liDaO.setIMediateur(iMediateur);
                
                liDaO.SynchroniserBaseDeDonnees(cacheImage);
        }
        
        public void mettreAjourBaseDeDonneesImageCarnet(ImageCarnet ic)
        {
                ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO();
                iaDaO.setIMediateur(iMediateur);
                iaDaO.SynchroniserBaseDeDonnees(ic) ;
        }

        public void supprimerImages(String[] ids) {
                
                String rids[] = new String[ids.length] ;
                ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO() ;
                liDao.setIMediateur(iMediateur);
                
                for (int i = 0; i < ids.length; i++) {
                        
                        
                        String key = ids[i] ;
                        ImageCarnet ic = (ImageCarnet)cacheImage.get(key) ;
                        rids[i] = ic.getId() ;
                }
                
                if(rids.length != 0)
                {
                        liDao.supprimerBaseDeDonnees(rids);
                }
                
        }

        public void rafraichir(Object nouvelleDonnees,
                        boolean repandreRafraichissement) {
                
                        ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees ;
                        Object[][] photoData = new Object[data.size()][7];
                        int i = 0 ;
                        for (Iterator it = data.keySet().iterator(); it.hasNext();) 
                        {
                                ImageCarnet im = (ImageCarnet) data.get(it.next());
                                photoData[i][0] = im.getOrdre() ;
                                photoData[i][1] = im.getDate() ;
                                photoData[i][2] = im.getIptcCity() ;
                                photoData[i][3] = im.getMake()+" "+im.getModel() ;
                                photoData[i][4] = im.getSUrl() ;
                                photoData[i][5] = im.getMUrl() ;
                                photoData[i][6] = im.getUrl() ;
                                
                                i++ ;
                        }
        
                        // creation du store
                        FieldDef defNumImage = new IntegerFieldDef("num_image");
                        FieldDef defDatImage = new StringFieldDef("dat_image");
                        FieldDef defLieImage = new StringFieldDef("lie_image");
                        FieldDef defAppImage = new StringFieldDef("app_image");
                        FieldDef defUrlImageS = new StringFieldDef("url_image_S");
                        FieldDef defUrlImageM = new StringFieldDef("url_image_M");
                        FieldDef defUrlImage = new StringFieldDef("url_image");
                        FieldDef[] defTab = {defNumImage,defDatImage,defLieImage,defAppImage,defUrlImageS,defUrlImageM,defUrlImage};
                        RecordDef rd = new RecordDef(defTab) ;
                        
                        final MemoryProxy dataProxy = new MemoryProxy(photoData);
                        final ArrayReader reader = new ArrayReader(rd);
        
                        final Store photoStore = new Store(dataProxy, reader);
                        
                        rafraichirListeImage(nouvelleDonnees);
                        
                        st = photoStore ;
                
                        if(repandreRafraichissement)
                        {
                                getIMediateur().synchroniserDonneesZoomListeGalerie(st, this) ;
                        }
                
                
        }
        
        public void afficherMotsCles()
        {
                for(Iterator it = motsCles.keySet().iterator() ; it.hasNext() ;)
                {
                        String key = (String)it.next() ;
                        String valeur = (String)motsCles.get(key) ; 
                        System.out.println("clé : "+key+" valeur : "+valeur);
                }
        }

        public void mettreAjourMotsCles(String[] ids, String motsClesEnCours, com.gwtext.client.data.Tree arbreMC) {
                
                for (int i = 0; i < ids.length; i++) {
                        
                        if(cacheImage.containsKey(ids[i]))
                        {
                                ImageCarnet ic = (ImageCarnet)cacheImage.get(ids[i]) ;
                                ic.mettreAjourMotsCles(motsClesEnCours) ;       
                        }
                }
                
                rafraichirArbreMotsCles(arbreMC) ;
        }
        

        public void ajouterMotCleDansArbre(TreeNode n, com.gwtext.client.data.Tree arbreMC) {
                
                MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
                MCDao.setIMediateur(getIMediateur()) ;
                
                String[] usObj = (String[])n.getUserObject() ;
                String motCle = usObj[0] ;
                String id = usObj[1] ;
                String parentId = ""
 ;              
                if(!id.equals("racine"))
                {
                        String[] parentUsObj = (String[])n.getParentNode().getUserObject() ;
                        parentId = parentUsObj[1] ;
                }
                else
                {
                        parentId = "racine" ;
                }
                
                rafraichirArbreMotsCles(arbreMC) ;
                
                String nouveauMotCle = "&motcle="+motCle+"&id="+id+"&parent="+parentId ;
                MCDao.ajouterBaseDeDonnees(nouveauMotCle) ;
                
        }

        public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
                
                MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
                MCDao.setIMediateur(getIMediateur()) ;
                
                String[] usObj = (String[])n.getUserObject() ;
                String motCle = usObj[0] ;
                String id = usObj[1] ;
                
                String motCleASupprimer = id ;
                
                MCDao.supprimerBaseDeDonnees(id) ;
                
        }

        public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
                
                MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
                MCDao.setIMediateur(getIMediateur()) ;
                
                String[] usObj = (String[])n.getUserObject() ;
                String motCle = usObj[0] ;
                String id = usObj[1] ;
                String parentId = ""
 ;              
                if(!id.equals("racine"))
                {
                        String[] parentUsObj = (String[])n.getParentNode().getUserObject() ;
                        parentId = parentUsObj[1] ;
                }
                else
                {
                        parentId = "racine" ;
                }
                
                rafraichirArbreMotsCles(arbreMC) ;
                
                String motCleModifie = "&motcle="+motCle+"&id="+id+"&parent="+parentId ;
                
                MCDao.modifierBaseDeDonnees(motCleModifie) ;
                
        }
        
        public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC)
        {
                MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
                MCDao.setIMediateur(getIMediateur()) ;
                
                String[] usObj = (String[])n.getUserObject() ;
                String motCle = usObj[0] ;
                String id = usObj[1] ;
                String parentId = ""
 ;              
                if(!id.equals("racine"))
                {
                        String[] parentUsObj = (String[])n.getParentNode().getUserObject() ;
                        parentId = parentUsObj[1] ;
                }
                else
                {
                        parentId = "racine" ;
                }
                
                rafraichirArbreMotsCles(arbreMC) ;
                
                String motCleModifie = "&motcle="+motCle+"&id="+id+"&parent="+parentId ;
                
                MCDao.deplacerBaseDeDonnees(motCleModifie) ;
        }
        
}