Subversion Repositories eFlore/Applications.cel

Rev

Rev 2671 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
437 aurelien 1
package org.tela_botanica.client.vues.observation;
2
 
2657 aurelien 3
import java.util.Iterator;
4
import java.util.Map;
5
 
2755 aurelien 6
import org.tela_botanica.client.i18n.I18n;
2630 mathias 7
import org.tela_botanica.client.i18n.Msg;
2755 aurelien 8
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
989 aurelien 10
import org.tela_botanica.client.modeles.objets.Configuration;
2755 aurelien 11
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
1323 aurelien 12
import org.tela_botanica.client.modeles.objets.Utilisateur;
437 aurelien 13
import org.tela_botanica.client.observation.ObservationMediateur;
2657 aurelien 14
import org.tela_botanica.client.util.Util;
2630 mathias 15
 
2668 aurelien 16
import com.google.gwt.core.client.Callback;
2755 aurelien 17
import com.google.gwt.event.dom.client.ClickEvent;
18
import com.google.gwt.event.dom.client.ClickHandler;
437 aurelien 19
import com.google.gwt.user.client.ui.FileUpload;
20
import com.google.gwt.user.client.ui.FormPanel;
21
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
22
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
23
import com.google.gwt.user.client.ui.HTML;
1292 aurelien 24
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
481 david 25
import com.google.gwt.user.client.ui.Hidden;
2755 aurelien 26
import com.google.gwt.user.client.ui.HorizontalPanel;
27
import com.google.gwt.user.client.ui.ListBox;
437 aurelien 28
import com.google.gwt.user.client.ui.VerticalPanel;
2755 aurelien 29
import com.google.gwt.user.client.ui.Widget;
437 aurelien 30
import com.gwtext.client.core.EventObject;
31
import com.gwtext.client.widgets.Button;
32
import com.gwtext.client.widgets.Window;
33
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
34
 
2755 aurelien 35
public class FormulaireImportObservationVue implements Rafraichissable {
437 aurelien 36
 
37
	private ObservationMediateur oMediateur = null;
481 david 38
	private  Window nPan = null;
39
	private Hidden identifiant = null;
437 aurelien 40
 
2755 aurelien 41
	private static ListeGroupesChampsEtendus cacheGroupes;
42
	ListBox listeGroupeChampsEtendus;
481 david 43
 
437 aurelien 44
	public FormulaireImportObservationVue(ObservationMediateur om) {
481 david 45
 
437 aurelien 46
		this.oMediateur = om;
481 david 47
 
2630 mathias 48
		nPan = new Window(Msg.get("import-observations"));
481 david 49
		identifiant = new Hidden();
1323 aurelien 50
		identifiant.setName("utilisateur");
51
		identifiant.setValue(Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());
437 aurelien 52
 
53
		final FormPanel form = new FormPanel();
2630 mathias 54
		final Button boutonValidation = new Button(Msg.get("envoyer"));
481 david 55
 
437 aurelien 56
		form.setEncoding(FormPanel.ENCODING_MULTIPART);
57
		form.setMethod(FormPanel.METHOD_POST);
2755 aurelien 58
		form.setWidth("450px");
59
		nPan.setWidth("450px");
437 aurelien 60
 
61
		VerticalPanel holder = new VerticalPanel();
62
 
63
		FileUpload upload = new FileUpload();
64
		upload.setName("upload");
65
		holder.add(upload);
66
		holder.add(boutonValidation);
481 david 67
		holder.add(identifiant);
454 aurelien 68
 
2755 aurelien 69
		listeGroupeChampsEtendus = new ListBox();
70
		listeGroupeChampsEtendus.addStyleName("liste_projets_import");
71
 
72
		if(cacheGroupes == null) {
73
			ListeReferentielChampsEtendusDAO lrceDao = new ListeReferentielChampsEtendusDAO(null);
74
			lrceDao.obtenirGroupesChampsEtendus(this);
75
		} else {
76
			this.rafraichir(cacheGroupes, false);
77
		}
78
 
79
		HTML lienVersDocumentModele = new HTML("<a href=\"#\">" + Msg.get("telecharger-modele") + "</a>");
80
		lienVersDocumentModele.addClickHandler(new ClickHandler() {
81
			@Override
82
			public void onClick(ClickEvent event) {
83
				String groupeimport = listeGroupeChampsEtendus.getValue(listeGroupeChampsEtendus.getSelectedIndex());
84
				String urlTplImport = Configuration.getServiceBaseUrl() + "/ImportXLS/template?groupe="+groupeimport;
85
				com.google.gwt.user.client.Window.open(urlTplImport, "", "");
86
			}
87
		});
88
 
89
		HorizontalPanel holHoriz = new HorizontalPanel();
90
		holHoriz.add(lienVersDocumentModele);
91
		holHoriz.add(listeGroupeChampsEtendus);
92
		holder.add(holHoriz);
2668 aurelien 93
		holder.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
437 aurelien 94
		boutonValidation.addListener(new ButtonListenerAdapter() {
95
 
1292 aurelien 96
			@Override
437 aurelien 97
			public void onClick(Button button, EventObject e) {
98
				form.submit();
99
			}
100
		});
101
 
102
		form.add(holder);
103
 
104
		nPan.add(form);
1672 aurelien 105
		form.setAction(Configuration.getServiceBaseUrl() + "/ImportXLS");
437 aurelien 106
 
2668 aurelien 107
		form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
1292 aurelien 108
			@Override
437 aurelien 109
			public void onSubmitComplete(SubmitCompleteEvent event) {
2668 aurelien 110
				// Certains client ne savent pas lire le retour d'upload correctement
111
				// notamment à cause des requêtes CORS, donc en cas de problème on
112
				// appelle manuellement les stats d'upload en lecture
113
				if(event.getResults() != null) {
114
					try {
115
						Map<String, String> retourImport = Util.parserRetourImportObs(event.getResults());
116
						surRetourImport(retourImport);
117
					} catch (Exception e) {
118
						demanderStatsUpload();
119
					}
120
				} else {
121
					demanderStatsUpload();
2657 aurelien 122
				}
437 aurelien 123
			}
124
		});
