Subversion Repositories eFlore/Applications.coel

Compare Revisions

Ignore whitespace Rev 1467 → Rev 1468

/trunk/src/org/tela_botanica/client/composants/ChampMultiValeurs.java
6,6 → 6,7
import org.tela_botanica.client.images.Images;
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.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
185,7 → 186,7
String valeurChamp = "";
if (estComboBox) {
if (champValeurCombo.getValue() != null) {
valeurChamp = champValeurCombo.getValue().getNom();
valeurChamp = champValeurCombo.getValue().getId();
}
} else {
valeurChamp = champValeurTxt.getValue();
236,6 → 237,7
}
public void ajouterValeur(final String texte) {
LayoutContainer colonneLayout = new LayoutContainer();
colonneLayout.setLayout(new ColumnLayout());
valeurs.put(texte, colonneLayout);
255,7 → 257,7
principalLayout.remove(valeurLayout);
valeurs.remove(valeur);
 
supprimerValeurDuRecapitulatif(valeur);
actualiserLayoutGlobal();
298,9 → 300,21
}
public void supprimerValeurDuRecapitulatif(String texte) {
 
if (champRecapitulatif.getValue() != null) {
// comme c'est le nom de la valeur qui est passée en paramètre,
// on doit récupérer son id
ListStore<Valeur> valeurs = champValeurCombo.getStore();
Valeur objetValeur = valeurs.findModel("nom", texte);
String texteValeur = "";
if (objetValeur != null) {
texteValeur = objetValeur.getId();
} else {
texteValeur = texte;
}
String texteRecapitulatif = champRecapitulatif.getValue();
texteRecapitulatif = texteRecapitulatif.replace(texte + aDonnee.SEPARATEUR_VALEURS, "");
texteRecapitulatif = texteRecapitulatif.replace(texteValeur + aDonnee.SEPARATEUR_VALEURS, "");
champRecapitulatif.setValue(texteRecapitulatif);
}
}
/trunk/src/org/tela_botanica/client/composants/ChampMultiValeursMultiTypes.java
9,6 → 9,7
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.vues.Formulaire;
 
import com.extjs.gxt.ui.client.Registry;
75,6 → 76,7
}
public 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);
84,8 → 86,19
champType.setWidth(largeurType);
colonneConteneur.add(champType, new ColumnData(largeurType));
// on recupere le nom de la valeur à partir de son id
 
String texteValeur = texte;
if (estComboBox) {
ListStore<Valeur> valeursStore = champValeurCombo.getStore();
Valeur objetValeur = valeursStore.findModel("id_valeur", texte);
if (objetValeur != null) {
texteValeur = objetValeur.getNom();
}
}
Text champValeur = new Text();
champValeur.setText(texte);
champValeur.setText(texteValeur);
champValeur.setWidth(largeurChamp);
colonneConteneur.add(champValeur, new ColumnData(largeurChamp));
131,6 → 144,7
}
public void peupler(String chaineExistante) {
 
if (valeurs.size() > 0) {
reinitialiser();
}
150,18 → 164,8
} else {
texteType = idType;
}
String texteValeur = "";
if (champValeurCombo!=null) {
ListStore<Valeur> valeurStore = champValeurCombo.getStore();
Valeur objetValeur = valeurStore.findModel("id_valeur", idValeur);
if (objetValeur != null) {
texteValeur = objetValeur.getNom();
}
} else {
texteValeur = idValeur;
}
ajouterValeur(texteValeur, texteType, idType);
 
ajouterValeur(idValeur, texteType, idType);
} else {
InfoLogger.display("ChampMultiValeursMultiTypes > méthode peupler", "Erreur dans le split d'une valeur, chaine="+chaineExistante, true);
}
/trunk/src/org/tela_botanica/client/composants/pagination/ProxyStructureAPersonne.java
New file
0,0 → 1,77
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.synchronisation.Sequenceur;
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 ProxyStructureAPersonne<D> extends Proxy {
String structureId = null;
String roleId = null;
public ProxyStructureAPersonne(Sequenceur sequenceur, String structureId, String roleId) {
super(sequenceur);
this.structureId = structureId;
this.roleId = roleId;
}
@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.selectionnerStructureAPersonne(this, this.structureId, this.roleId, recherche, lc.getOffset(), lc.getLimit(), sequenceur);
}
 
