Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
1940 aurelien 1
package org.tela_botanica.client.util;
2
 
1967 aurelien 3
import java.util.ArrayList;
1940 aurelien 4
import java.util.HashMap;
5
import java.util.Iterator;
1967 aurelien 6
import java.util.List;
1940 aurelien 7
import java.util.Map;
8
 
2628 aurelien 9
import org.tela_botanica.client.i18n.Msg;
1940 aurelien 10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
2033 aurelien 12
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
2606 aurelien 13
import org.tela_botanica.client.modeles.objets.Utilisateur;
2602 aurelien 14
import org.tela_botanica.client.util.autocompletion.AutoCompletionComboBox;
1940 aurelien 15
 
2392 aurelien 16
import com.google.gwt.core.client.Callback;
2602 aurelien 17
import com.google.gwt.event.dom.client.ChangeEvent;
18
import com.google.gwt.event.dom.client.ChangeHandler;
19
import com.google.gwt.http.client.Response;
2641 aurelien 20
import com.google.gwt.http.client.URL;
1940 aurelien 21
import com.google.gwt.user.client.Window;
1945 aurelien 22
import com.google.gwt.user.client.ui.HTML;
1940 aurelien 23
import com.google.gwt.user.client.ui.HorizontalPanel;
2602 aurelien 24
import com.google.gwt.user.client.ui.Label;
25
import com.google.gwt.user.client.ui.ListBox;
1940 aurelien 26
import com.gwtext.client.core.EventCallback;
27
import com.gwtext.client.core.EventObject;
2392 aurelien 28
import com.gwtext.client.core.Ext;
1940 aurelien 29
import com.gwtext.client.widgets.Button;
2033 aurelien 30
import com.gwtext.client.widgets.Panel;
1940 aurelien 31
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
32
import com.gwtext.client.widgets.form.FormPanel;
2033 aurelien 33
import com.gwtext.client.widgets.layout.FormLayout;
1940 aurelien 34
 
