New file |
0,0 → 1,289 |
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()) { |
@Override |
protected 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; |
} |
|
@Override |
protected void onSelectionValeur() { |
telechargerEtAfficherDescriptionChamps(cacheLabelsCle.get(nChamp.getRawValue())); |
} |
|
@Override |
protected void onValidationSaisie() { |
// rien à faire ici |
} |
|
@Override |
protected void onModificationValeur() { |
// rien à faire ici non plus |
} |
|
@Override |
protected 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() { |
@Override |
public void onChange(ChangeEvent event) { |
groupeSelectionne = listeGroupeChampsEtendus.getValue(listeGroupeChampsEtendus.getSelectedIndex()); |
} |
}); |
|
ajouterChampsEtenduEtFermer.addListener(new ButtonListenerAdapter() { |
@Override |
public 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() { |
@Override |
public 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() { |
@Override |
public 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>() { |
@Override |
public void onSuccess(String description) { |
afficherDescriptionEtLienWikiChampEtendu(cle, description); |
} |
|
@Override |
public 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() { |
@Override |
public void execute(EventObject e) { |
ListeReferentielChampsEtendusDAO.creerPageWikini(cle); |
} |
}); |
} else { |
descriptionChamp.setHTML("<span class=\"descriptionChampEtenduTitre\">"+Msg.get("description")+" :</span> "+description); |
} |
} |
} |