@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);
}
}
 
}
/trunk/src/org/tela_botanica/client/composants/pagination/ChargeurListe.java
1,9 → 1,20
package org.tela_botanica.client.composants.pagination;
 
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.collection.CollectionAPersonne;
import org.tela_botanica.client.modeles.personne.Personne;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilString;
 
import com.extjs.gxt.ui.client.data.BaseListLoadResult;
import com.extjs.gxt.ui.client.data.BaseModelData;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.LoadEvent;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
12,9 → 23,8
public class ChargeurListe<D extends PagingLoadResult<?>> extends BasePagingLoader<D> {
 
private String recherche = "";
private Integer id = null;
private Rafraichissable vueARafraichir = null;
private boolean rafraichir = false;
private boolean doRafraichir = false;
 
@SuppressWarnings("unchecked")
public ChargeurListe(Proxy proxy, TransformateurJSONaModelData reader, Rafraichissable vueARafraichir) {
22,8 → 32,8
this.vueARafraichir = vueARafraichir;
}
public boolean load(Object loadConfig, String recherche, boolean rafraichir) {
this.rafraichir = rafraichir;
public boolean load(Object loadConfig, String recherche, boolean doRafraichir) {
this.doRafraichir = doRafraichir;
if (fireEvent(BeforeLoad, new LoadEvent(this, loadConfig))) {
lastConfig = loadConfig;
 
62,12 → 72,43
public void onFailure(Throwable caught) {
onLoadFailure(config, caught);
if (!UtilString.isEmpty(caught.getMessage())) Debug.log("[FAILURE] ChargeurListe : message="+caught.getMessage());
else Debug.log("[FAILURE] ChargeurListe : message=NULL. Peut-être le modelType est-il mal paramétré ?");
}
public void onSuccess(D result) {
onLoadSuccess(config, result);
if (rafraichir) {
/*
// SUPPRIMER LES PREFIXES
if (result instanceof BasePagingLoadResult) {
BasePagingLoadResult retourPaging = (BasePagingLoadResult)result;
List retourListe = retourPaging.getData();
for(int i=0; i< retourListe.size(); i++) {
if (retourListe.get(i) instanceof BaseModelData) {
BaseModelData model = (BaseModelData)retourListe.get(i);
Map<String, Object> a = model.getProperties();
Set<String> cles = a.keySet();
Iterator<String> it = cles.iterator();
while (it.hasNext()) {
String cle = it.next();
if (a.get(cle) != null) {
String cleObjet = "";
cleObjet = cle.replaceFirst("^[A-Za-z]+_", "");
model.set(cleObjet, a.get(cle));
model.remove(cle);
}
}
}
}
}*/
// Cas où il faut rafraichir le combo manuellement
// (cela sert pour charger la valeur initiale du combo au chargement d'un formulaire)
if (doRafraichir) {
Information info = new Information("selectionnerValeurCombo");
info.setDonnee(result);
info.setMessage("");
/trunk/src/org/tela_botanica/client/composants/pagination/Proxy.java
13,9 → 13,10
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.extjs.gxt.ui.client.data.ModelData;
import com.google.gwt.user.client.rpc.AsyncCallback;
 
public abstract class Proxy<D> extends MemoryProxy<D> implements Rafraichissable {
public abstract class Proxy<D extends ModelData> extends MemoryProxy<D> implements Rafraichissable {
 
protected Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
/trunk/src/org/tela_botanica/client/composants/pagination/TransformateurJSONaModelData.java
60,7 → 60,7
}
 
@SuppressWarnings("unchecked")
public D read(Object loadConfig, Object data) {
public D read(Object loadConfig, Object data) {
JSONObject jsonRoot = null;
if (data instanceof JSONObject) {
jsonRoot = (JSONObject) data;
68,6 → 68,7
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();
127,6 → 128,7
if (modelType.getTotalName() != null) {
totalCount = getTotalCount(jsonRoot);
}
return (D) createReturnData(loadConfig, models, totalCount);
}
 
/trunk/src/org/tela_botanica/client/composants/pagination/ProxyCollectionAPersonne.java
New file
0,0 → 1,77
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.synchronisation.Sequenceur;
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 ProxyCollectionAPersonne<D> extends Proxy {
String collectionId = null;
String roleId = null;
public ProxyCollectionAPersonne(Sequenceur sequenceur, String collectionId, String roleId) {
super(sequenceur);
this.collectionId = collectionId;
this.roleId = roleId;
}
@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.selectionnerCollectionAPersonne(this, this.collectionId, this.roleId, recherche, lc.getOffset(), lc.getLimit(), sequenceur);
}
 
@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);
}
}
 
}
/trunk/src/org/tela_botanica/client/composants/pagination/ProxyProjets.java
7,10 → 7,13
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.Information;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.ValeurListeAsyncDao;
import org.tela_botanica.client.modeles.projet.Projet;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilString;
 
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
18,6 → 21,7
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.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.user.client.rpc.AsyncCallback;
34,14 → 38,15
this.callback = callback;
this.loadConfig = loadConfig;
 
BasePagingLoadConfig lc = (BasePagingLoadConfig)loadConfig;
mediateur.selectionnerProjet(this, recherche, lc.getOffset(), lc.getLimit(), sequenceur);
BasePagingLoadConfig lc = (BasePagingLoadConfig)loadConfig;
if (UtilString.isNumber(recherche, false)) mediateur.selectionnerProjet(this, recherche, "array", true, sequenceur);
else mediateur.selectionnerProjet(this, recherche, lc.getOffset(), lc.getLimit(), sequenceur);
}
@Override
@SuppressWarnings("unchecked")
public void rafraichir(Object nouvellesDonnees) {
public void rafraichir(Object nouvellesDonnees) {
try
{
data = nouvellesDonnees;
/trunk/src/org/tela_botanica/client/composants/ChampComboBoxRechercheTempsReelPaginable.java
51,7 → 51,6
private ComboBox<ModelData> combo = null;
 
private Proxy<?> proxy = null;
private AsyncCallback callback = null;
private TransformateurJSONaModelData<PagingLoadResult<ModelData>> reader = null;
private ChargeurListe<PagingLoadResult<ModelData>> loader = null;
123,7 → 122,7
public void handleEvent(FieldEvent fe) {
// on vérifie que les touches enfoncées ne sont pas les flèches du clavier
if (fe.getKeyCode() <= 38 || fe.getKeyCode() >= 40) {
if (!fe.isNavKeyPress()) {
recherche = combo.getRawValue();
plc.setLimit(limit); plc.setOffset(start);
loader.setLimit(limit); loader.setOffset(start);
190,7 → 189,7
}
 
public void chargerValeurInitiale(String valeurInitiale, String champ)
{
{
this.valeurInitiale = valeurInitiale;
this.champValeurInitiale = champ;
 
201,11 → 200,17
Rafraichir
-----------------------------*/
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof Information) {
Information info = (Information) nouvellesDonnees;
if (info.getType().equals("selectionnerValeurCombo")) {
if (combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) Debug.log("ERREUR. Modele non trouvé");
if (combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) {
Debug.log("ERREUR. Modele non trouvé.");
Debug.log("Recherché : ["+champValeurInitiale+"]="+valeurInitiale);
Debug.log("Le magasin contient "+combo.getStore().getCount()+" éléments. Les propriétés des modèles sont :");
for (int i=0; i<combo.getStore().getCount(); i++) {
Debug.log(combo.getStore().getAt(i).getProperties().toString());
}
}
else combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale));
}
}
/trunk/src/org/tela_botanica/client/composants/GrillePaginable.java
New file
0,0 → 1,193
package org.tela_botanica.client.composants;
 
import java.util.List;
import java.util.Map;
 
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.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.composants.GrilleParametrable;
 
import com.extjs.gxt.ui.client.Style.SortDir;
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.PagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
 
public class GrillePaginable<D extends ModelData> extends ContentPanel implements Rafraichissable, GrilleParametrable<D> {
 
//-------------//
// ATTRIBUTS //
//-------------//
// Pagination
private int start = 0;
private int limit = 50;
// Récupération, stockage et pagination des données
private ModelType modelType = null;
private Proxy<D> proxy = null;
private TransformateurJSONaModelData<PagingLoadResult<D>> reader = null;
private ChargeurListe<PagingLoadResult<D>> loader = null;
private ListStore<D> storeGrille = null;
// Elements graphiques
EditorGrid<D> grillePersonne = null;
List<ColumnConfig> colonnes = null;
ColumnModel modeleDeColonnes = null;
//-------------//
// METHODES //
//-------------//
/*--------------
Constructeur
--------------*/
public GrillePaginable(ModelType modeltype, Proxy<D> proxy, List<ColumnConfig> colonnes, ColumnModel modeleDeColonnes) {
// Récupération des paramètres
this.modelType = modeltype;
this.proxy = proxy;
this.colonnes = colonnes;
this.modeleDeColonnes = modeleDeColonnes;
// Formatage du conteneur;
this.setLayout(new FitLayout());
// Création des objets pour la récupération et la pagination des données
BasePagingLoadConfig plc = new BasePagingLoadConfig();
plc.setLimit(limit);
plc.setOffset(start);
reader = new TransformateurJSONaModelData<PagingLoadResult<D>>(modelType);
loader = new ChargeurListe<PagingLoadResult<D>>(proxy, reader, this);
loader.setLimit(plc.getLimit());
loader.setOffset(plc.getOffset());
 
loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
public void handleEvent(LoadEvent be) {
 
}
});
// Création de la grille
creerGrille();
}
/*------------
Accesseurs
------------*/
public EditorGrid<D> getGrille() {
return grillePersonne;
}
public ListStore<D> getStore() {
return storeGrille;
}
public D getSelection() {
return grillePersonne.getSelectionModel().getSelectedItem();
}
/*-----------------------------
Rafraichir
-----------------------------*/
public void rafraichir(Object nouvellesDonnees) {
}
/*----------------
Méthode privées
-----------------*/
private void creerGrille() {
final PagingToolBar toolBar = new PagingToolBar(this.limit);
toolBar.bind(loader);
this.setBottomComponent(toolBar);
storeGrille = new ListStore<D>(loader);
storeGrille.addListener(Store.Add, new Listener<StoreEvent<D>>() {
public void handleEvent(StoreEvent<D> ce) {
 
}
});
storeGrille.addListener(Store.Remove, new Listener<StoreEvent<D>>() {
public void handleEvent(StoreEvent<D> ce) {
 
}
});
storeGrille.addListener(Store.Update, new Listener<StoreEvent<D>>() {
public void handleEvent(StoreEvent<D> ce) {
 
}
});
RowNumberer pluginLigneNumero = new RowNumberer();
GridSelectionModel<D> modeleDeSelection = new GridSelectionModel<D>();
grillePersonne = new EditorGrid<D>(storeGrille, modeleDeColonnes);
grillePersonne.setHeight("100%");
grillePersonne.setBorders(true);
grillePersonne.setSelectionModel(modeleDeSelection);
grillePersonne.addPlugin(pluginLigneNumero);
grillePersonne.getView().setForceFit(true);
grillePersonne.setAutoExpandColumn("fmt_nom_complet");
grillePersonne.setStripeRows(true);
grillePersonne.setBorders(true);
grillePersonne.setStateful(true);
grillePersonne.addListener(Events.Attach, new Listener<GridEvent<D>>() {
public void handleEvent(GridEvent<D> be) {
PagingLoadConfig config = new BasePagingLoadConfig();
config.setOffset(0);
config.setLimit(50);
Map<String, Object> state = grillePersonne.getState();
if (state.containsKey("offset")) {
int offset = (Integer)state.get("offset");
int limit = (Integer)state.get("limit");
config.setOffset(offset);
config.setLimit(limit);
}
if (state.containsKey("sortField")) {
config.setSortField((String)state.get("sortField"));
config.setSortDir(SortDir.valueOf((String)state.get("sortDir")));
}
loader.load(config);
}
});
this.add(grillePersonne);
}
}
/trunk/src/org/tela_botanica/client/composants/GrilleParametrable.java
New file
0,0 → 1,7
package org.tela_botanica.client.composants;
 
public interface GrilleParametrable<D> {
 
}