35
@SuppressWarnings("unchecked")
36
public abstract class FormulaireSaisieChampEtendu extends FormPanel implements Rafraichissable {
37
 
2602 aurelien 38
	final AutoCompletionComboBox nChamp;
1945 aurelien 39
	Button ajouterChampsEtenduEtFermer;
40
	Button ajouterChampsEtendu;
41
	Button annulerAjouterChampEtendu;
1940 aurelien 42
	String idChamp = null;
43
 
2033 aurelien 44
	Panel conteneurGroupesChampsEtendus;
2602 aurelien 45
	Panel conteneurlabelGroupe;
46
	ListBox listeGroupeChampsEtendus;
2033 aurelien 47
	HTML indicationSaisieGroupe;
1967 aurelien 48
 
2033 aurelien 49
	private static ListeGroupesChampsEtendus cacheGroupes;
2602 aurelien 50
	private static Map<String, String> cacheLabelsCle;
2033 aurelien 51
 
2392 aurelien 52
	private HTML descriptionChamp = null;
2602 aurelien 53
    private String groupeSelectionne = null;
2392 aurelien 54
 
1940 aurelien 55
	public FormulaireSaisieChampEtendu() {
56
		super();
57
		setPaddings(3);
58
		setBodyBorder(false);
59
 
2628 aurelien 60
		indicationSaisieGroupe = new HTML(Msg.get("indication-saisie-groupe-champ-etendus"));
1967 aurelien 61
		indicationSaisieGroupe.addStyleName("aideCreerChampEtendu");
62
 
2602 aurelien 63
		conteneurlabelGroupe = new Panel();
64
		conteneurlabelGroupe.setStyleName("panneauEnLigne");
65
		conteneurlabelGroupe.addStyleName("selecteurGroupeEtendus");
66
		conteneurlabelGroupe.setBorder(false);
2628 aurelien 67
		Label labelGroupeChampsEtendus = new Label(Msg.get("ajouter-groupe-champ-etendus")+" :");
2602 aurelien 68
		listeGroupeChampsEtendus = new ListBox();
69
		listeGroupeChampsEtendus.setWidth("315px");
70
		conteneurlabelGroupe.add(labelGroupeChampsEtendus);
71
		conteneurlabelGroupe.add(listeGroupeChampsEtendus);
1967 aurelien 72
 
2033 aurelien 73
		conteneurGroupesChampsEtendus = new Panel();
74
		conteneurGroupesChampsEtendus.setBorder(false);
75
		conteneurGroupesChampsEtendus.setPaddings(0);
76
		conteneurGroupesChampsEtendus.setMargins(0);
77
		conteneurGroupesChampsEtendus.setLayout(new FormLayout());
78
		conteneurGroupesChampsEtendus.setWidth("100%");
79
 
80
		add(conteneurGroupesChampsEtendus);
81
 
82
		if(cacheGroupes == null) {
83
			ListeReferentielChampsEtendusDAO lrceDao = new ListeReferentielChampsEtendusDAO(null);
84
			lrceDao.obtenirGroupesChampsEtendus(this);
85
		} else {
86
			this.rafraichir(cacheGroupes, false);
1967 aurelien 87
		}
2628 aurelien 88
 
89
		HTML indicationSaisie = new HTML(Msg.get("indication-saisie-nom-champ-etendu"));
1945 aurelien 90
		indicationSaisie.addStyleName("aideCreerChampEtendu");
91
		add(indicationSaisie);
92
 
1940 aurelien 93
		HorizontalPanel hp = new HorizontalPanel();
94
		hp.setBorderWidth(0);
2602 aurelien 95
 
96
 
2628 aurelien 97
		nChamp = new AutoCompletionComboBox(Msg.get("nom-champ-etendu"), ListeReferentielChampsEtendusDAO.getUrlRequeteNomsChampsEtendus()) {
2602 aurelien 98
			@Override
99
			protected Map<String, String> parserResultatRequete(
100
					Response response) {
101
				Map<String, String> clesLabels = ListeReferentielChampsEtendusDAO.parserRetourListeNomsChampsEtendus(response);
102
				cacheLabelsCle = new HashMap<String, String>();
103
				for(Map.Entry<String, String> entry : clesLabels.entrySet()){
104
					cacheLabelsCle.put(entry.getValue(), entry.getKey());
105
				}
106
				return clesLabels;
107
			}
108
 
109
			@Override
110
			protected void onSelectionValeur() {
111
				telechargerEtAfficherDescriptionChamps(cacheLabelsCle.get(nChamp.getRawValue()));
112
			}
113
 
114
			@Override
115
			protected void onValidationSaisie() {
116
				// rien à faire ici
117
			}
118
 
119
			@Override
120
			protected void onModificationValeur() {
121
				// rien à faire ici non plus
122
			}
123
 
2606 aurelien 124
			@Override
125
			protected String preTraiterUrlRequete(String urlRequete, String valeur) {
2641 aurelien 126
				return urlRequete.replace("{utilisateur}", Utilisateur.getInstance().getIdentifiantUtilisateurConsulte())+URL.encodeQueryString(valeur);
2606 aurelien 127
			}
128
 
2602 aurelien 129
		};
130
 
131
		nChamp.addStyleName("panneauEnLigne");
1940 aurelien 132
		add(nChamp);
133
 
2392 aurelien 134
		descriptionChamp = new HTML();
135
		descriptionChamp.addStyleName("aideWikiChampEtendu");
136
		add(descriptionChamp);
137
 
2628 aurelien 138
		ajouterChampsEtenduEtFermer = new Button(Msg.get("ajouter-fermer"));
139
		ajouterChampsEtenduEtFermer.setTooltip(Msg.get("indication-ajouter-fermer"));
140
		ajouterChampsEtendu = new Button(Msg.get("ajouter"));
141
		ajouterChampsEtendu.setTooltip(Msg.get("indication-ajouter-champ-etendu"));
142
		annulerAjouterChampEtendu = new Button(Msg.get("fermer"));
143
		annulerAjouterChampEtendu.setTooltip(Msg.get("indication-fermer-champ-etendu"));
1940 aurelien 144
 
1945 aurelien 145
		hp.add(ajouterChampsEtenduEtFermer);
1940 aurelien 146
		hp.add(ajouterChampsEtendu);
147
		hp.add(annulerAjouterChampEtendu);
148
		add(hp);
2603 aurelien 149
 
1940 aurelien 150
		ajouterListeners();
151
	}
152
 
153
	private void ajouterListeners() {
2602 aurelien 154
 
155
	    listeGroupeChampsEtendus.addChangeHandler(new ChangeHandler() {
1940 aurelien 156
			@Override
2602 aurelien 157
			public void onChange(ChangeEvent event) {
158
				groupeSelectionne = listeGroupeChampsEtendus.getValue(listeGroupeChampsEtendus.getSelectedIndex());
1940 aurelien 159
			}
2602 aurelien 160
		});
1940 aurelien 161
 
1945 aurelien 162
	    ajouterChampsEtenduEtFermer.addListener(new ButtonListenerAdapter() {
163
			@Override
164
			public void onClick(Button button, EventObject e) {
1967 aurelien 165
				if(doitAjouterGroupe()) {
2602 aurelien 166
					surValidationMultiple(renvoyerListeChampsEtendus(groupeSelectionne));
1945 aurelien 167
				} else {
1967 aurelien 168
					if(champEtenduEstValide()) {
169
						surValidation(validerEtRenvoyerChampEtendu());
170
					} else {
2628 aurelien 171
						Window.alert(Msg.get("erreur-nom-vide-champ-etendu"));
1967 aurelien 172
					}
173
				}
1945 aurelien 174
			}
175
		});
176
 
1940 aurelien 177
	    ajouterChampsEtendu.addListener(new ButtonListenerAdapter() {
178
			@Override
179
			public void onClick(Button button, EventObject e) {
1945 aurelien 180
				if(champEtenduEstValide()) {
181
					surAjout(validerEtRenvoyerChampEtendu());
182
					raz();
183
				} else {
2628 aurelien 184
					Window.alert(Msg.get("erreur-nom-vide-champ-etendu"));
1945 aurelien 185
				}
1940 aurelien 186
			}
187
		});
188
 
189
	    annulerAjouterChampEtendu.addListener(new ButtonListenerAdapter() {
190
			@Override
191
			public void onClick(Button button, EventObject e) {
192
				surAnnulation();
193
			}
194
		});
195
	}
196
 
2603 aurelien 197
	public void redimensionner(int largeur) {
198
		nChamp.redimensionner(largeur);
199
	}
200
 
1945 aurelien 201
	private void raz() {
202
		idChamp = null;
2602 aurelien 203
		nChamp.reset();
1945 aurelien 204
		nChamp.focus();
205
	}
206
 
2392 aurelien 207
	private ChampSaisieEtendu validerEtRenvoyerChampEtendu() {
2602 aurelien 208
		String labelChamp = nChamp.getRawValue();
209
		String cleChamp = cacheLabelsCle.containsKey(labelChamp) ? cacheLabelsCle.get(labelChamp) : labelChamp;
210
		ChampSaisieEtendu retour = new ChampSaisieEtendu(labelChamp, cleChamp, ListeReferentielChampsEtendusDAO.getUrlRequeteValeursChampEtendu(cleChamp));
211
		retour.setId(cleChamp);
1945 aurelien 212
		return retour;
1940 aurelien 213
	}
214
 
1967 aurelien 215
	private List<ChampSaisieEtendu> renvoyerListeChampsEtendus(String groupe) {
216
		List<ChampSaisieEtendu> champsDuGroupe = new ArrayList<ChampSaisieEtendu>();
2033 aurelien 217
		HashMap<String, String> listeChampsEtendus = cacheGroupes.get(groupe);
1967 aurelien 218
		for (Iterator<String> iterator = listeChampsEtendus.keySet().iterator(); iterator.hasNext();) {
219
			String cle = iterator.next();
220
			String label = listeChampsEtendus.get(cle);
2602 aurelien 221
			ChampSaisieEtendu champ = new ChampSaisieEtendu(label, cle,  ListeReferentielChampsEtendusDAO.getUrlRequeteValeursChampEtendu(cle));
1967 aurelien 222
			champsDuGroupe.add(champ);
223
		}
224
 
225
		return champsDuGroupe;
226
	}
227
 
228
	private boolean doitAjouterGroupe() {
2602 aurelien 229
		return groupeSelectionne != null && !groupeSelectionne.equals("");
1967 aurelien 230
	}
231
 
1945 aurelien 232
	private boolean champEtenduEstValide() {
2392 aurelien 233
		String valeurChamp = nChamp.getRawValue();
1945 aurelien 234
		return (valeurChamp != null && !valeurChamp.isEmpty());
235
	}
236
 
237
	public abstract void surAjout(ChampSaisieEtendu champ);
1967 aurelien 238
	public abstract void surAjoutMultiple(List<ChampSaisieEtendu> champs);
1940 aurelien 239
	public abstract void surValidation(ChampSaisieEtendu champ);
1967 aurelien 240
	public abstract void surValidationMultiple(List<ChampSaisieEtendu> champs);
1940 aurelien 241
	public abstract void surAnnulation();
242
 
2602 aurelien 243
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
2033 aurelien 244
		if(nouvelleDonnees instanceof ListeGroupesChampsEtendus) {
245
			cacheGroupes  = (ListeGroupesChampsEtendus)nouvelleDonnees;
2602 aurelien 246
			listeGroupeChampsEtendus.addItem("...");
247
			for (Iterator<String> iterator = cacheGroupes.keySet().iterator(); iterator.hasNext();) {
248
				listeGroupeChampsEtendus.addItem(iterator.next());
249
			}
250
 
2033 aurelien 251
			if(cacheGroupes.size() > 0) {
252
				conteneurGroupesChampsEtendus.add(indicationSaisieGroupe);
2602 aurelien 253
				conteneurGroupesChampsEtendus.add(conteneurlabelGroupe);
2033 aurelien 254
				doLayout();
255
			}
256
		}
1940 aurelien 257
	}
