Rev 721 | Rev 830 | Go to most recent revision | 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.images.Images;import org.tela_botanica.client.modeles.Valeur;import com.extjs.gxt.ui.client.event.ButtonEvent;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.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.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;import com.google.gwt.core.client.GWT;public class ChampMultiValeurs extends LayoutContainer {//TODO : changer le champRecapitulatif par une hashMap//TODO : autoriser la modification des champs saisisString idChampCache = null;String nomLabelChampTxt = "";String titreErreur = null;String valeurVideMsg = null;String valeurIdentiqueMsg = null;String valeurNonValideMsg = null;String valeurParDefaut = "";String validation = null;String exempleValidation = null;String boutonSupprimerLabel = "";LayoutContainer principalLayout = null;TextField<String> champTexte = null;HiddenField<String> champRecapitulatif = null;HashMap<String, LayoutContainer> valeurs = null;ComboBox<Valeur> types = null;int largeurTotale = 420;int largeurBouton = 20;int largeurChamp = 0;boolean estMultiType = false;public ChampMultiValeurs() {initialiserChampMultiValeur(null, 0);}public ChampMultiValeurs(String label) {initialiserChampMultiValeur(label, 0);}public ChampMultiValeurs(String label, int largeurTotale) {initialiserChampMultiValeur(label, largeurTotale);}public ChampMultiValeurs(boolean estMultiType, String label, int largeurTotale) {this.estMultiType = estMultiType;initialiserChampMultiValeur(label, largeurTotale);}public void setLabel(String label) {if (label == null) {label = "";}nomLabelChampTxt = label;}public void setLargeur(int largeur) {if (largeur != 0 && largeur > 20) {largeurTotale = largeur;}largeurChamp = largeurTotale - largeurBouton;}public void setValidation (String validation, String exempleValidation) {this.validation = validation;this.exempleValidation = exempleValidation;this.valeurNonValideMsg = Mediateur.i18nM.valeurNonValideMsg(exempleValidation);}public void setValeurParDefaut(String valeur) {this.valeurParDefaut = valeur;champTexte.setValue(valeur);}public void setValeurBoutonSupprimer(String valeur) {this.boutonSupprimerLabel = valeur;}private void initialiserChampMultiValeur(String label, int largeur) {setLabel(label);setLargeur(largeur);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());LabelField label = new LabelField(nomLabelChampTxt + ":");label.setWidth(largeurChamp);principalLayout.add(label);LayoutContainer colonneLayout = new LayoutContainer();colonneLayout.setLayout(new ColumnLayout());if (estMultiType == true) {largeurChamp = largeurChamp - 150;types = new ComboBox<Valeur>();types.setDisplayField("nom");types.setEmptyText("Choisissez:");types.setStore(new ListStore<Valeur>());colonneLayout.add(types, new ColumnData(150));}champTexte = new TextField<String>();colonneLayout.add(champTexte, new ColumnData(largeurChamp));Button ajouterBouton = new Button();ajouterBouton.setIcon(Images.ICONES.ajouter());ajouterBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent ce) {String valeurChampTxt = (String) champTexte.getValue();if ((valeurChampTxt == null) || valeurChampTxt.trim().equals("") || valeurChampTxt.trim().equals(valeurParDefaut)) {MessageBox.alert(titreErreur, valeurVideMsg, null);} else if (valeurs.get(valeurChampTxt) != null){MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);} else {if (validation!=null && !valeurChampTxt.matches(validation)) {MessageBox.alert(titreErreur, valeurNonValideMsg, null);} else {if (estMultiType) {String type = "";String id = "";Valeur valeur = types.getValue();if (valeur != null) {type = valeur.getNom();id = valeur.get("abreviation");} else {type = types.getRawValue();id = type;}if (type.trim().equals("")) {MessageBox.alert("Erreur de saisie", "Vous devez saisir un type ", null);} else {ajouterValeur(valeurChampTxt, type, id);}} else {ajouterValeur(valeurChampTxt);}}}}});colonneLayout.add(ajouterBouton, new ColumnData(largeurBouton));principalLayout.add(champRecapitulatif);principalLayout.add(colonneLayout);add(principalLayout);}public void ajouterValeur(final String texte, final String strValeur, final String id) {//Implémenté dans classe inférieure}public 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(largeurChamp));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();}public void reinitialiserChamp() {champTexte.setValue(valeurParDefaut);}public void actualiserLayoutGlobal() {GWT.log("Valeurs : "+getValeurs(), null);layout();}public void ajouterValeurAuRecapitulatif(String texte) {String texteRecapitulatif = "";if (champRecapitulatif.getValue() != null) {texteRecapitulatif = champRecapitulatif.getValue();}texteRecapitulatif += texte + ";;";champRecapitulatif.setValue(texteRecapitulatif);}public void supprimerValeurDuRecapitulatif(String texte) {if (champRecapitulatif.getValue() != null) {String texteRecapitulatif = champRecapitulatif.getValue();texteRecapitulatif = texteRecapitulatif.replace(texte + ";;", "");champRecapitulatif.setValue(texteRecapitulatif);}}public String getValeurs() {String texteRecapitulatif = "";if (champRecapitulatif.getValue() != null) {texteRecapitulatif = champRecapitulatif.getValue();texteRecapitulatif = texteRecapitulatif.replaceAll("(.*);;$", "$1");}return texteRecapitulatif;}public void peupler(String chaineExistante) {if (chaineExistante != null && !chaineExistante.trim().equals("")) {String[] valeurs = chaineExistante.split(";;");for (int i = 0; i < valeurs.length; i++) {ajouterValeur(valeurs[i]);}}}}