Rev 1287 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.composants;import java.util.HashMap;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.RegistreId;import org.tela_botanica.client.composants.pagination.Proxy;import org.tela_botanica.client.composants.pagination.ProxyValeur;import org.tela_botanica.client.images.Images;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.aDonnee;import org.tela_botanica.client.util.Debug;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.data.ModelData;import com.extjs.gxt.ui.client.data.ModelType;import com.extjs.gxt.ui.client.event.ButtonEvent;import com.extjs.gxt.ui.client.event.Events;import com.extjs.gxt.ui.client.event.FieldEvent;import com.extjs.gxt.ui.client.event.Listener;import com.extjs.gxt.ui.client.event.SelectionListener;import com.extjs.gxt.ui.client.store.ListStore;import com.extjs.gxt.ui.client.widget.LayoutContainer;import com.extjs.gxt.ui.client.widget.MessageBox;import com.extjs.gxt.ui.client.widget.Text;import com.extjs.gxt.ui.client.widget.button.Button;import com.extjs.gxt.ui.client.widget.form.ComboBox;import com.extjs.gxt.ui.client.widget.form.Field;import com.extjs.gxt.ui.client.widget.form.HiddenField;import com.extjs.gxt.ui.client.widget.form.LabelField;import com.extjs.gxt.ui.client.widget.form.TextField;import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;import com.extjs.gxt.ui.client.widget.layout.ColumnData;import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;import com.extjs.gxt.ui.client.widget.layout.FormLayout;import com.extjs.gxt.ui.client.widget.layout.RowLayout;public class ChampMultiValeursPaginable extends LayoutContainer implements Rafraichissable {//TODO : changer le champRecapitulatif par une hashMap//TODO : autoriser la modification des champs saisis//-------------//// ATTRIBUTS ////-------------//Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);String idChampCache = null;String titreErreur = null;String valeurVideMsg = null;String valeurIdentiqueMsg = null;String valeurNonValideMsg = null;String valeurParDefaut = "";String validationMasque = null;String exempleValidation = null;boolean champValeurEstComboBox = false;// Elements pour le champ 'valeurs'Field<String> champValeurTxt = null;ChampComboBoxRechercheTempsReelPaginable champValeurComboBox = null;HiddenField<String> champRecapitulatif = null;HashMap<String, LayoutContainer> valeurs = null;// Elements pour gérer le type de valeurs que contient le champProxy proxyChampValeur = null;ModelType modeltypeChampValeur = null;String displayNameChampValeur = "nom";// Elements pour l'UILayoutContainer principalLayout = null;LayoutContainer colonneConteneur = null;ColumnData colonneChampValeur = null;ColumnData colonneBoutonAjouter = null;Button ajouterBouton = null;int largeurTotale = 500;int largeurBouton = 20;int largeurChampValeur = 200;String boutonSupprimerLabel = "";String nomLabelChampTxt = "";//-------------//// METHODES ////-------------///*--------------Constructeur--------------*/// Usage : Si champValeurEstComboBox est FAUX alors modeltype, proxy et displayName doivent être à Null.// Sinon ils doivent impérativement être non nuls.public ChampMultiValeursPaginable(String label, int largeurTotale, boolean champValeurEstComboBox, ModelType modeltype, Proxy proxy, String displayName) {this.champValeurEstComboBox = champValeurEstComboBox;if (champValeurEstComboBox) {if ((proxy == null) || (modeltype == null) || (displayName == null)) {MessageBox.alert("[ERREUR]","Constructeur de ChampMultiValeursPaginable - paramètre Null",null);}else {this.proxyChampValeur = proxy;this.modeltypeChampValeur = modeltype;this.displayNameChampValeur = displayName;}}initialiserChampMultiValeursPaginable(label, largeurTotale);}/*------------Accesseurs------------*///------------//// Get //------------------------------------------------------------public ChampComboBoxRechercheTempsReelPaginable getChampValeurComboBox() {if (champValeurEstComboBox) return this.champValeurComboBox;else return null;}public Field getChampValeurTxt() {if (!champValeurEstComboBox) return this.champValeurTxt;else return null;}public String getLabel() {return this.nomLabelChampTxt;}public String getValeurs() {String texteRecapitulatif = "";if (champRecapitulatif.getValue() != null) {texteRecapitulatif = champRecapitulatif.getValue();texteRecapitulatif = texteRecapitulatif.replaceAll("(.*)"+aDonnee.SEPARATEUR_VALEURS+"$", "$1");}return texteRecapitulatif;}//------------//// Set //------------------------------------------------------------public void setLabel(String label) {if (label == null) {label = "";}nomLabelChampTxt = label;}public void setLargeurTotale(int largeur) {this.largeurTotale = largeur;largeurChampValeur = largeurTotale - largeurBouton;}public void setValidation (String validation, String exempleValidation) {this.validationMasque = validation;this.exempleValidation = exempleValidation;this.valeurNonValideMsg = Mediateur.i18nM.valeurNonValideMsg(exempleValidation);}public void setValeurParDefaut(String valeur) {this.valeurParDefaut = valeur;champValeurTxt.setValue(valeur);}public void setValeurBoutonSupprimer(String valeur) {this.boutonSupprimerLabel = valeur;}/*------------------Méthodes publiques-------------------*/public void peupler(String chaineExistante) {if (valeurs.size()>0) {reinitialiser();}if (chaineExistante != null && !chaineExistante.trim().equals("")) {String[] valeurs = chaineExistante.split(aDonnee.SEPARATEUR_VALEURS);for (int i = 0; i < valeurs.length; i++) {ajouterValeur(valeurs[i]);}}}@Overridepublic void rafraichir(Object nouvellesDonnees) {}/*-------------------Méthodes protégées--------------------*/protected void ajouterValeur(final String texte, final String strValeur, final String id) {//Implémenté dans classe inférieure}protected void ajouterValeur(final String texte) {LayoutContainer colonneLayout = new LayoutContainer();colonneLayout.setLayout(new ColumnLayout());valeurs.put(texte, colonneLayout);Text champTxt = new Text();champTxt.setText(texte);colonneLayout.add(champTxt, new ColumnData(largeurChampValeur));Button supprimerBouton = new Button();supprimerBouton.setIcon(Images.ICONES.supprimer());supprimerBouton.setText(boutonSupprimerLabel);supprimerBouton.setData("valeur", texte);supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent ce) {String valeur = ce.getComponent().getData("valeur");LayoutContainer valeurLayout = valeurs.get(valeur);principalLayout.remove(valeurLayout);valeurs.remove(valeur);supprimerValeurDuRecapitulatif(valeur);actualiserLayoutGlobal();}});colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));// Ajout du layout de la valeur au layout principalprincipalLayout.add(colonneLayout);// Ajout de la valeur au champ récapitulatif des valeurs ajoutéesajouterValeurAuRecapitulatif(texte);reinitialiserChamp();actualiserLayoutGlobal();}protected void reinitialiserChamp() {if (champValeurEstComboBox) {champValeurComboBox.getCombo().clear();} else {champValeurTxt.setValue(valeurParDefaut);}}protected void actualiserLayoutGlobal() {layout();}protected void ajouterValeurAuRecapitulatif(String texte) {String texteRecapitulatif = "";if (champRecapitulatif.getValue() != null) {texteRecapitulatif = champRecapitulatif.getValue();}texteRecapitulatif += texte + aDonnee.SEPARATEUR_VALEURS;champRecapitulatif.setValue(texteRecapitulatif);}protected void supprimerValeurDuRecapitulatif(String texte) {if (champRecapitulatif.getValue() != null) {String texteRecapitulatif = champRecapitulatif.getValue();texteRecapitulatif = texteRecapitulatif.replace(texte + aDonnee.SEPARATEUR_VALEURS, "");champRecapitulatif.setValue(texteRecapitulatif);}}protected void reinitialiser() {//TODO : pourrait etre mieux fait si les valeurs étaient enregistrées dans un// layout particulier. Il suffirait alors d'enlever les valeurs de ce layout.principalLayout.removeAll();initialiserChampMultiValeursPaginable(nomLabelChampTxt, largeurTotale);}/*------------------Méthodes privées-------------------*/private void initialiserChampMultiValeursPaginable(String label, int largeurTotale) {setLabel(label);setLargeurTotale(largeurTotale);titreErreur = Mediateur.i18nC.erreurSaisieTitre();valeurVideMsg = Mediateur.i18nC.demanderValeur();valeurIdentiqueMsg = Mediateur.i18nC.valeurDejaPresente();valeurs = new HashMap<String, LayoutContainer>();champRecapitulatif = new HiddenField<String>();champRecapitulatif.setValue("");setLayout(new FormLayout());creerChampMultiValeurs();}private void creerChampMultiValeurs() {principalLayout = new LayoutContainer();principalLayout.setLayout(new RowLayout());/* Creation du champ Valeur */LabelField label = new LabelField(nomLabelChampTxt + ":");label.setWidth("95%");principalLayout.add(label);colonneConteneur = new LayoutContainer();colonneConteneur.setLayout(new ColumnLayout());colonneChampValeur = new ColumnData(largeurChampValeur);if (champValeurEstComboBox) {champValeurComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyChampValeur, modeltypeChampValeur, displayNameChampValeur);champValeurComboBox.setWidth(largeurChampValeur);champValeurComboBox.getCombo().setEmptyText("Valeur...");colonneConteneur.add(champValeurComboBox, colonneChampValeur);} else {champValeurTxt = new TextField<String>();champValeurTxt.setWidth(largeurChampValeur);champValeurTxt.setEmptyText("Valeur...");colonneConteneur.add(champValeurTxt, colonneChampValeur);}/* Creation du bouton Ajouter */ajouterBouton = new Button();ajouterBouton.setWidth(largeurBouton);ajouterBouton.setIcon(Images.ICONES.ajouter());ajouterBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent ce) {// récupération de la valeur du champ "Valeur"String valeurChamp = "";if (champValeurEstComboBox) {if (champValeurComboBox.getValeur() != null) {valeurChamp = (new Valeur(champValeurComboBox.getValeur())).getNom();}} else {valeurChamp = champValeurTxt.getValue();}// validation de la valeur avant ajoutif ((valeurChamp == null) || valeurChamp.trim().equals("") || valeurChamp.trim().equals(valeurParDefaut)) {MessageBox.alert(titreErreur, valeurVideMsg, null);} else if (valeurs.get(valeurChamp) != null) {MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);} else {if (validationMasque != null && !valeurChamp.matches(validationMasque)) {MessageBox.alert(titreErreur, valeurNonValideMsg, null);} else {ajouterValeur(valeurChamp);}}}});colonneBoutonAjouter = new ColumnData(largeurBouton);colonneConteneur.add(ajouterBouton, colonneBoutonAjouter);principalLayout.add(champRecapitulatif);principalLayout.add(colonneConteneur);add(principalLayout);}}