Rev 2606 | Rev 2641 | 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.i18n.Msg;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(Msg.get("indication-saisie-groupe-champ-etendus"));indicationSaisieGroupe.addStyleName("aideCreerChampEtendu");conteneurlabelGroupe = new Panel();conteneurlabelGroupe.setStyleName("panneauEnLigne");conteneurlabelGroupe.addStyleName("selecteurGroupeEtendus");conteneurlabelGroupe.setBorder(false);Label labelGroupeChampsEtendus = new Label(Msg.get("ajouter-groupe-champ-etendus")+" :");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(Msg.get("indication-saisie-nom-champ-etendu"));indicationSaisie.addStyleName("aideCreerChampEtendu");add(indicationSaisie);HorizontalPanel hp = new HorizontalPanel();hp.setBorderWidth(0);nChamp = new AutoCompletionComboBox(Msg.get("nom-champ-etendu"), 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(Msg.get("ajouter-fermer"));ajouterChampsEtenduEtFermer.setTooltip(Msg.get("indication-ajouter-fermer"));ajouterChampsEtendu = new Button(Msg.get("ajouter"));ajouterChampsEtendu.setTooltip(Msg.get("indication-ajouter-champ-etendu"));annulerAjouterChampEtendu = new Button(Msg.get("fermer"));annulerAjouterChampEtendu.setTooltip(Msg.get("indication-fermer-champ-etendu"));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(Msg.get("erreur-nom-vide-champ-etendu"));}}}});ajouterChampsEtendu.addListener(new ButtonListenerAdapter() {@Overridepublic void onClick(Button button, EventObject e) {if(champEtenduEstValide()) {surAjout(validerEtRenvoyerChampEtendu());raz();} else {Window.alert(Msg.get("erreur-nom-vide-champ-etendu"));}}});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> "+Msg.get("indication-aucune-description-champ-etendu")+".<br />" +Msg.get("indication-aucune-description-champ-etendu-remplir")+" :" +"<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\">"+Msg.get("description")+" :</span> "+description);}}}