Rev 1945 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.util;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;import com.google.gwt.user.client.Timer;import com.google.gwt.user.client.Window;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.ListenerConfig;import com.gwtext.client.data.ArrayReader;import com.gwtext.client.data.FieldDef;import com.gwtext.client.data.MemoryProxy;import com.gwtext.client.data.Record;import com.gwtext.client.data.RecordDef;import com.gwtext.client.data.Store;import com.gwtext.client.data.StringFieldDef;import com.gwtext.client.widgets.Button;import com.gwtext.client.widgets.event.ButtonListenerAdapter;import com.gwtext.client.widgets.form.ComboBox;import com.gwtext.client.widgets.form.FormPanel;import com.gwtext.client.widgets.form.TextField;import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;@SuppressWarnings("unchecked")public abstract class FormulaireSaisieChampEtendu extends FormPanel implements Rafraichissable {private final int KEY_ALT = 18;private final int KEY_BACKSPACE = 8;private final int KEY_CTRL = 17;private final int KEY_DELETE = 46;private final int KEY_DOWN = 40;private final int KEY_END = 35;private final int KEY_ENTER = 13;private final int KEY_ESCAPE = 27;private final int KEY_HOME = 36;private final int KEY_LEFT = 37;private final int KEY_PAGEDOWN = 34;private final int KEY_PAGEUP = 33;private final int KEY_RIGHT = 39;private final int KEY_SHIFT = 16;private final int KEY_TAB = 9;private final int KEY_UP = 38;final ComboBox nChamp;String resultTplRefPerso = "<div class=\"search-item-ref\">{label}</div>";final Button ajouterChampsEtendu;final Button annulerAjouterChampEtendu;String idChamp = null;private Timer timer = null;private Map<String, String> cacheClesValeur;public FormulaireSaisieChampEtendu() {super();setPaddings(3);setBodyBorder(false);HorizontalPanel hp = new HorizontalPanel();hp.setBorderWidth(0);nChamp = new ComboBox("Nom du champ", "nom_champ_etendu");add(nChamp);ajouterChampsEtendu = new Button("Ajouter");annulerAjouterChampEtendu = new Button("Annuler");hp.add(ajouterChampsEtendu);hp.add(annulerAjouterChampEtendu);add(hp);nChamp.setTpl(resultTplRefPerso);nChamp.setMode(ComboBox.REMOTE);nChamp.setItemSelector("div.search-item-ref");nChamp.setTypeAhead(true);nChamp.setLoadingText("Recherche...");nChamp.setHideTrigger(true);nChamp.setWidth("250px");nChamp.setValue("");nChamp.focus();ajouterListeners();}private void ajouterListeners() {ListenerConfig listenerConfigAutocompletion=new ListenerConfig();listenerConfigAutocompletion.setDelay(200);listenerConfigAutocompletion.setStopPropagation(false);listenerConfigAutocompletion.setStopEvent(true);nChamp.addKeyPressListener(new EventCallback() {@Overridepublic void execute(EventObject e) {switch(e.getKey()) {case KEY_ALT:case KEY_CTRL:case KEY_ENTER:case KEY_END:case KEY_HOME:case KEY_LEFT:case KEY_PAGEDOWN:case KEY_PAGEUP:case KEY_RIGHT:case KEY_SHIFT:case KEY_TAB:case KEY_UP:break;case KEY_DOWN:if(nChamp.getValueAsString().isEmpty() && !nChamp.isExpanded()) {obtenirReferentiel("*");}break;case KEY_ESCAPE:surAnnulation();break;default:if(timer != null) {timer.cancel();}timer = new Timer() {@Overridepublic void run() {obtenirReferentiel();}};timer.schedule(300);}}},listenerConfigAutocompletion);// Listener completionnChamp.addListener(new ComboBoxListenerAdapter() {@Overridepublic void onSelect(ComboBox comboBox, Record record, int index) {nChamp.setValue(record.getAsString("label"));idChamp = record.getAsString("cle");nChamp.collapse();}});ajouterChampsEtendu.addListener(new ButtonListenerAdapter() {@Overridepublic void onClick(Button button, EventObject e) {validerChampEtendu();}});annulerAjouterChampEtendu.addListener(new ButtonListenerAdapter() {@Overridepublic void onClick(Button button, EventObject e) {surAnnulation();}});}private void validerChampEtendu() {String valeurChamp = nChamp.getValueAsString();if(valeurChamp != null && !valeurChamp.isEmpty()) {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 labelidNouveauChamp = "tempid_"+date.getTime();} else {idNouveauChamp = idChamp;}ChampSaisieEtendu retour = new ChampSaisieEtendu(valeurChamp, idNouveauChamp);retour.setId(idNouveauChamp);surValidation(retour);} else {Window.alert("Le nom du champ étendu ne peut pas être vide");}}private boolean estUnChampSelectionne(String valeur) {return cacheClesValeur.containsValue(valeur);}private void obtenirReferentiel() {obtenirReferentiel(nChamp.getValueAsString());}private void obtenirReferentiel(String valeur) {ListeReferentielChampsEtendusDAO lrce = new ListeReferentielChampsEtendusDAO(null);lrce.obtenirListeNomsChampsEtendus(this, valeur+"*");}public abstract void surValidation(ChampSaisieEtendu champ);public abstract void surAnnulation();public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {int i = 0;HashMap<String, String> clesLabels = (HashMap<String, String>)nouvelleDonnees;cacheClesValeur = clesLabels;Object[][] refData = new Object[clesLabels.keySet().size()][2];for (Iterator<String> it = clesLabels.keySet().iterator(); it.hasNext();){String cle = it.next();String label= clesLabels.get(cle);refData[i][0]= cle;refData[i][1]= label;i++;}FieldDef defCle = new StringFieldDef("cle");FieldDef defLabel = new StringFieldDef("label");FieldDef[] defTab = {defCle, defLabel};RecordDef rd = new RecordDef(defTab);final MemoryProxy dataProxy = new MemoryProxy(refData);final ArrayReader reader = new ArrayReader(rd);Store store=new Store(dataProxy,reader);nChamp.setStore(store);store.load();}}