/branches/v1.0-syrah/src/org/tela_botanica/client/Modele.java |
---|
4,6 → 4,7 |
import java.util.Iterator; |
import java.util.List; |
import org.tela_botanica.client.configuration.Configuration; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Utilisateur; |
import org.tela_botanica.client.modeles.UtilisateurAsyncDao; |
35,6 → 36,7 |
import org.tela_botanica.client.util.Debug; |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.data.DataProxy; |
import com.google.gwt.core.client.GWT; |
// TODO : le transformer en SINGLETON |
53,9 → 55,18 |
lsDao.obtenirListe(id); |
} |
public void obtenirListeValeurs(Rafraichissable vue, String type, int id) { |
ValeurListeAsyncDao lsDao = new ValeurListeAsyncDao(vue); |
lsDao.obtenirListe(type, String.valueOf(id)); |
} |
public void obtenirListeRegion(Rafraichissable vue, Integer id, String region) { |
public void obtenirListeValeurs(Rafraichissable vue, Integer listId, boolean pagination, String recherche, int start, int nbElements) { |
ValeurListeAsyncDao lsDao = new ValeurListeAsyncDao(vue); |
lsDao.obtenirListe(listId, pagination, recherche, start, nbElements); |
} |
public void obtenirListeRegion(Rafraichissable vue, Integer id, String region) { |
ValeurListeAsyncDao lsDao = new ValeurListeAsyncDao(vue); |
lsDao.selectionner("abv", id, region, null); |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/HashMapComposants.java |
---|
32,10 → 32,18 |
return (ChampMultiValeurs) get(name); |
} |
public ChampMultiValeursPaginable getChampMultiValeursPaginable(String name) { |
return (ChampMultiValeursPaginable) get(name); |
} |
public ChampMultiValeursMultiTypes getChampMultiValeursMultiTypes(String name) { |
return (ChampMultiValeursMultiTypes) get(name); |
} |
public ChampMultiValeursMultiTypesPaginable getChampMultiValeursMultiTypesPaginable(String name) { |
return (ChampMultiValeursMultiTypesPaginable) get(name); |
} |
public ChampMultiValeursImage getChampMultiValeursImage(String name) { |
return (ChampMultiValeursImage) get(name); |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/ChampMultiValeursMultiTypesPaginable.java |
---|
New file |
0,0 → 1,281 |
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.configuration.Configuration; |
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.ValeurListe; |
import org.tela_botanica.client.modeles.aDonnee; |
import org.tela_botanica.client.util.Debug; |
import org.tela_botanica.client.vues.Formulaire; |
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.Component; |
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.RowLayout; |
public class ChampMultiValeursMultiTypesPaginable extends ChampMultiValeursPaginable implements Rafraichissable { |
//-------------// |
// ATTRIBUTS // |
//-------------// |
// Elements pour le champ 'types' |
ColumnData colonneChampTypes = null; |
ChampComboBoxRechercheTempsReelPaginable champTypesComboBox = null; |
int largeurChampTypes = 200; |
String displayNameChampTypes = "nom"; |
// Elements pour gérer le type de valeurs que contient le champ |
Proxy proxyChampTypes = null; |
ModelType modeltypeChampTypes = null; |
// Variables de traitement |
HashMap<Integer, String> tempMapValeurs = null; |
//-------------// |
// METHODES // |
//-------------// |
/*-------------- |
Constructeur |
--------------*/ |
public ChampMultiValeursMultiTypesPaginable(String label, int largeurTotale, boolean estCombobox, ModelType modeltypeChampValeur, Proxy proxyChampValeur, String displayNameChampValeur, ModelType modeltypeChampTypes, Proxy proxyChampTypes, String displayNameChampTypes) { |
super(label, largeurTotale, estCombobox, modeltypeChampValeur, proxyChampValeur, displayNameChampValeur); |
this.proxyChampTypes = proxyChampTypes; |
this.modeltypeChampTypes = modeltypeChampTypes; |
this.displayNameChampTypes = displayNameChampTypes; |
initialiserChampMultiValeursMultiTypesPaginable(label); |
} |
/*------------ |
Accesseurs |
------------*/ |
//------------// |
// Get //------------------------------------------------------------ |
public ChampComboBoxRechercheTempsReelPaginable getChampTypesComboBox() { |
return this.champTypesComboBox; |
} |
//------------// |
// Set //------------------------------------------------------------ |
@Override |
public void setLargeurTotale(int largeurTotale) { |
this.largeurTotale = largeurTotale; |
largeurChampValeur = largeurTotale - largeurBouton - largeurChampTypes; |
} |
/*------------------------------------------- |
Méthodes protégées et méthodes publiques |
--------------------------------------------*/ |
@Override |
public void rafraichir(Object nouvellesDonnees) { |
super.rafraichir(nouvellesDonnees); |
if (nouvellesDonnees instanceof ValeurListe) { |
Valeur v = ((ValeurListe)nouvellesDonnees).toList().get(0); |
ajouterValeur(tempMapValeurs.get(Integer.parseInt(v.getId())), v.getNom(), v.getId()); |
} |
} |
@Override |
protected void ajouterValeur(final String texte, final String type, final String id) { |
LayoutContainer colonneConteneur = new LayoutContainer(); |
colonneConteneur.setLayout(new ColumnLayout()); |
valeurs.put(id + aDonnee.SEPARATEUR_TYPE_VALEUR + texte, colonneConteneur); |
Text champType = new Text(); |
champType.setText(type + " : "); |
champType.setWidth(largeurChampTypes); |
colonneConteneur.add(champType, new ColumnData(largeurChampTypes)); |
Text champValeur = new Text(); |
champValeur.setText(texte); |
champValeur.setWidth(largeurChampTypes); |
colonneConteneur.add(champValeur, new ColumnData(largeurChampTypes)); |
Button supprimerBouton = new Button(); |
supprimerBouton.setIcon(Images.ICONES.supprimer()); |
supprimerBouton.setText(boutonSupprimerLabel); |
supprimerBouton.setData("valeur", id + aDonnee.SEPARATEUR_TYPE_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(); |
} |
}); |
colonneConteneur.add(supprimerBouton, new ColumnData(largeurBouton)); |
// Ajout du layout de la valeur au layout principal |
principalLayout.add(colonneConteneur); |
// Ajout de la valeur au champ récapitulatif des valeurs ajoutées |
if (champValeurEstComboBox && champValeurComboBox!=null && champValeurComboBox.getValeur()!=null) { |
// FIXME |
// je comprends pas la raison d'être de cette ligne |
ajouterValeurAuRecapitulatif(champValeurComboBox.getValeur().getId(), id); |
} else { |
ajouterValeurAuRecapitulatif(texte, id); |
} |
reinitialiserChamp(); |
actualiserLayoutGlobal(); |
} |
@Override |
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++) { |
String[] idEtValeur = valeurs[i].split(aDonnee.SEPARATEUR_TYPE_VALEUR); |
String idType = idEtValeur[0]; |
String idValeur = idEtValeur[1]; |
// Champ Valeur |
tempMapValeurs.put(Integer.parseInt(idType), idValeur); |
// Champ Types |
mediateur.obtenirListeValeurEtRafraichir(this, Integer.parseInt(idType)); |
} |
} |
} |
/*------------------ |
Méthodes privées |
------------------*/ |
private void initialiserChampMultiValeursMultiTypesPaginable(String label) { |
setLargeurTotale(largeurTotale); |
tempMapValeurs = new HashMap<Integer,String>(); |
creerChampMultiValeursMultiTypes(); |
} |
private void creerChampMultiValeursMultiTypes() { |
/* Creation du champ Types */ |
champTypesComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyChampTypes, modeltypeChampTypes, displayNameChampTypes); |
champTypesComboBox.setWidth(largeurChampTypes); |
champTypesComboBox.getCombo().setEmptyText("Type..."); |
champTypesComboBox.addListener(Events.Select, new Listener<FieldEvent>() { |
public void handleEvent(FieldEvent fe) { |
} |
}); |
/* Placement des éléments dans le conteneur */ |
// le champ "types" doit être graphiquement placé avant les autres champs, |
// on doit donc retirer ces derniers avant d'insérer le champ "types" |
colonneConteneur.removeAll(); |
colonneConteneur.setWidth(largeurTotale); |
colonneChampTypes = new ColumnData(largeurChampTypes); |
colonneChampTypes.setWidth(largeurChampTypes); |
colonneConteneur.add(champTypesComboBox, colonneChampTypes); |
if (champValeurEstComboBox) { |
champValeurComboBox.setWidth(largeurChampValeur); |
colonneChampValeur.setWidth(largeurChampValeur); |
colonneConteneur.add(champValeurComboBox, colonneChampValeur); |
} else { |
champValeurTxt.setWidth(largeurChampValeur); |
colonneChampValeur.setWidth(largeurChampValeur); |
colonneConteneur.add(champValeurTxt, colonneChampValeur); |
} |
ajouterBouton.setWidth(largeurBouton); |
colonneBoutonAjouter.setWidth(largeurBouton); |
colonneConteneur.add(ajouterBouton, colonneBoutonAjouter); |
/* Modification de l'écouteur du bouton Ajouter */ |
ajouterBouton.removeAllListeners(); |
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 = champValeurComboBox.getValeur().getNom(); |
} |
} else { |
valeurChamp = champValeurTxt.getValue(); |
} |
// validation de la valeur avant ajout |
if ((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 { |
String type = ""; |
String id = ""; |
Valeur valeur = champTypesComboBox.getValeur(); |
if (valeur != null) { |
type = valeur.getNom(); |
id = valeur.getId(); |
} else { |
type = champTypesComboBox.getCombo().getRawValue(); |
id = type; |
} |
if (type.trim().equals("")) { |
MessageBox.alert(Mediateur.i18nM.titreErreurSaisie(), Mediateur.i18nM.typeChampMulti(), null); |
} else { |
ajouterValeur(valeurChamp, type, id); |
} |
} |
} |
} |
}); |
} |
private void ajouterValeurAuRecapitulatif(String texte, String id) { |
String texteRecapitulatif = ""; |
if (champRecapitulatif.getValue() != null) { |
texteRecapitulatif = champRecapitulatif.getValue(); |
} |
texteRecapitulatif += id + aDonnee.SEPARATEUR_TYPE_VALEUR + texte + aDonnee.SEPARATEUR_VALEURS; |
champRecapitulatif.setValue(texteRecapitulatif); |
} |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/ChampMultiValeursPaginable.java |
---|
New file |
0,0 → 1,348 |
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 champ |
Proxy proxyChampValeur = null; |
ModelType modeltypeChampValeur = null; |
String displayNameChampValeur = "nom"; |
// Elements pour l'UI |
LayoutContainer 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]); |
} |
} |
} |
@Override |
public 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 principal |
principalLayout.add(colonneLayout); |
// Ajout de la valeur au champ récapitulatif des valeurs ajoutées |
ajouterValeurAuRecapitulatif(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 = champValeurComboBox.getValeur().getNom(); |
} |
} else { |
valeurChamp = champValeurTxt.getValue(); |
} |
// validation de la valeur avant ajout |
if ((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); |
} |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/pagination/ProxyValeur.java |
---|
New file |
0,0 → 1,73 |
package org.tela_botanica.client.composants.pagination; |
import java.util.ArrayList; |
import java.util.HashMap; |
import java.util.List; |
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.ValeurListe; |
import org.tela_botanica.client.modeles.ValeurListeAsyncDao; |
import org.tela_botanica.client.util.Debug; |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig; |
import com.extjs.gxt.ui.client.data.BasePagingLoadResult; |
import com.extjs.gxt.ui.client.data.DataReader; |
import com.extjs.gxt.ui.client.data.MemoryProxy; |
import com.extjs.gxt.ui.client.data.ModelData; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.user.client.rpc.AsyncCallback; |
public class ProxyValeur<D> extends Proxy { |
private String nomListe = ""; |
public ProxyValeur(String nomListe) { |
super(); |
this.nomListe = nomListe; |
} |
@Override |
public void load(TransformateurJSONaModelData reader, Object loadConfig, AsyncCallback callback, String recherche) { |
this.reader = reader; |
this.callback = callback; |
this.loadConfig = loadConfig; |
BasePagingLoadConfig lc = (BasePagingLoadConfig)loadConfig; |
mediateur.obtenirListeValeurEtRafraichir(this, nomListe, true, recherche, lc.getOffset(), lc.getLimit()); |
} |
@Override |
@SuppressWarnings("unchecked") |
public void rafraichir(Object nouvellesDonnees) { |
try |
{ |
data = nouvellesDonnees; |
D d = null; |
if (reader != null) |
{ |
d = (D) reader.read(loadConfig, data); |
} |
else |
{ |
d = (D) data; |
if (d instanceof List) |
{ |
d = (D) new ArrayList((List) d); |
} |
} |
callback.onSuccess(d); |
} |
catch (Exception e) |
{ |
callback.onFailure(e); |
} |
} |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/pagination/ChargeurListe.java |
---|
New file |
0,0 → 1,62 |
package org.tela_botanica.client.composants.pagination; |
import com.extjs.gxt.ui.client.data.BasePagingLoader; |
import com.extjs.gxt.ui.client.data.LoadEvent; |
import com.extjs.gxt.ui.client.data.PagingLoadResult; |
import com.google.gwt.user.client.rpc.AsyncCallback; |
public class ChargeurListe<D extends PagingLoadResult<?>> extends BasePagingLoader<D> { |
private String recherche = ""; |
@SuppressWarnings("unchecked") |
public ChargeurListe(Proxy proxy, TransformateurJSONaModelData reader) { |
super(proxy, reader); |
} |
public boolean load(Object loadConfig, String recherche) { |
if (fireEvent(BeforeLoad, new LoadEvent(this, loadConfig))) { |
lastConfig = loadConfig; |
this.recherche = recherche; |
loadData(loadConfig, recherche); |
return true; |
} |
else return false; |
} |
public boolean load(Object loadConfig) { |
if (fireEvent(BeforeLoad, new LoadEvent(this, loadConfig))) { |
lastConfig = loadConfig; |
loadData(loadConfig, recherche); |
return true; |
} |
return false; |
} |
public void load(int offset, int limit) { |
this.offset = offset; |
this.limit = limit; |
load(); |
} |
public boolean load() { |
Object config = (reuseConfig && lastConfig != null) ? lastConfig : newLoadConfig(); |
config = prepareLoadConfig(config); |
return load(config); |
} |
@SuppressWarnings("unchecked") |
protected void loadData(final Object config, String recherche) { |
AsyncCallback<D> callback = new AsyncCallback<D>() { |
public void onFailure(Throwable caught) { |
onLoadFailure(config, caught); |
} |
public void onSuccess(D result) { |
onLoadSuccess(config, result); |
} |
}; |
((Proxy)proxy).load((TransformateurJSONaModelData)reader, config, callback, recherche); |
} |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/pagination/Proxy.java |
---|
New file |
0,0 → 1,55 |
package org.tela_botanica.client.composants.pagination; |
import java.util.ArrayList; |
import java.util.List; |
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.util.Debug; |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig; |
import com.extjs.gxt.ui.client.data.DataReader; |
import com.extjs.gxt.ui.client.data.MemoryProxy; |
import com.google.gwt.user.client.rpc.AsyncCallback; |
public abstract class Proxy<D> extends MemoryProxy<D> implements Rafraichissable { |
protected Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR); |
protected DataReader<D> reader = null; |
protected Object loadConfig = null; |
protected AsyncCallback<D> callback = null; |
protected static Object data; |
public Proxy() { |
super(data); |
} |
public abstract void load(TransformateurJSONaModelData<D> reader, Object loadConfig, AsyncCallback<D> callback, String recherche); |
@Override |
@SuppressWarnings("unchecked") |
public void rafraichir(Object nouvellesDonnees) { |
try { |
data = nouvellesDonnees; |
D d = null; |
if (reader != null) { |
d = reader.read(loadConfig, data); |
} else { |
d = (D) data; |
if (d instanceof List) { |
d = (D) new ArrayList((List) d); |
} |
} |
callback.onSuccess(d); |
} catch (Exception e) { |
callback.onFailure(e); |
} |
} |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/pagination/TransformateurJSONaModelData.java |
---|
New file |
0,0 → 1,133 |
package org.tela_botanica.client.composants.pagination; |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
import org.tela_botanica.client.modeles.ValeurListe; |
import org.tela_botanica.client.util.Debug; |
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig; |
import com.extjs.gxt.ui.client.data.BasePagingLoadResult; |
import com.extjs.gxt.ui.client.data.DataField; |
import com.extjs.gxt.ui.client.data.DataReader; |
import com.extjs.gxt.ui.client.data.JsonPagingLoadResultReader; |
import com.extjs.gxt.ui.client.data.JsonReader; |
import com.extjs.gxt.ui.client.data.ListLoadResult; |
import com.extjs.gxt.ui.client.data.ModelData; |
import com.extjs.gxt.ui.client.data.ModelType; |
import com.extjs.gxt.ui.client.data.PagingLoadConfig; |
import com.extjs.gxt.ui.client.data.PagingLoadResult; |
import com.google.gwt.core.client.JavaScriptObject; |
import com.google.gwt.i18n.client.DateTimeFormat; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONNumber; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.json.client.JSONValue; |
public class TransformateurJSONaModelData<D> extends JsonPagingLoadResultReader<D> { |
private ModelType modelType = null; |
public TransformateurJSONaModelData(ModelType modelType) { |
super(modelType); |
this.modelType = modelType; |
} |
@SuppressWarnings("unchecked") |
@Override |
protected Object createReturnData(Object loadConfig, List<ModelData> records, int totalCount) { |
ListLoadResult<?> result = (ListLoadResult<?>) super.createReturnData(loadConfig, records, totalCount); |
if (result instanceof PagingLoadResult) { |
PagingLoadResult<?> r = (PagingLoadResult<?>) result; |
r.setTotalLength(totalCount); |
if (loadConfig instanceof PagingLoadConfig) { |
PagingLoadConfig config = (PagingLoadConfig) loadConfig; |
r.setOffset(config.getOffset()); |
} |
} |
return result; |
} |
@Override |
protected BasePagingLoadResult<ModelData> newLoadResult(Object loadConfig, List<ModelData> models) { |
return new BasePagingLoadResult<ModelData>(models); |
} |
@SuppressWarnings("unchecked") |
public D read(Object loadConfig, Object data) { |
JSONObject jsonRoot = null; |
if (data instanceof JSONObject) { |
jsonRoot = (JSONObject) data; |
} |
JSONArray root = (JSONArray) jsonRoot.get(modelType.getRoot()); |
int size = root.size(); |
ArrayList<ModelData> models = new ArrayList<ModelData>(); |
for (int i = 0; i < size; i++) { |
JSONObject obj = (JSONObject) root.get(i); |
ModelData model = newModelInstance(); |
for (int j = 0; j < modelType.getFieldCount(); j++) { |
DataField field = modelType.getField(j); |
String name = field.getName(); |
Class type = field.getType(); |
String map = field.getMap() != null ? field.getMap() : field.getName(); |
JSONValue value = obj.get(map); |
if (value == null) continue; |
if (value.isArray() != null) { |
// nothing |
} else if (value.isBoolean() != null) { |
model.set(name, value.isBoolean().booleanValue()); |
} else if (value.isNumber() != null) { |
if (type != null) { |
Double d = value.isNumber().doubleValue(); |
if (type.equals(Integer.class)) { |
model.set(name, d.intValue()); |
} else if (type.equals(Long.class)) { |
model.set(name, d.longValue()); |
} else if (type.equals(Float.class)) { |
model.set(name, d.floatValue()); |
} else { |
model.set(name, d); |
} |
} else { |
model.set(name, value.isNumber().doubleValue()); |
} |
} else if (value.isObject() != null) { |
// nothing |
} else if (value.isString() != null) { |
String s = value.isString().stringValue(); |
if (type != null) { |
if (type.equals(Date.class)) { |
if ("timestamp".equals(field.getFormat())) { |
Date d = new Date(Long.parseLong(s) * 1000); |
model.set(name, d); |
} else { |
DateTimeFormat format = DateTimeFormat.getFormat(field.getFormat()); |
Date d = format.parse(s); |
model.set(name, d); |
} |
} |
} else { |
model.set(name, s); |
} |
} else if (value.isNull() != null) { |
model.set(name, null); |
} |
} |
models.add(model); |
} |
int totalCount = models.size(); |
if (modelType.getTotalName() != null) { |
totalCount = getTotalCount(jsonRoot); |
} |
return (D) createReturnData(loadConfig, models, totalCount); |
} |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/composants/ChampComboBoxRechercheTempsReelPaginable.java |
---|
New file |
0,0 → 1,167 |
package org.tela_botanica.client.composants; |
import java.util.List; |
import org.tela_botanica.client.composants.pagination.ChargeurListe; |
import org.tela_botanica.client.composants.pagination.Proxy; |
import org.tela_botanica.client.composants.pagination.TransformateurJSONaModelData; |
import org.tela_botanica.client.modeles.Valeur; |
import org.tela_botanica.client.util.Debug; |
import com.extjs.gxt.ui.client.event.BaseEvent; |
import com.extjs.gxt.ui.client.event.Events; |
import com.extjs.gxt.ui.client.event.Listener; |
import com.extjs.gxt.ui.client.store.ListStore; |
import com.extjs.gxt.ui.client.widget.LayoutContainer; |
import com.extjs.gxt.ui.client.widget.VerticalPanel; |
import com.extjs.gxt.ui.client.widget.form.ComboBox; |
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig; |
import com.extjs.gxt.ui.client.data.LoadEvent; |
import com.extjs.gxt.ui.client.data.Loader; |
import com.extjs.gxt.ui.client.data.ModelData; |
import com.extjs.gxt.ui.client.data.ModelType; |
import com.extjs.gxt.ui.client.data.PagingLoadResult; |
public class ChampComboBoxRechercheTempsReelPaginable extends LayoutContainer { |
//-------------// |
// ATTRIBUTS // |
//-------------// |
private ListStore<ModelData> store = null; |
private ComboBox<ModelData> combo = null; |
private String recherche = ""; |
private Proxy<?> proxy = null; |
private TransformateurJSONaModelData<PagingLoadResult<ModelData>> reader = null; |
private ChargeurListe<PagingLoadResult<ModelData>> loader = null; |
private int start = 0; |
private int limit = 10; |
private int largeur = 200; |
private BasePagingLoadConfig plc = null; |
private ModelType modeltype = null; |
private String displayName = ""; |
//-------------// |
// METHODES // |
//-------------// |
/*-------------- |
Constructeur |
--------------*/ |
public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modeltype, String displayName) { |
this.modeltype = modeltype; |
this.proxy = proxy; |
this.displayName = displayName; |
plc = new BasePagingLoadConfig(); |
plc.setLimit(limit); |
plc.setOffset(start); |
reader = new TransformateurJSONaModelData<PagingLoadResult<ModelData>>(modeltype); |
loader = new ChargeurListe<PagingLoadResult<ModelData>>(proxy, reader); |
loader.setLimit(plc.getLimit()); |
loader.setOffset(plc.getOffset()); |
loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() { |
public void handleEvent(LoadEvent be) { |
be.<ModelData> getConfig().set("start", be.<ModelData> getConfig().get("offset")); |
} |
}); |
loader.addListener(Loader.Load, new Listener<LoadEvent>() { |
public void handleEvent(LoadEvent be) { |
} |
}); |
loader.addListener(Loader.LoadException, new Listener<LoadEvent>() { |
public void handleEvent(LoadEvent be) { |
} |
}); |
combo = new ComboBox<ModelData>(); |
combo.setWidth(largeur); |
combo.setDisplayField(displayName); |
combo.setHideTrigger(false); |
combo.setPageSize(plc.getLimit()); |
store = new ListStore<ModelData>(loader); |
combo.setStore(store); |
loader.load(plc, recherche); |
combo.addListener(Events.KeyUp, new Listener<BaseEvent>() { |
public void handleEvent(BaseEvent be) { |
recherche = combo.getRawValue(); |
plc.setLimit(limit); plc.setOffset(start); |
loader.setLimit(limit); loader.setOffset(start); |
loader.load(plc, recherche); |
} |
}); |
VerticalPanel vp = new VerticalPanel(); |
vp.add(combo); |
add(vp); |
} |
/*------------ |
Accesseurs |
------------*/ |
public ComboBox<ModelData> getCombo() |
{ |
return this.combo; |
} |
public Valeur getValeur() |
{ |
return new Valeur(combo.getSelection().get(0)); |
} |
public ListStore<?> getStore() |
{ |
return combo.getStore(); |
} |
public void setWidth(int largeur) |
{ |
this.largeur = largeur; |
this.combo.setWidth(largeur); |
} |
/*----------------------------- |
Gestion du contenu du champ |
-----------------------------*/ |
public List<ModelData> collecterValeursDuChamp() |
{ |
return combo.getSelection(); |
} |
public void peuplerChamp(List<ModelData> selection) |
{ |
combo.setSelection(selection); |
} |
/*---------------- |
Méthode privées |
-----------------*/ |
} |
/branches/v1.0-syrah/src/org/tela_botanica/client/Mediateur.java |
---|
70,6 → 70,7 |
import com.extjs.gxt.ui.client.GXT; |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.Style.LayoutRegion; |
import com.extjs.gxt.ui.client.data.DataProxy; |
import com.extjs.gxt.ui.client.event.Listener; |
import com.extjs.gxt.ui.client.event.MessageBoxEvent; |
import com.extjs.gxt.ui.client.util.Margins; |
360,21 → 361,29 |
panneauCentre.rafraichir(info); |
} |
} |
public void modifierUtilisateur() { |
Utilisateur utilisateurCourant = (Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT); |
panneauNord.rafraichir(utilisateurCourant); |
modele.modifierUtilisateur(this, utilisateurCourant); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DES VALEURS ET LISTES |
//+----------------------------------------------------------------------------------------------------------------+ |
public void obtenirListeValeurEtRafraichir(Rafraichissable vueARafraichir, int listeId) { |
modele.obtenirListeValeurs(vueARafraichir, "identifiant", listeId); |
} |
public void obtenirListeValeurEtRafraichir(Rafraichissable vueARafraichir, String listeId) { |
modele.obtenirListeValeurs(vueARafraichir, ((Configuration) Registry.get(RegistreId.CONFIG)).getListeId(listeId)); |
} |
public void obtenirListeValeurEtRafraichir(Rafraichissable vueARafraichir, String nomListe, boolean pagination, String recherche, int start, int nbElements) { |
modele.obtenirListeValeurs(vueARafraichir, ((Configuration) Registry.get(RegistreId.CONFIG)).getListeId(nomListe), pagination, recherche, start, nbElements); |
} |
public void obtenirValeurEtRafraichir(Rafraichissable vue, String listeId, String identifiantValeur) { |
modele.obtenirValeur(vue, "abv", ((Configuration) Registry.get(RegistreId.CONFIG)).getListeId(listeId), identifiantValeur); |
} |