481 david 125
	}
126
 
2668 aurelien 127
	private void demanderStatsUpload() {
128
		Util.envoyerRequeteStatsUpload(new Callback<String, String>() {
129
			@Override
130
			public void onSuccess(String resultats) {
131
				Map<String, String> retourImport = Util.parserRetourImportObs(resultats);
132
				surRetourImport(retourImport);
133
			}
134
 
135
			@Override
136
			public void onFailure(String reason) {
137
				// TODO: rien à faire, si la requête échoue c'est que le serveur
138
				// ne répond pas et donc on a déjà eu des problèmes en amont
139
			}
140
		});
141
	}
142
 
143
	private void surRetourImport(Map<String, String> retourImport) {
144
		String message = "";
145
		for (Iterator<String> iterator = retourImport.keySet().iterator(); iterator
146
				.hasNext();) {
147
			String indexRapport = iterator.next();
148
			// on ne met pas de "-" dans les clés json, mais par contre nos clé i18n
149
			// sont séparées par des tirets, donc on remplace
150
			String cleI18n = indexRapport.replace("_", "-");
151
			String[] StrParams = {retourImport.get(indexRapport).replace("\"", "")};
152
			message += Msg.get(cleI18n, StrParams)+"\n";
153
		}
154
		com.google.gwt.user.client.Window.alert(message);
155
		nPan.close();
156
		oMediateur.obtenirDernierePageObservation();
157
	}
158
 
481 david 159
	public void afficher() {
437 aurelien 160
		nPan.show();
161
	}
2755 aurelien 162
 
163
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
164
		if(nouvelleDonnees instanceof ListeGroupesChampsEtendus) {
165
			cacheGroupes  = (ListeGroupesChampsEtendus)nouvelleDonnees;
166
			listeGroupeChampsEtendus.addItem(Msg.get("import-standard"), "");
167
			for (Iterator<String> iterator = cacheGroupes.getCorrespondancesCorrespondancesIdsNomsGroupes().keySet().iterator(); iterator.hasNext();) {
168
				String cleGroupe = iterator.next();
169
				String[] strParams = {cleGroupe};
170
				listeGroupeChampsEtendus.addItem(Msg.get("import-champs-projets", strParams), cleGroupe);
171
			}
172
		}
173
	}
437 aurelien 174
}