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);
}
}
}
}