Subversion Repositories eFlore/Applications.cel

Rev

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

package org.tela_botanica.client.vues.observation;

import java.util.Iterator;
import java.util.Map;

import org.tela_botanica.client.i18n.I18n;
import org.tela_botanica.client.i18n.Msg;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
import org.tela_botanica.client.modeles.objets.Utilisateur;
import org.tela_botanica.client.observation.ObservationMediateur;
import org.tela_botanica.client.util.Util;

import com.google.gwt.core.client.Callback;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;

public class FormulaireImportObservationVue implements Rafraichissable {
        
        private ObservationMediateur oMediateur = null;
        private  Window nPan = null;
        private Hidden identifiant = null;
        
        private static ListeGroupesChampsEtendus cacheGroupes;
        ListBox listeGroupeChampsEtendus;
        
        public FormulaireImportObservationVue(ObservationMediateur om) {
        
                this.oMediateur = om;

                nPan = new Window(Msg.get("import-observations"));
                identifiant = new Hidden();
                identifiant.setName("utilisateur");
                identifiant.setValue(Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());
                
                final FormPanel form = new FormPanel();
                final Button boutonValidation = new Button(Msg.get("envoyer"));
                
                form.setEncoding(FormPanel.ENCODING_MULTIPART);
                form.setMethod(FormPanel.METHOD_POST);
                form.setWidth("450px");
                nPan.setWidth("450px");

                VerticalPanel holder = new VerticalPanel();

                FileUpload upload = new FileUpload();
                upload.setName("upload");
                holder.add(upload);
                holder.add(boutonValidation);
                holder.add(identifiant);
                
                listeGroupeChampsEtendus = new ListBox();
                listeGroupeChampsEtendus.addStyleName("liste_projets_import");
                
                if(cacheGroupes == null) {
                        ListeReferentielChampsEtendusDAO lrceDao = new ListeReferentielChampsEtendusDAO(null);
                        lrceDao.obtenirGroupesChampsEtendus(this);
                } else {
                        this.rafraichir(cacheGroupes, false);
                }
                
                HTML lienVersDocumentModele = new HTML("<a href=\"#\">" + Msg.get("telecharger-modele") + "</a>");
                lienVersDocumentModele.addClickHandler(new ClickHandler() {                     
                        @Override
                        public void onClick(ClickEvent event) {
                                String groupeimport = listeGroupeChampsEtendus.getValue(listeGroupeChampsEtendus.getSelectedIndex());
                                String urlTplImport = Configuration.getServiceBaseUrl() + "/ImportXLS/template?groupe="+groupeimport;
                                com.google.gwt.user.client.Window.open(urlTplImport, "", "");
                        }
                });
                
                HorizontalPanel holHoriz = new HorizontalPanel();
                holHoriz.add(lienVersDocumentModele);
                holHoriz.add(listeGroupeChampsEtendus);
                holder.add(holHoriz);
                holder.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);      
                boutonValidation.addListener(new ButtonListenerAdapter() {
                                                
                        @Override
                        public void onClick(Button button, EventObject e) {
                                form.submit();
                        }
                });

                form.add(holder);
                
                nPan.add(form);
                form.setAction(Configuration.getServiceBaseUrl() + "/ImportXLS");
                
                form.addSubmitCompleteHandler(new SubmitCompleteHandler() {     
                        @Override
                        public void onSubmitComplete(SubmitCompleteEvent event) {
                                // Certains client ne savent pas lire le retour d'upload correctement
                                // notamment à cause des requêtes CORS, donc en cas de problème on 
                                // appelle manuellement les stats d'upload en lecture
                                if(event.getResults() != null) {
                                        try {
                                                Map<String, String> retourImport = Util.parserRetourImportObs(event.getResults());
                                                surRetourImport(retourImport);
                                        } catch (Exception e) {
                                                demanderStatsUpload();
                                        }
                                } else {
                                        demanderStatsUpload();
                                }
                        }
                });
        }
        
        private void demanderStatsUpload() {
                Util.envoyerRequeteStatsUpload(new Callback<String, String>() { 
                        @Override
                        public void onSuccess(String resultats) {
                                Map<String, String> retourImport = Util.parserRetourImportObs(resultats);
                                surRetourImport(retourImport);
                        }
                        
                        @Override
                        public void onFailure(String reason) {
                                // TODO: rien à faire, si la requête échoue c'est que le serveur
                                // ne répond pas et donc on a déjà eu des problèmes en amont
                        }
                });
        }
        
        private void surRetourImport(Map<String, String> retourImport) {
                String message = "";
                for (Iterator<String> iterator = retourImport.keySet().iterator(); iterator
                                .hasNext();) {
                        String indexRapport = iterator.next();
                        // on ne met pas de "-" dans les clés json, mais par contre nos clé i18n
                        // sont séparées par des tirets, donc on remplace
                        String cleI18n = indexRapport.replace("_", "-");
                        String[] StrParams = {retourImport.get(indexRapport).replace("\"", "")};
                        message += Msg.get(cleI18n, StrParams)+"\n";
                }
                com.google.gwt.user.client.Window.alert(message);       
                nPan.close();
                oMediateur.obtenirDernierePageObservation();
        }
        
        public void afficher() {
                nPan.show();
        }
        
        public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {                     
                if(nouvelleDonnees instanceof ListeGroupesChampsEtendus) {
                        cacheGroupes  = (ListeGroupesChampsEtendus)nouvelleDonnees;
                        listeGroupeChampsEtendus.addItem(Msg.get("import-standard"), "");
                        for (Iterator<String> iterator = cacheGroupes.getCorrespondancesCorrespondancesIdsNomsGroupes().keySet().iterator(); iterator.hasNext();) {
                                String cleGroupe = iterator.next();
                                String[] strParams = {cleGroupe};
                                listeGroupeChampsEtendus.addItem(Msg.get("import-champs-projets", strParams), cleGroupe);
                        }
                }
        }
}