1,7 → 1,6 |
package org.tela_botanica.client.util; |
|
import java.util.ArrayList; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.Iterator; |
import java.util.List; |
9,10 → 8,10 |
|
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO; |
import org.tela_botanica.client.modeles.objets.Configuration; |
import org.tela_botanica.client.modeles.objets.ListeChampsEtendus; |
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus; |
|
import com.google.gwt.core.client.Callback; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HTML; |
19,6 → 18,7 |
import com.google.gwt.user.client.ui.HorizontalPanel; |
import com.gwtext.client.core.EventCallback; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.Ext; |
import com.gwtext.client.core.ListenerConfig; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
58,7 → 58,7 |
private final int KEY_UP = 38; |
|
final ComboBox nChamp; |
final String resultTplRefPerso = "<div class=\"search-item-ref\">{label}</div>"; |
final String resultTplRefPerso = "<div class=\"search-item-ref\">{label_fmt}</div>"; |
Button ajouterChampsEtenduEtFermer; |
Button ajouterChampsEtendu; |
Button annulerAjouterChampEtendu; |
73,6 → 73,8 |
private Timer timer = null; |
|
private static Map<String, String> cacheClesValeur; |
private HTML descriptionChamp = null; |
|
private Record rdSelectionne = null; |
private Record groupeSelectionne = null; |
private String valeurBrute = ""; |
91,7 → 93,7 |
groupesChampsEtendus.setWidth("350px"); |
groupesChampsEtendus.setLabel("Ajouter un groupe de champs"); |
groupesChampsEtendus.setDisplayField("label") ; |
groupesChampsEtendus.setValueField("valeur"); |
groupesChampsEtendus.setValueField("cle"); |
groupesChampsEtendus.setEditable(false); |
groupesChampsEtendus.setHideTrigger(false); |
groupesChampsEtendus.setForceSelection(true); |
116,7 → 118,9 |
|
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"); |
"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); |
|
124,8 → 128,23 |
hp.setBorderWidth(0); |
|
nChamp = new ComboBox("Nom du champ", "nom_champ_etendu"); |
nChamp.setWidth("350px"); |
nChamp.setTpl(resultTplRefPerso); |
nChamp.setMode(ComboBox.REMOTE); |
nChamp.setItemSelector("div.search-item-ref"); |
nChamp.setTypeAhead(false); |
nChamp.setLoadingText("Recherche..."); |
nChamp.setHideTrigger(true); |
nChamp.setValidateOnBlur(false); |
Store store = initStoreChampsEtendusVide(); |
store.load(); |
nChamp.setStore(store); |
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"); |
137,16 → 156,6 |
hp.add(ajouterChampsEtendu); |
hp.add(annulerAjouterChampEtendu); |
add(hp); |
|
nChamp.setTpl(resultTplRefPerso); |
nChamp.setMode(ComboBox.REMOTE); |
nChamp.setItemSelector("div.search-item-ref"); |
nChamp.setTypeAhead(false); |
nChamp.setLoadingText("Recherche..."); |
nChamp.setHideTrigger(true); |
nChamp.setValidateOnBlur(false); |
nChamp.setWidth("350px"); |
nChamp.focus(); |
|
ajouterListeners(); |
} |
179,9 → 188,8 |
|
case KEY_ENTER: |
if(rdSelectionne != null) { |
nChamp.setValue(rdSelectionne.getAsString("label")); |
idChamp = rdSelectionne.getAsString("cle"); |
valeurBrute = rdSelectionne.getAsString("label"); |
nChamp.setValue(rdSelectionne.getAsString("label")); |
valeurBrute = rdSelectionne.getAsString("cle"); |
} |
break; |
|
207,25 → 215,29 |
} |
}; |
timer.schedule(300); |
valeurBrute = nChamp.getValueAsString(); |
nChamp.setValue(valeurBrute); |
valeurBrute = nChamp.getRawValue(); |
nChamp.setRawValue(valeurBrute); |
} |
} |
},listenerConfigAutocompletion); |
|
// Listener completion |
nChamp.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
public void onSelect(ComboBox comboBox, Record record, int index) { |
rdSelectionne = record; |
telechargerEtAfficherDescriptionChamps(rdSelectionne.getAsString("cle")); |
nChamp.setRawValue(rdSelectionne.getAsString("label")); |
valeurBrute = rdSelectionne.getAsString("cle"); |
} |
|
@Override |
public void onBlur(Field field) { |
nChamp.setRawValue(valeurBrute); |
nChamp.collapse(); |
|
@Override |
public void onBlur(Field field) { |
if(rdSelectionne != null && !rdSelectionne.getAsString("cle").equals(valeurBrute)) { |
nChamp.setRawValue(valeurBrute); |
} |
telechargerEtAfficherDescriptionChamps(valeurBrute); |
} |
}); |
}); |
|
groupesChampsEtendus.addListener(new ComboBoxListenerAdapter() { |
@Override |
238,7 → 250,7 |
@Override |
public void onClick(Button button, EventObject e) { |
if(doitAjouterGroupe()) { |
surValidationMultiple(renvoyerListeChampsEtendus(groupeSelectionne.getAsString("valeur"))); |
surValidationMultiple(renvoyerListeChampsEtendus(groupeSelectionne.getAsString("cle"))); |
} else { |
if(champEtenduEstValide()) { |
surValidation(validerEtRenvoyerChampEtendu()); |
276,19 → 288,13 |
nChamp.focus(); |
} |
|
private ChampSaisieEtendu validerEtRenvoyerChampEtendu() { |
String valeurChamp = nChamp.getValueAsString(); |
String idNouveauChamp = ""; |
if(!estUnChampSelectionne(valeurChamp)) { |
Date date = new Date(); |
// affectation d'un id temporaire qui sera remplacé par l'id auto généré à partir |
// du label |
idNouveauChamp = "tempid_"+date.getTime(); |
} else { |
idNouveauChamp = idChamp; |
} |
ChampSaisieEtendu retour = new ChampSaisieEtendu(valeurChamp, idNouveauChamp); |
retour.setId(idNouveauChamp); |
private ChampSaisieEtendu validerEtRenvoyerChampEtendu() { |
String valeurChamp = nChamp.getRawValue(); |
// Valeur contient soit la clé, soit le label s'il existe |
// valeur brute contient toujours la clé |
// TODO: utiliser les champs de google et pas ceux de GWT-EXT qui puent du cul |
ChampSaisieEtendu retour = new ChampSaisieEtendu(valeurChamp, valeurBrute); |
retour.setId(valeurBrute); |
return retour; |
} |
|
306,11 → 312,11 |
} |
|
private boolean doitAjouterGroupe() { |
return groupeSelectionne != null && !groupeSelectionne.getAsString("valeur").equals(""); |
return groupeSelectionne != null && !groupeSelectionne.getAsString("cle").equals(""); |
} |
|
private boolean champEtenduEstValide() { |
String valeurChamp = nChamp.getValueAsString(); |
String valeurChamp = nChamp.getRawValue(); |
return (valeurChamp != null && !valeurChamp.isEmpty()); |
} |
|
319,7 → 325,7 |
} |
|
private void obtenirListeValeurs() { |
obtenirListeValeurs(nChamp.getValueAsString()); |
obtenirListeValeurs(nChamp.getRawValue()); |
} |
|
private void obtenirListeValeurs(String valeur) { |
340,20 → 346,28 |
|
ListeChampsEtendus clesLabels = (ListeChampsEtendus)nouvelleDonnees; |
cacheClesValeur = clesLabels; |
Object[][] refData = new Object[clesLabels.keySet().size()][2]; |
Object[][] refData = new Object[clesLabels.keySet().size()][3]; |
|
for (Iterator<String> it = clesLabels.keySet().iterator(); it.hasNext();) |
{ |
String cle = it.next(); |
String label= clesLabels.get(cle); |
String label = clesLabels.get(cle); |
|
refData[i][0]= cle; |
refData[i][1]= label; |
if(cle.equals(label.toLowerCase())) { |
refData[i][2]= label; |
} else { |
refData[i][2]= label+" ("+cle+")"; |
} |
|
i++; |
} |
|
FieldDef defCle = new StringFieldDef("cle"); |
FieldDef defLabel = new StringFieldDef("label"); |
FieldDef[] defTab = {defCle, defLabel}; |
FieldDef defLabelFmt = new StringFieldDef("label_fmt"); |
FieldDef[] defTab = {defCle, defLabel, defLabelFmt}; |
|
RecordDef rd = new RecordDef(defTab); |
|
377,6 → 391,38 |
} |
} |
|
|
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> 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() { |
@Override |
public void execute(EventObject e) { |
ListeReferentielChampsEtendusDAO.creerPageWikini(cle); |
} |
}); |
} else { |
descriptionChamp.setHTML("<span class=\"descriptionChampEtenduTitre\">Description :</span> "+description); |
} |
} |
|
private Store getGroupesChampsEtendusStore(ListeGroupesChampsEtendus listeGroupesChampsEtendus) { |
int i = 1; |
Object[][] valeurs = new Object[listeGroupesChampsEtendus.size()+1][2]; |
392,8 → 438,25 |
i++; |
} |
} |
SimpleStore store = new SimpleStore(new String[] {"label","valeur"},valeurs); |
SimpleStore store = new SimpleStore(new String[] {"label","cle"},valeurs); |
store.load(); |
return store; |
} |
|
private Store initStoreChampsEtendusVide() { |
Object[][] refData = new Object[0][1]; |
|
FieldDef defLabel = new StringFieldDef("label"); |
FieldDef defCle = new StringFieldDef("cle"); |
FieldDef[] defTab = {defLabel, defCle}; |
|
RecordDef rd = new RecordDef(defTab); |
|
final MemoryProxy dataProxy = new MemoryProxy(refData); |
final ArrayReader reader = new ArrayReader(rd); |
|
Store store = new Store(dataProxy,reader); |
|
return store; |
} |
} |