1967 aurelien 258
 
2392 aurelien 259
 
260
    private void telechargerEtAfficherDescriptionChamps(final String cle) {
261
		ListeReferentielChampsEtendusDAO.telechargerDescriptionWikini(cle, new Callback<String, String>() {
262
			@Override
263
			public void onSuccess(String description) {
264
				afficherDescriptionEtLienWikiChampEtendu(cle, description);
265
			}
266
 
267
			@Override
268
			public void onFailure(String reason) {
269
				// rien
270
			}
271
		});
272
	}
273
 
274
    private void afficherDescriptionEtLienWikiChampEtendu(final String cle, String description) {
275
    	if(description.trim().isEmpty()) {
276
			String urlDesc = ListeReferentielChampsEtendusDAO.obtenirUrlEditionDescriptionWiki(cle);
2628 aurelien 277
			descriptionChamp.setHTML("<span> "+Msg.get("indication-aucune-description-champ-etendu")+".<br />" +
278
					Msg.get("indication-aucune-description-champ-etendu-remplir")+" :" +
2392 aurelien 279
					"<a id=\"lien_description_wiki_ce_"+cle+"\" href="+urlDesc+" target=\"_blank\">"+cle+"</span></span>");
280
			Ext.get("lien_description_wiki_ce_"+cle).addListener("click", new EventCallback() {
281
				@Override
282
				public void execute(EventObject e) {
283
					ListeReferentielChampsEtendusDAO.creerPageWikini(cle);
284
				}
285
			});
286
		} else {
2628 aurelien 287
			descriptionChamp.setHTML("<span class=\"descriptionChampEtenduTitre\">"+Msg.get("description")+" :</span> "+description);
2392 aurelien 288
		}
289
    }
1940 aurelien 290
}