Subversion Repositories eFlore/Applications.cel

Rev

Rev 2668 | Go to most recent revision | 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.Msg;
import org.tela_botanica.client.modeles.objets.Configuration;
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.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.VerticalPanel;
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 {
        
        private ObservationMediateur oMediateur = null;
        private  Window nPan = null;
        private Hidden identifiant = null;
        
        
        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("275px");
                nPan.setWidth("275px");

                VerticalPanel holder = new VerticalPanel();

                FileUpload upload = new FileUpload();
                upload.setName("upload");
                holder.add(upload);
                holder.add(boutonValidation);
                holder.add(identifiant);
                
                HTML lienVersDocumentModele = new HTML("<a href=\"modele_import.xls\">" + Msg.get("telecharger-modele") + "</a>");
                holder.add(lienVersDocumentModele);
                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();
        }
}