Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.vues.publication;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.modeles.publication.Publication;
import org.tela_botanica.client.modeles.publication.PublicationAsyncDao;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.Html;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
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.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.ui.Button;
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.SubmitEvent;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.VerticalPanel;

public abstract class PublicationImportForm extends LayoutContainer {

        private Mediateur mediateurCourant = null;

        public PublicationImportForm(Mediateur mediateurCourant) {
                this.mediateurCourant= mediateurCourant; 
                                                
            final FormPanel form = new FormPanel();
            form.setAction(PublicationAsyncDao.getUrlImport());

            form.setEncoding(FormPanel.ENCODING_MULTIPART);
            form.setMethod(FormPanel.METHOD_POST);
                    
            VerticalPanel panel = new VerticalPanel();
            form.setWidget(panel);

            FileUpload upload = new FileUpload();
            upload.setName("import_publication");
            panel.add(upload);
            
            Hidden typeUpload = new Hidden("type", "publication");
            Hidden utilisateur = new Hidden("ce_utilisateur", ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId());
            
            panel.add(typeUpload);
            panel.add(utilisateur);

            HorizontalPanel boutonsPanel = new HorizontalPanel();
           
            boutonsPanel.add(new Button(Mediateur.i18nC.importer(), new ClickHandler() {
              public void onClick(ClickEvent event) {
                form.submit();
              }
            }));
            
            boutonsPanel.add(new Button(Mediateur.i18nC.annuler(), new ClickHandler() {
              public void onClick(ClickEvent event) {
                  surClicAnnuler();
              }
            }));

            form.addSubmitHandler(new FormPanel.SubmitHandler() {
                        @Override
                        public void onSubmit(SubmitEvent event) {
                                surSoumissionFormulaire(event);
                        }
            });
            
            form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
                        @Override
                        public void onSubmitComplete(SubmitCompleteEvent event) {
                                String resultat = event.getResults();
                                // Le formulaire est envoyé à travers un iframe caché, ce qui pose problème
                                // à certains navigateurs pour lire le retour
                                // si rien n'est renvoyé, on demande les stats d'upload au service par une autre requête
                                if(resultat == null || resultat.isEmpty()) {
                                        PublicationAsyncDao.demanderStatistiquesDernierImport(new Callback<JSONValue, String>() {
                                                
                                                @Override
                                                public void onSuccess(JSONValue result) {
                                                        surFormulaireEnvoye(result);
                                                }
                                                
                                                @Override
                                                public void onFailure(String reason) {
                                                        // TODO Auto-generated method stub      
                                                }
                                        });
                                } else {
                                        JSONValue responseValue = JSONParser.parseStrict(resultat);
                                        surFormulaireEnvoye(responseValue);
                                }
                        }
            });
            
            Html indicationImportForm = new Html("<div id=\"indication_import_csv\"><a target=\"_blank\" href=\"documents/import_publications.csv\">"+Mediateur.i18nC.telechargerModeleImportPubli()+"</a><br />");
            
            add(indicationImportForm);
            add(form);
            add(boutonsPanel);
        }
        
        public abstract void surSoumissionFormulaire(SubmitEvent event);
        public abstract void surFormulaireEnvoye(JSONValue reponse);
        public abstract void surClicAnnuler();
}