Rev 2603 | Rev 2628 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.util;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;import org.tela_botanica.client.modeles.objets.Utilisateur;import org.tela_botanica.client.util.autocompletion.AutoCompletionComboBox;import com.google.gwt.core.client.Callback;import com.google.gwt.event.dom.client.ChangeEvent;import com.google.gwt.event.dom.client.ChangeHandler;import com.google.gwt.http.client.Response;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.ui.HTML;import com.google.gwt.user.client.ui.HorizontalPanel;import com.google.gwt.user.client.ui.Label;import com.google.gwt.user.client.ui.ListBox;import com.gwtext.client.core.EventCallback;import com.gwtext.client.core.EventObject;import com.gwtext.client.core.Ext;import com.gwtext.client.widgets.Button;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.event.ButtonListenerAdapter;import com.gwtext.client.widgets.form.FormPanel;import com.gwtext.client.widgets.layout.FormLayout;@SuppressWarnings("unchecked")public abstract class FormulaireSaisieChampEtendu extends FormPanel implements Rafraichissable {final AutoCompletionComboBox nChamp;Button ajouterChampsEtenduEtFermer;Button ajouterChampsEtendu;Button annulerAjouterChampEtendu;String idChamp = null;Panel conteneurGroupesChampsEtendus;Panel conteneurlabelGroupe;ListBox listeGroupeChampsEtendus;HTML indicationSaisieGroupe;private static ListeGroupesChampsEtendus cacheGroupes;private static Map<String, String> cacheLabelsCle;private HTML descriptionChamp = null;private String groupeSelectionne = null;public FormulaireSaisieChampEtendu() {super();setPaddings(3);setBodyBorder(false);indicationSaisieGroupe = new HTML("Vous pouvez ajouter plusieurs champs à la fois correspondant à un groupe "+"par exemple les champs des projet 'sauvages de ma rue' ou 'florilèges', etc... <br />"+"De nouveaux groupes seront ajoutés régulièrement en fonction des champs les plus utilisés");indicationSaisieGroupe.addStyleName("aideCreerChampEtendu");conteneurlabelGroupe = new Panel();conteneurlabelGroupe.setStyleName("panneauEnLigne");conteneurlabelGroupe.addStyleName("selecteurGroupeEtendus");conteneurlabelGroupe.setBorder(false);Label labelGroupeChampsEtendus = new Label("Ajouter un groupe de champs :");listeGroupeChampsEtendus = new ListBox();listeGroupeChampsEtendus.setWidth("315px");conteneurlabelGroupe.add(labelGroupeChampsEtendus);conteneurlabelGroupe.add(listeGroupeChampsEtendus);conteneurGroupesChampsEtendus = new Panel();conteneurGroupesChampsEtendus.setBorder(false);conteneurGroupesChampsEtendus.setPaddings(0);conteneurGroupesChampsEtendus.setMargins(0);conteneurGroupesChampsEtendus.setLayout(new FormLayout());conteneurGroupesChampsEtendus.setWidth("100%");add(conteneurGroupesChampsEtendus);if(cacheGroupes == null) {ListeReferentielChampsEtendusDAO lrceDao = new ListeReferentielChampsEtendusDAO(null);lrceDao.obtenirGroupesChampsEtendus(this);} else {this.rafraichir(cacheGroupes, false);}HTML indicationSaisie = new HTML("Saisissez un nom de champ ou choisisez un nom proposé par l'autocomplétion "+"Si vous choissisez un nom de champ existant vous pourrez profiter d'une autocomplétion "+"sur les valeurs déjà saisies pour ce champ par les autres utilisateurs.<br /> "+"Les champs de la forme 'label (clé)' sont des champs 'standards' ayant un rôle et une description " +"bien définie");indicationSaisie.addStyleName("aideCreerChampEtendu");add(indicationSaisie);HorizontalPanel hp = new HorizontalPanel();hp.setBorderWidth(0);nChamp = new AutoCompletionComboBox("Nom du champ", ListeReferentielChampsEtendusDAO.getUrlRequeteNomsChampsEtendus()) {@Overrideprotected Map<String, String> parserResultatRequete(Response response) {Map<String, String> clesLabels = ListeReferentielChampsEtendusDAO.parserRetourListeNomsChampsEtendus(response);cacheLabelsCle = new HashMap<String, String>();for(Map.Entry<String, String> entry : clesLabels.entrySet()){cacheLabelsCle.put(entry.getValue(), entry.getKey());}return clesLabels;}@Overrideprotected void onSelectionValeur() {telechargerEtAfficherDescriptionChamps(cacheLabelsCle.get(nChamp.getRawValue()));}@Overrideprotected void onValidationSaisie() {// rien à faire ici}@Overrideprotected void onModificationValeur() {// rien à faire ici non plus}@Overrideprotected String preTraiterUrlRequete(String urlRequete, String valeur) {return urlRequete.replace("{utilisateur}", Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());}};nChamp.addStyleName("panneauEnLigne");add(nChamp);descriptionChamp = new HTML();descriptionChamp.addStyleName("aideWikiChampEtendu");add(descriptionChamp);ajouterChampsEtenduEtFermer = new Button("Ajouter et fermer");ajouterChampsEtenduEtFermer.setTooltip("Ajouter un champ étendu ou un groupe de champs et fermer la fenêtre");ajouterChampsEtendu = new Button("Ajouter");ajouterChampsEtendu.setTooltip("Ajouter un champ étendu ou un groupe de champ");annulerAjouterChampEtendu = new Button("Annuler");annulerAjouterChampEtendu.setTooltip("Fermer la fenêtre sans ajouter de champ");hp.add(ajouterChampsEtenduEtFermer);hp.add(ajouterChampsEtendu);hp.add(annulerAjouterChampEtendu);add(hp);ajouterListeners();}private void ajouterListeners() {listeGroupeChampsEtendus.addChangeHandler(new ChangeHandler() {@Overridepublic void onChange(ChangeEvent event) {groupeSelectionne = listeGroupeChampsEtendus.getValue(listeGroupeChampsEtendus.getSelectedIndex());}});ajouterChampsEtenduEtFermer.addListener(new ButtonListenerAdapter() {@Overridepublic void onClick(Button button, EventObject e) {if(doitAjouterGroupe()) {surValidationMultiple(renvoyerListeChampsEtendus(groupeSelectionne));} else {if(champEtenduEstValide()) {surValidation(validerEtRenvoyerChampEtendu());} else {Window.alert("Le nom du champ étendu ne peut pas être vide");}}}});ajouterChampsEtendu.addListener(new ButtonListenerAdapter() {@Overridepublic void onClick(Button button, EventObject e) {if(champEtenduEstValide()) {surAjout(validerEtRenvoyerChampEtendu());raz();} else {Window.alert("Le nom du champ étendu ne peut pas être vide");}}});annulerAjouterChampEtendu.addListener(new ButtonListenerAdapter() {@Overridepublic void onClick(Button button, EventObject e) {surAnnulation();}});}public void redimensionner(int largeur) {nChamp.redimensionner(largeur);}private void raz() {idChamp = null;nChamp.reset();nChamp.focus();}private ChampSaisieEtendu validerEtRenvoyerChampEtendu() {String labelChamp = nChamp.getRawValue();String cleChamp = cacheLabelsCle.containsKey(labelChamp) ? cacheLabelsCle.get(labelChamp) : labelChamp;ChampSaisieEtendu retour = new ChampSaisieEtendu(labelChamp, cleChamp, ListeReferentielChampsEtendusDAO.getUrlRequeteValeursChampEtendu(cleChamp));retour.setId(cleChamp);return retour;}private List<ChampSaisieEtendu> renvoyerListeChampsEtendus(String groupe) {List<ChampSaisieEtendu> champsDuGroupe = new ArrayList<ChampSaisieEtendu>();HashMap<String, String> listeChampsEtendus = cacheGroupes.get(groupe);for (Iterator<String> iterator = listeChampsEtendus.keySet().iterator(); iterator.hasNext();) {String cle = iterator.next();String label = listeChampsEtendus.get(cle);ChampSaisieEtendu champ = new ChampSaisieEtendu(label, cle, ListeReferentielChampsEtendusDAO.getUrlRequeteValeursChampEtendu(cle));champsDuGroupe.add(champ);}return champsDuGroupe;}private boolean doitAjouterGroupe() {return groupeSelectionne != null && !groupeSelectionne.equals("");}private boolean champEtenduEstValide() {String valeurChamp = nChamp.getRawValue();return (valeurChamp != null && !valeurChamp.isEmpty());}public abstract void surAjout(ChampSaisieEtendu champ);public abstract void surAjoutMultiple(List<ChampSaisieEtendu> champs);public abstract void surValidation(ChampSaisieEtendu champ);public abstract void surValidationMultiple(List<ChampSaisieEtendu> champs);public abstract void surAnnulation();public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {if(nouvelleDonnees instanceof ListeGroupesChampsEtendus) {cacheGroupes = (ListeGroupesChampsEtendus)nouvelleDonnees;listeGroupeChampsEtendus.addItem("...");for (Iterator<String> iterator = cacheGroupes.keySet().iterator(); iterator.hasNext();) {listeGroupeChampsEtendus.addItem(iterator.next());}if(cacheGroupes.size() > 0) {conteneurGroupesChampsEtendus.add(indicationSaisieGroupe);conteneurGroupesChampsEtendus.add(conteneurlabelGroupe);doLayout();}}}private void telechargerEtAfficherDescriptionChamps(final String cle) {ListeReferentielChampsEtendusDAO.telechargerDescriptionWikini(cle, new Callback<String, String>() {@Overridepublic void onSuccess(String description) {afficherDescriptionEtLienWikiChampEtendu(cle, description);}@Overridepublic void onFailure(String reason) {// rien}});}private void afficherDescriptionEtLienWikiChampEtendu(final String cle, String description) {if(description.trim().isEmpty()) {String urlDesc = ListeReferentielChampsEtendusDAO.obtenirUrlEditionDescriptionWiki(cle);descriptionChamp.setHTML("<span> Aucune description n'existe pour ce champ.<br />" +"Vous pouvez la remplir sur cette page :" +"<a id=\"lien_description_wiki_ce_"+cle+"\" href="+urlDesc+" target=\"_blank\">"+cle+"</span></span>");Ext.get("lien_description_wiki_ce_"+cle).addListener("click", new EventCallback() {@Overridepublic void execute(EventObject e) {ListeReferentielChampsEtendusDAO.creerPageWikini(cle);}});} else {descriptionChamp.setHTML("<span class=\"descriptionChampEtenduTitre\">Description :</span> "+description);}}}