Subversion Repositories eFlore/Applications.del

Rev

Rev 1175 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.composants.preferences;

import java.util.HashMap;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences;
import org.tela_botanica.del.client.services.rest.PreferencesService;
import org.tela_botanica.del.client.services.rest.async.ListePreferencesCallback;
import org.tela_botanica.del.client.services.rest.async.ModificationPreferencesCallback;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;

public class PreferencesPresenteur extends Presenteur {
        
        private Vue vue;
        private PreferencesService preferencesService;
        private HashMap<String, String> preferences = null;
        
        public interface Vue extends IsWidget {
                public void afficherMessageChargement();
                public void cacherMessageChargement();
                public String getValeurRecevoirMailsMesObs();
                public String getValeurRecevoirMailsMesCom();
                public String getValeurRecevoirMailsToutesObs();
                public void setValeurRecevoirMailsMesObs(boolean valeur);
                public void setValeurRecevoirMailsMesCom(boolean valeur);
                public void setValeurRecevoirMailsToutesObs(boolean valeur);
                public HasClickHandlers getBoutonSauvegarder();
        }
        
        public PreferencesPresenteur(Vue vue, PreferencesService preferencesService) {
                this.vue = vue;
                this.preferencesService = preferencesService;
                gererEvenements();
        }

        @Override
        public void go(HasWidgets composite) {
                preferences = CacheClient.getInstance().getUtilisateur().getPreferences();
                if (preferences == null) {
                        preferencesService.chargerPreferences(CacheClient.getInstance().getUtilisateur(), new ListePreferencesCallback() {                      
                                @Override
                                public void surRetour(java.util.HashMap<String, String> objetRetour) {
                                        preferences = objetRetour;
                                        CacheClient.getInstance().getUtilisateur().setPreferences(objetRetour);
                                        affecterValeursChamps(preferences);
                                        vue.cacherMessageChargement();
                                }
                        });
                } else {
                        vue.cacherMessageChargement();
                        affecterValeursChamps(preferences);
                }
                composite.add(vue.asWidget());
        }
        
        private void affecterValeursChamps(HashMap<String, String> preferences) {
                vue.setValeurRecevoirMailsMesObs(getPreferenceBool(preferences.get("mail_notification_mes_obs")));
                vue.setValeurRecevoirMailsMesCom(getPreferenceBool(preferences.get("mail_notification_mes_com")));
                vue.setValeurRecevoirMailsToutesObs(getPreferenceBool(preferences.get("mail_notification_toutes_obs")));
        }
        
        private boolean getPreferenceBool(String valeur) {
                return (valeur.equals("1")) ? true : false;
        }

        @Override
        protected void gererEvenements() {
                vue.getBoutonSauvegarder().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                vue.afficherMessageChargement();
                                preferences.put("mail_notification_mes_obs", vue.getValeurRecevoirMailsMesObs());
                                preferences.put("mail_notification_mes_com", vue.getValeurRecevoirMailsMesCom());
                                preferences.put("mail_notification_toutes_obs", vue.getValeurRecevoirMailsToutesObs());
                                preferencesService.modifierPreferences(CacheClient.getInstance().getUtilisateur(), preferences, new ModificationPreferencesCallback() {
                                        @Override
                                        public void surRetour(String objetRetour) {
                                                vue.cacherMessageChargement();
                                                BusEvenementiel.getInstance().fireEvent(new EvenementChangementPreferences());
                                        }
                                });
                        }
                });
        }
}