Subversion Repositories eFlore/Applications.cel

Rev

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