Subversion Repositories eFlore/Applications.coel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 68 → Rev 69

/trunk/src/org/tela_botanica/client/Modele.java
1,10 → 1,10
package org.tela_botanica.client;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ListeStructure;
import org.tela_botanica.client.modeles.ListeStructureAsyncDao;
import org.tela_botanica.client.modeles.StructureListe;
import org.tela_botanica.client.modeles.StructureListeAsyncDao;
import org.tela_botanica.client.modeles.Utilisateur;
import org.tela_botanica.client.modeles.UtilisateurAsyncDAO;
import org.tela_botanica.client.modeles.UtilisateurAsyncDao;
 
import com.extjs.gxt.ui.client.Registry;
 
16,8 → 16,8
}
 
public void rafraichir(Object nouvelleDonnees) {
if (nouvelleDonnees instanceof ListeStructure) {
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).afficherListeInstitutions((ListeStructure) nouvelleDonnees);
if (nouvelleDonnees instanceof StructureListe) {
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).afficherListeInstitutions((StructureListe) nouvelleDonnees);
} else if (nouvelleDonnees instanceof Utilisateur) {
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).mettreAJourEtatIdentification((Utilisateur) nouvelleDonnees);
}
24,7 → 24,7
}
public void obtenirListeInstitutions() {
ListeStructureAsyncDao lsDao = new ListeStructureAsyncDao(this);
StructureListeAsyncDao lsDao = new StructureListeAsyncDao(this);
lsDao.obtenirListeInstitution();
}
 
32,12 → 32,12
Utilisateur utilisateur = (Utilisateur) Registry.get(RegistreId.UTILISATEUR);
utilisateur.setLogin(login);
utilisateur.setMotDePasse(mdp);
UtilisateurAsyncDAO uDao = new UtilisateurAsyncDAO(this);
UtilisateurAsyncDao uDao = new UtilisateurAsyncDao(this);
uDao.connecterUtilisateur();
}
public void deconnecterUtilisateur() {
UtilisateurAsyncDAO uDao = new UtilisateurAsyncDAO(this);
UtilisateurAsyncDao uDao = new UtilisateurAsyncDao(this);
uDao.deconnecterUtilisateur();
}
 
/trunk/src/org/tela_botanica/client/composants/IdentificationFenetre.java
37,7 → 37,7
setLayout(layout);
 
setButtons("");
setIconStyle("user");
setIconStyle("icone-utilisateur");
setHeading("Collections en ligne - Identification");
setModal(true);
setBodyBorder(true);
/trunk/src/org/tela_botanica/client/composants/ParametreFenetre.java
18,19 → 18,23
setSize(500, 300);
setPlain(true);
setHeading("Paramêtres et préférences");
setIconStyle("icone-appli");
setLayout(new FitLayout());
TabPanel panneaux = new TabPanel();
panneaux.setBorders(false);
TabItem parametresOnglet = new TabItem("Paramêtres");
parametresOnglet.setIconStyle("icone-param");
parametresOnglet.addText("Paramêtres de l'application...");
parametresOnglet.addStyleName("pad-text");
TabItem preferencesOnglet = new TabItem("Préférences");
preferencesOnglet.addText("Préférences de l'application...");
preferencesOnglet.setIconStyle("icone-preference");
preferencesOnglet.addStyleName("pad-text");
TabItem aproposOnglet = new TabItem("A propos...");
aproposOnglet.setIconStyle("icone-information");
aproposOnglet.addText("<h1>"+(String) Registry.get(RegistreId.APPLI_NOM)+"</h1>");
aproposOnglet.addText("Code : "+(String) Registry.get(RegistreId.APPLI_CODE));
aproposOnglet.addText("Version : "+(String) Registry.get(RegistreId.APPLI_VERSION));
/trunk/src/org/tela_botanica/client/composants/AideFenetre.java
1,14 → 1,10
package org.tela_botanica.client.composants;
 
import java.io.Console;
import java.util.ArrayList;
import java.util.List;
 
import org.tela_botanica.client.ComposantClass;
import org.tela_botanica.client.ComposantId;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.modeles.Aide;
import org.tela_botanica.client.modeles.Aide;
import org.tela_botanica.client.modeles.Configuration;
import org.tela_botanica.client.modeles.Menu;
 
17,29 → 13,16
import com.extjs.gxt.ui.client.Style.LayoutRegion;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.binder.TreeBinder;
import com.extjs.gxt.ui.client.data.BaseTreeLoader;
import com.extjs.gxt.ui.client.data.BaseTreeModel;
import com.extjs.gxt.ui.client.data.DataProxy;
import com.extjs.gxt.ui.client.data.MemoryProxy;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelStringProvider;
import com.extjs.gxt.ui.client.data.TreeLoader;
import com.extjs.gxt.ui.client.data.TreeModel;
import com.extjs.gxt.ui.client.data.TreeModelReader;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.event.TreeEvent;
import com.extjs.gxt.ui.client.event.WidgetListener;
import com.extjs.gxt.ui.client.event.WindowListener;
import com.extjs.gxt.ui.client.fx.FxConfig;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.util.Format;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.util.Params;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.Html;
import com.extjs.gxt.ui.client.widget.HtmlContainer;
import com.extjs.gxt.ui.client.widget.StoreFilterField;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
49,10 → 32,6
import com.extjs.gxt.ui.client.widget.tree.Tree;
import com.extjs.gxt.ui.client.widget.tree.TreeItem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Node;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestBuilder.Method;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
 
59,9 → 38,9
public class AideFenetre extends Dialog {
 
private Tree arbre = null;
private TreeStore<Aide> magazin = null;
private TreeBinder<Aide> binder = null;
private StoreFilterField<Aide> filtre = null;
private TreeStore<Menu> magazin = null;
private TreeBinder<Menu> binder = null;
private StoreFilterField<Menu> filtre = null;
private VerticalPanel sommairePanneau = null;
private ContentPanel contenuPanneau = null;
private HtmlContainer contenuHtml = null;
68,8 → 47,8
public AideFenetre() {
setBodyBorder(false);
setButtons(Dialog.OK);
setIconStyle("icon-app-side");
setButtons(Dialog.OK);
setIconStyle("icone-appli-panneau-liste");
setHeading("COEL - Aide");
setWidth(675);
setHeight(400);
80,7 → 59,7
sommairePanneau = new VerticalPanel();
sommairePanneau.setSpacing(8);
sommairePanneau.addStyleName("x-small-editor");
BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 175, 100, 250);
BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 200, 175, 250);
sommaireDisposition.setMargins(new Margins(0, 5, 0, 0));
sommaireDisposition.setSplit(true);
sommaireDisposition.setCollapsible(true);
95,20 → 74,32
// Panneau Central : contenu
contenuPanneau = new ContentPanel();
contenuPanneau.setScrollMode(Scroll.AUTO);
// Barre d'outils
Button imprimerBtn = new Button(null, new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
Window.print();
}
});
imprimerBtn.setIconStyle(ComposantClass.ICONE_IMPRIMER);
contenuPanneau.getHeader().insertTool(imprimerBtn, 0);
BorderLayoutData contenuDisposition = new BorderLayoutData(LayoutRegion.CENTER);
add(contenuPanneau, contenuDisposition);
// Chargement de la page racine
arbre.setSelectedItem(arbre.getItem(0));
selectionSommaire((String) arbre.getItem(0).getModel().get("code"));
// FIXME : apparement il faut ouvrir chaque menu pour pouvoir sélectionner la bonne page... Une meilleure solution doit exister.
arbre.getItem(0).toggle();
arbre.getItem(0).getItem(0).toggle();
arbre.setSelectedItem(arbre.getItem(0).getItem(0).getItem(0));
selectionSommaire((String) arbre.getItem(0).getItem(0).getModel().get("code"));
}
private void chargerSommaireArbre() {
arbre = new Tree();
magazin = new TreeStore<Aide>();
arbre.setStyleName("no-icon");
magazin = new TreeStore<Menu>();
magazin.add(getSommaireArbreModele(), true);
binder = new TreeBinder<Aide>(arbre, magazin);
binder = new TreeBinder<Menu>(arbre, magazin);
binder.setAutoLoad(true);
binder.setDisplayProperty("nom");
binder.init();
115,6 → 106,8
 
inititialiserSommaireArbreFiltre();
filtre.bind(magazin);
filtre.setWidth(170);
filtre.setToolTip("Filtrer le sommaire");
arbre.addListener(Events.OnClick, new Listener<TreeEvent>(){
 
public void handleEvent(TreeEvent be) {
157,13 → 150,13
}
private void inititialiserSommaireArbreFiltre() {
filtre = new StoreFilterField<Aide>() {
filtre = new StoreFilterField<Menu>() {
@Override
protected boolean doSelect(Store<Aide> magazin, Aide parent, Aide enregistrement, String propriete, String filtre) {
// Seul les feuilles sont traitées par le filtre
//if (enregistrement instanceof AideModelData) {
//return false;
//}
protected boolean doSelect(Store<Menu> magazin, Menu parent, Menu enregistrement, String propriete, String filtre) {
// Seul les feuilles sont traitées par le filtre
if (enregistrement instanceof Menu) {
return false;
}
String nom = enregistrement.getNom();
nom = nom.toLowerCase();
if (nom.startsWith(filtre.toLowerCase())) {
175,32 → 168,29
}
public static List<Aide> getSommaireArbreModele() {
List<Aide> l = new ArrayList<Aide>();
l.add(new Aide("Accueil", "AideCoelAccueil", "Jean-Pascal MILCENT", "debutant"));
l.add(new Aide("S'identifier", "AideCoelIdentification", "Jean-Pascal MILCENT", "debutant"));
/*
new AideModelData("Débuter avec COEL", new AideModelData[] {
new AideModelData("Présentation", "AideCoelPresentation", "Jean-Pascal MILCENT", "debutant"),
new AideModelData("S'identifier", "AideCoelIdentification", "Jean-Pascal MILCENT", "debutant"),
new AideModelData("Institutions", "AideCoelInstitution", "Jean-Pascal MILCENT", "debutant"),
new AideModelData("Collections", "AideCoelCollection", "Jean-Pascal MILCENT", "debutant"),
new AideModelData("Personnes", "AideCoelPersonne", "Jean-Pascal MILCENT", "debutant"),
new AideModelData("Publications", "AideCoelPublication", "Jean-Pascal MILCENT", "debutant"),
}),
new AideModelData("Aller plus loin...", new AideModelData[] {
new AideModelData("Régler les paramêtres", "AideCoelParametre", "Jean-Pascal MILCENT", "expert"),
new AideModelData("Modifier ses préférences", "AideCoelPreference", "Jean-Pascal MILCENT", "expert"),
})
public static Menu getSommaireArbreModele() {
// TODO : charger automatiquement l'arbre depuis le contenu de la page wikini de sommaire...
Menu[] menus = new Menu[] {
new Menu("Débuter avec COEL", new BaseTreeModel[] {
new Aide("Accueil", "AideCEL", "Jean-Pascal MILCENT", "debutant"),
new Aide("S'identifier", "AideCoelIdentification", "Jean-Pascal MILCENT", "debutant"),
new Aide("Institutions", "AideCoelInstitution", "Jean-Pascal MILCENT", "debutant"),
new Aide("Collections", "AideCoelCollection", "Jean-Pascal MILCENT", "debutant"),
new Aide("Personnes", "AideCoelPersonne", "Jean-Pascal MILCENT", "debutant"),
new Aide("Publications", "AideCoelPublication", "Jean-Pascal MILCENT", "debutant")
}),
new Menu("Aller plus loin...", new BaseTreeModel[] {
new Aide("Régler les paramêtres", "AideCoelParametre", "Jean-Pascal MILCENT", "expert"),
new Aide("Modifier ses préférences", "AideCoelPreference", "Jean-Pascal MILCENT", "expert")
})
};
 
Menu racine = new Menu("root");
Menu racine = new Menu("Sommaire");
for (int i = 0; i < menus.length; i++) {
racine.add((Menu) menus[i]);
}
 
return racine;
*/
return l;
}
/trunk/src/org/tela_botanica/client/modeles/UtilisateurAsyncDAO.java
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/client/modeles/ListeStructure.java
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/client/modeles/ListeStructureAsyncDao.java
File deleted
/trunk/src/org/tela_botanica/client/modeles/ValeurListe.java
New file
0,0 → 1,55
package org.tela_botanica.client.modeles;
 
import java.util.LinkedHashMap;
 
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
 
/**
* Table de hachage composée d'informations sur les Valeurs des listes, renvoyé par un objet de type DAO
* La clé est le nom de l'entite + le nom de l'entite parente
*
* @author david delon
*
*/
public class ValeurListe extends LinkedHashMap<String, Valeur> {
/**
* Identifiant pour sérialisé l'objet...
*/
private static final long serialVersionUID = 7784635999621813450L;
/**
* Constructeur sans paramètres
*/
public ValeurListe() {
super();
}
/**
* Constructeur avec paramètre
* @param taille la taille de la table de hachage
*/
public ValeurListe(int taille)
{
super(taille);
}
/**
* Constructeur pour une liste d'institutions
* @param dates
*/
public ValeurListe(JSONArray liste)
{
super(liste.size()) ;
final int taillemax = liste.size();
for (int i = 0; i < taillemax; i++) {
JSONObject listeValeur = liste.get(i).isObject() ;
if (listeValeur != null) {
Valeur valeur = new Valeur(listeValeur);
this.put(valeur.getId(), valeur);
}
}
}
}
/trunk/src/org/tela_botanica/client/modeles/Structure.java
1,20 → 1,13
package org.tela_botanica.client.modeles;
 
import java.io.Serializable;
import java.util.Iterator;
import java.util.Set;
 
import com.extjs.gxt.ui.client.data.BaseModelData;
import com.google.gwt.json.client.JSONObject;
 
public class Structure extends BaseModelData implements Serializable {
public class Structure extends aDonnee {
 
/**
* Identifiant pour sérialisé l'objet...
*/
private static final long serialVersionUID = 1;
 
/**
* Constructeur vide
*
*/
95,28 → 88,4
public String getConditionAcces() {
return (String) renvoyerValeurCorrecte("condition_acces");
}
 
/**
* Pour éviter que l'on traite des valeurs nulles à l'affichage on passe par
* cette fonction qui retire les charactères nuls qui font planter
* l'affichage, il ne faut pas utiliser get directement
*
* @param cle
* @return la valeur associée à la clé
*/
public String renvoyerValeurCorrecte(String cle) {
if (this.get(cle) != null) {
String valeur = this.get(cle);
if (valeur.equals("null") || valeur == null) {
return " ";
} else {
char nullChar = '\u0000';
String sNull = "" + nullChar;
valeur = valeur.replaceAll(sNull, "");
return valeur;
}
} else {
return " ";
}
}
}
/trunk/src/org/tela_botanica/client/modeles/StructureListe.java
New file
0,0 → 1,56
package org.tela_botanica.client.modeles;
 
import java.util.LinkedHashMap;
 
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
 
/**
* Table de hachage composée d'informations sur les Structures, renvoyé par un objet de type DAO
* La clé est le nom de l'entite + le nom de l'entite parente
*
* @author david delon
*
*/
public class StructureListe extends LinkedHashMap<String, Structure> {
/**
* Identifiant pour sérialisé l'objet...
*/
private static final long serialVersionUID = -7165785809164480836L;
/**
* Constructeur sans paramètres
*/
public StructureListe() {
super();
}
/**
* Constructeur avec paramètre
* @param taille la taille de la table de hachage
*/
public StructureListe(int taille)
{
super(taille);
}
/**
* Constructeur pour une liste d'institutions
* @param dates
*/
public StructureListe(JSONArray institutions)
{
super(institutions.size()) ;
final int taillemax = institutions.size();
for (int i = 0; i < taillemax; i++) {
JSONObject institutionCourante = institutions.get(i).isObject() ;
if (institutionCourante != null) {
Structure institution = new Structure(institutionCourante);
this.put(institution.getId(), institution);
}
}
}
}
Property changes:
Added: svn:mergeinfo
/trunk/src/org/tela_botanica/client/modeles/ValeurListeAsyncDao.java
New file
0,0 → 1,59
package org.tela_botanica.client.modeles;
 
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.extjs.gxt.ui.client.Registry;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
 
public class ValeurListeAsyncDao {
private Rafraichissable rafraichissement = null;
public ValeurListeAsyncDao(Rafraichissable r) {
rafraichissement = r;
}
public void obtenirListe(String cle) {
// Demande de toutes les structures
String url = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url+"CoelListe/id/"+cle);
 
try {
rb.sendRequest(null, new RequestCallback() {
 
public void onError(Request request, Throwable exception) {
// TODO Auto-generated method stub
 
}
 
public void onResponseReceived(Request request, Response response) {
final JSONValue responseValue = JSONParser.parse(response.getText());
 
// Si la requête est un succès, reception d'un tableau
if (responseValue.isArray() != null) {
final JSONArray reponse = responseValue.isArray();
// Transformation du tableau JSON réponse en Liste
ValeurListe liste = new ValeurListe(reponse);
// et on met à jour le demandeur des données
rafraichissement.rafraichir(liste);
}
 
}
});
} catch (RequestException e) {
e.printStackTrace();
}
}
public ValeurListeAsyncDao() {
// TODO Auto-generated constructor stub
}
 
}
/trunk/src/org/tela_botanica/client/modeles/StructureListeAsyncDao.java
New file
0,0 → 1,56
package org.tela_botanica.client.modeles;
 
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.extjs.gxt.ui.client.Registry;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
 
public class StructureListeAsyncDao {
 
private StructureListe institutions = null;
private Rafraichissable rafraichissement = null;
public StructureListeAsyncDao(Rafraichissable r) {
rafraichissement = r;
}
public void obtenirListeInstitution() {
// Demande de toutes les structures
String url = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url+"CoelStructureListe/");
 
try {
rb.sendRequest(null, new RequestCallback() {
 
public void onError(Request request, Throwable exception) {
// TODO Auto-generated method stub
 
}
 
public void onResponseReceived(Request request, Response response) {
final JSONValue responseValue = JSONParser.parse(response.getText());
 
// Si la requête est un succès, reception d'un tableau
if (responseValue.isArray() != null) {
final JSONArray reponse = responseValue.isArray();
// Transformation du tableau JSON réponse en ListeInstitution
institutions = new StructureListe(reponse);
// et on met à jour le demandeur des données
rafraichissement.rafraichir(institutions);
}
 
}
});
} catch (RequestException e) {
e.printStackTrace();
}
}
}
Property changes:
Added: svn:mergeinfo
/trunk/src/org/tela_botanica/client/modeles/Configuration.java
17,11 → 17,6
private String serviceBaseUrl;
/**
* L'url de base de l'aide
*/
private String aideBaseUrl;
/**
* L'url de base du Carnet en Ligne
*/
private String celUrl;
33,7 → 28,6
// on utilise le dictionnaire d'internationalisation pour lire les variables du fichier javascript
Dictionary configuration = Dictionary.getDictionary("configuration");
serviceBaseUrl = configuration.get("serviceBaseUrl");
aideBaseUrl = configuration.get("aideBaseUrl");
celUrl = configuration.get("celUrl");
}
 
47,15 → 41,6
}
/**
* Accesseur pour l'url de base de l'aide
*
* @return une url
*/
public String getAideBaseUrl() {
return aideBaseUrl;
}
 
/**
* Accesseur pour l'url de base du Carnet en Ligne
*
* @return une url de la forme http://emplacement_serveur/
/trunk/src/org/tela_botanica/client/modeles/aDonnee.java
New file
0,0 → 1,37
package org.tela_botanica.client.modeles;
 
import java.io.Serializable;
 
import com.extjs.gxt.ui.client.data.BaseModelData;
 
public abstract class aDonnee extends BaseModelData implements Serializable {
 
/**
* Identifiant pour sérialisé l'objet...
*/
private static final long serialVersionUID = 3527760464061629791L;
 
/**
* Pour éviter que l'on traite des valeurs nulles à l'affichage on passe par
* cette fonction qui retire les charactères nuls qui font planter
* l'affichage, il ne faut pas utiliser get directement
*
* @param cle
* @return la valeur associée à la clé
*/
public String renvoyerValeurCorrecte(String cle) {
if (this.get(cle) != null) {
String valeur = this.get(cle);
if (valeur.equals("null") || valeur == null) {
return " ";
} else {
char nullChar = '\u0000';
String sNull = "" + nullChar;
valeur = valeur.replaceAll(sNull, "");
return valeur;
}
} else {
return " ";
}
}
}
/trunk/src/org/tela_botanica/client/modeles/Utilisateur.java
1,19 → 1,12
package org.tela_botanica.client.modeles;
 
import java.io.Serializable;
import java.util.Iterator;
import java.util.Set;
 
import com.extjs.gxt.ui.client.data.BaseModelData;
import com.google.gwt.json.client.JSONObject;
 
public class Utilisateur extends BaseModelData implements Serializable {
public class Utilisateur extends aDonnee {
 
/**
* Variable pour la sérialisation de l'objet.
*/
private static final long serialVersionUID = 3;
public Utilisateur(String login, boolean identifie) {
set("login", login);
set("identifie", identifie);
/trunk/src/org/tela_botanica/client/modeles/UtilisateurAsyncDao.java
New file
0,0 → 1,142
package org.tela_botanica.client.modeles;
 
/**
* Modele DAO, specifique, permettant la validation, l'acces aux donnees distantes et la présentation des donnees en retour
*
*/
 
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.extjs.gxt.ui.client.Registry;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONBoolean;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
 
public class UtilisateurAsyncDao {
 
private Utilisateur utilisateur = null;
private String urlServiceBase = null;
private Rafraichissable rafraichissement = null;
/**
* Constructeur
* @param retour : méthode appellée en retour d'appel.
*/
public UtilisateurAsyncDao(Rafraichissable r) {
rafraichissement = r;
urlServiceBase = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
utilisateur = (Utilisateur) Registry.get(RegistreId.UTILISATEUR);
}
/**
* Méthode de classe d'appel du service des gestion d'identification.
*/
public void getEtatUtilisateur() {
// Recherche identifiant utilisateur identifie
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlServiceBase+"CoelUtilisateur/") ;
try {
rb.sendRequest(null, new RequestCallback() {
 
public void onError(Request request, Throwable exception) {
// TODO : ajouter un message d'erreur en cas d'erreur de requête HTTP
}
 
public void onResponseReceived(Request request, Response response) {
JSONValue jsonValue = JSONParser.parse(response.getText());
JSONArray jsonArray;
if ((jsonArray = jsonValue.isArray()) != null) {
// Identifiant utilisateur ou identifiant de session si non identifié
String login = ((JSONString) jsonArray.get(0)).stringValue();
// Drapeau leve si utilisateur deja identifié
boolean identifie = ((JSONBoolean) jsonArray.get(1)).booleanValue();
utilisateur.setIdentifie(identifie);
utilisateur.setLogin(login);
rafraichissement.rafraichir(utilisateur);
}
}
}) ;
} catch (RequestException e) {
e.printStackTrace();
}
}
 
/**
* Méthode déconnectant un utilisateur de l'application.
* @param identifiant de l'utilisateur à déconnecter.
*/
public void deconnecterUtilisateur() {
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlServiceBase+"CoelUtilisateur/"+utilisateur.getLogin()) ;
try {
rb.sendRequest(null, new RequestCallback() {
 
public void onError(Request request, Throwable exception) {
// TODO : ajouter un message d'erreur en cas d'erreur de requête HTTP
}
 
public void onResponseReceived(Request request, Response response) {
JSONValue jsonValue = JSONParser.parse(response.getText());
JSONArray jsonArray;
if ((jsonArray = jsonValue.isArray()) != null) {
// Identifiant utilisateur ou identifiant de session si non identifié
String login = ((JSONString) jsonArray.get(0)).stringValue();
// Drapeau levé si l'utilisateur est déjà identifié
boolean identifie = ((JSONBoolean) jsonArray.get(1)).booleanValue();
utilisateur.setIdentifie(identifie);
utilisateur.setLogin(login);
rafraichissement.rafraichir(utilisateur);
}
}
}) ;
} catch (RequestException e) {
e.printStackTrace();
}
}
/**
* Méthode déconnectant un utilisateur de l'application.
* @param Utilisateur l'utilisateur courant.
*/
public void connecterUtilisateur () {
String login = utilisateur.getLogin();
String password = utilisateur.getMotDePasse();
String url = urlServiceBase+"CoelUtilisateur/";
if (login != null & password != null) {
url = url+login+"/"+password;
}
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url);
try {
rb.sendRequest(null, new RequestCallback() {
 
public void onError(Request request, Throwable exception) {
// TODO : ajouter un message d'erreur en cas d'erreur de requête HTTP
}
 
public void onResponseReceived(Request request, Response response) {
JSONValue jsonValue = JSONParser.parse(response.getText());
JSONArray jsonArray;
if ((jsonArray = jsonValue.isArray()) != null) {
// Identifiant utilisateur ou identifiant de session si non identifié
String login = ((JSONString) jsonArray.get(0)).stringValue();
// Drapeau levé si l'utilisateur est déjà identifié
boolean identifie = ((JSONBoolean) jsonArray.get(1)).booleanValue();
utilisateur.setIdentifie(identifie);
utilisateur.setLogin(login);
rafraichissement.rafraichir(utilisateur);
}
}
}) ;
} catch (RequestException e) {
e.printStackTrace();
}
}
}
Property changes:
Added: svn:mergeinfo
/trunk/src/org/tela_botanica/client/modeles/Valeur.java
New file
0,0 → 1,40
package org.tela_botanica.client.modeles;
 
import java.util.Iterator;
import java.util.Set;
 
import com.google.gwt.json.client.JSONObject;
 
public class Valeur extends aDonnee {
 
/**
* Constructeur avec un objet JSON
*
* @param image
*/
public Valeur(JSONObject liste) {
// l'objet JSON est une table de hachage
Set<String> im = liste.keySet();
 
// Parcourt pour chaque clé
for (Iterator<String> it = im.iterator(); it.hasNext();) {
// Si elle est associée à une valeur, nous l'ajoutons
String cle = it.next();
// Suppression de l'abréviation du champ. Inutile dans le contexte d'un objet
String cleObjet = cle.replaceFirst("^cmlv_", "");
if (liste.get(cle).isString() != null) {
String valeur = liste.get(cle).isString().stringValue();
this.set(cleObjet, valeur);
} else {
// Sinon, nous ajoutons la clé avec une valeur vide
String valeur = " ";
this.set(cleObjet, valeur);
}
}
}
public String getId() {
return (String) renvoyerValeurCorrecte("id_valeur");
}
 
}
/trunk/src/org/tela_botanica/client/ComposantClass.java
New file
0,0 → 1,8
package org.tela_botanica.client;
 
public final class ComposantClass {
public static final String ICONE_IMPRIMER = "icone-imprimer";
public static final String ICONE_AJOUTER = "icone-ajouter";
public static final String ICONE_MODIFIER = "icone-modifier";
public static final String ICONE_SUPPRIMER = "icone-supprimer";
}
/trunk/src/org/tela_botanica/client/Mediateur.java
6,10 → 6,11
import org.tela_botanica.client.modeles.Configuration;
import org.tela_botanica.client.modeles.Menu;
import org.tela_botanica.client.modeles.Structure;
import org.tela_botanica.client.modeles.ListeStructure;
import org.tela_botanica.client.modeles.StructureListe;
import org.tela_botanica.client.modeles.Utilisateur;
import org.tela_botanica.client.vues.ContenuPanneauVue;
import org.tela_botanica.client.vues.EntetePanneauVue;
import org.tela_botanica.client.vues.FormStructureVue;
import org.tela_botanica.client.vues.StructureDetailPanneauVue;
import org.tela_botanica.client.vues.StructureVue;
import org.tela_botanica.client.vues.MenuPanneauVue;
118,7 → 119,7
((StructureDetailPanneauVue) Registry.get(RegistreId.PANNEAU_INSTITUTION_DETAIL)).rafraichir(institution);
}
 
public void afficherListeInstitutions(ListeStructure nouvelleDonnees) {
public void afficherListeInstitutions(StructureListe nouvelleDonnees) {
// TODO : créer dès l'initialisation de l'application InsitutionVue et la cacher
StructureVue institutionVue = new StructureVue();
panneauCentre.add(institutionVue);
162,4 → 163,11
panneauNord.rafraichir(utilisateur);
}
 
public void clicAjouterStructure() {
panneauCentre.removeAll();
FormStructureVue formStructureVue = new FormStructureVue();
panneauCentre.add(formStructureVue);
panneauCentre.layout();
}
 
}
/trunk/src/org/tela_botanica/client/ComposantId.java
8,5 → 8,5
public static final String MENU_CEL = "coel-id-menu-cel";
public static final String MENU_BEL = "coel-id-menu-bel";
public static final String BTN_DECONNEXION = "coel-id-btn-deconnexion";
public static final String PANNEAU_AIDE = "coel-id-pano-aide";;
public static final String PANNEAU_AIDE = "coel-id-pano-aide";
}
/trunk/src/org/tela_botanica/client/vues/FormStructureVue.java
New file
0,0 → 1,151
package org.tela_botanica.client.vues;
 
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
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.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.ScriptTagProxy;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
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.FormPanel;
import com.extjs.gxt.ui.client.widget.form.Radio;
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
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.form.FormPanel.LabelAlign;
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.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
 
public class FormStructureVue extends LayoutContainer implements Rafraichissable {
 
public FormStructureVue() {
setLayout(new FitLayout());
// Création du panneau Formulaire
FormPanel panel = new FormPanel();
panel.setFrame(true);
panel.setIconStyle("icone-form-ajouter");
panel.setCollapsible(false);
panel.setHeading("Ajout d'une institution");
panel.setButtonAlign(HorizontalAlignment.CENTER);
panel.setLayout(new FlowLayout());
LayoutContainer main = new LayoutContainer();
main.setLayout(new ColumnLayout());
 
// Création de la dispostion : GAUCHE
LayoutContainer gauche = new LayoutContainer();
FormLayout layout = new FormLayout();
layout.setLabelAlign(LabelAlign.LEFT);
layout.setLabelWidth(200);
gauche.setLayout(layout);
 
// Création de la dispostion : DROITE
LayoutContainer droite = new LayoutContainer();
layout = new FormLayout();
layout.setLabelAlign(LabelAlign.LEFT);
droite.setLayout(layout);
 
// Formulaire GAUCHE
TextField<String> nomStructureChp = new TextField<String>();
nomStructureChp.setFieldLabel("Nom de la structure");
nomStructureChp.setAllowBlank(false);
gauche.add(nomStructureChp);
TextField<String> ihChp = new TextField<String>();
ihChp.setFieldLabel("Acronyme Index Herbariorum");
ihChp.setToolTip("Herbier de plus de 5000 échantillons");
gauche.add(ihChp);
TextField<String> mnhnChp = new TextField<String>();
mnhnChp.setFieldLabel("Acronyme MNHN");
mnhnChp.setToolTip("Herbier de moins de 5000 échantillons");
gauche.add(mnhnChp);
// Combobox
String url = "http://localhost/jrest/CoelValeurListe/ab/12";
ScriptTagProxy<Object, PagingLoadResult<ModelData>> proxy = new ScriptTagProxy<Object, PagingLoadResult<ModelData>>(url);
ModelType type = new ModelType();
type.root = "topics";
type.totalName = "totalCount";
type.addField("cmlv_id_valeur", "id");
type.addField("cmlv_ce_parent", "ce_parent");
type.addField("cmlv_ce_projet", "ce_projet");
type.addField("cmlv_nom", "nom");
type.addField("cmlv_abreviation", "abreviation");
type.addField("cmlv_description", "description");
type.addField("cmlv_ce_meta", "ce_meta");
JsonReader<PagingLoadConfig> reader = new JsonReader<PagingLoadConfig>(type) {
protected ListLoadResult newLoadResult(PagingLoadConfig loadConfig, List<ModelData> models) {
PagingLoadResult result = new BasePagingLoadResult(models, loadConfig.getOffset(),
loadConfig.getLimit());
return result;
}
};
PagingLoader loader = new BasePagingLoader(proxy, reader);
ListStore<ModelData> store = new ListStore<ModelData>(loader);
ComboBox<ModelData> combo = new ComboBox<ModelData>();
combo.setFieldLabel("Statut des structures publiques");
combo.setDisplayField("nom");
combo.setItemSelector("div.search-item");
//combo.setTemplate(getTemplate());
combo.setStore(store);
combo.setHideTrigger(false);
combo.setPageSize(5);
gauche.add(combo);
// Formulaire DROITE
RadioGroup group = new RadioGroup();
group.setFieldLabel("Type");
Radio structureRadio = new Radio();
structureRadio.setBoxLabel("Structure");
structureRadio.setValue(true);
group.add(structureRadio);
Radio particulierRadio = new Radio();
particulierRadio.setBoxLabel("Particulier");
group.add(particulierRadio);
droite.add(group);
// Ajout des colonnes
main.add(gauche, new ColumnData(.5));
main.add(droite, new ColumnData(.5));
panel.add(main);
// Ajout des boutons au panneau formulaire
Button annulerBtn = new Button("Annuler");
panel.addButton(annulerBtn);
Button validerBtn = new Button("Valider");
panel.addButton(validerBtn);
// Ajout du panneau Formulaire à la disposition générale
add(panel);
}
 
public void rafraichir(Object nouvelleDonnees) {
// TODO Auto-generated method stub
}
 
}
/trunk/src/org/tela_botanica/client/vues/StructureListePanneauVue.java
4,17 → 4,20
import java.util.Iterator;
import java.util.List;
 
import org.tela_botanica.client.ComposantClass;
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.Structure;
import org.tela_botanica.client.modeles.ListeStructure;
import org.tela_botanica.client.modeles.StructureListe;
 
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.binder.TableBinder;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
37,15 → 40,20
ToolBar toolBar = new ToolBar();
TextToolItem ajouter = new TextToolItem("Ajouter");
ajouter.setIconStyle("icone-ajouter");
ajouter.setIconStyle(ComposantClass.ICONE_AJOUTER);
ajouter.addSelectionListener(new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
coelMediateur.clicAjouterStructure();
}
});
toolBar.add(ajouter);
 
TextToolItem modifier = new TextToolItem("Modifier");
modifier.setIconStyle("icone-modifier");
modifier.setIconStyle(ComposantClass.ICONE_MODIFIER);
toolBar.add(modifier);
TextToolItem supprimer = new TextToolItem("Supprimer");
supprimer.setIconStyle("icone-supprimer");
supprimer.setIconStyle(ComposantClass.ICONE_SUPPRIMER);
toolBar.add(supprimer);
 
setTopComponent(toolBar);
90,8 → 98,8
}
 
public void rafraichir(Object nouvelleDonnees) {
if (nouvelleDonnees instanceof ListeStructure) {
ListeStructure listeInstitutions = (ListeStructure) nouvelleDonnees;
if (nouvelleDonnees instanceof StructureListe) {
StructureListe listeInstitutions = (StructureListe) nouvelleDonnees;
setHeading("Institutions");
 
List<Structure> liste = new ArrayList<Structure>();
/trunk/src/org/tela_botanica/client/vues/StructureDetailPanneauVue.java
3,7 → 3,7
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Structure;
import org.tela_botanica.client.modeles.ListeStructure;
import org.tela_botanica.client.modeles.StructureListe;
 
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.Scroll;
81,8 → 81,8
public void rafraichir(Object nouvelleDonnees) {
if (nouvelleDonnees instanceof Structure) {
afficherDetailInstitution((Structure) nouvelleDonnees);
} else if (nouvelleDonnees instanceof ListeStructure) {
ListeStructure listeInstitutions = (ListeStructure) nouvelleDonnees;
} else if (nouvelleDonnees instanceof StructureListe) {
StructureListe listeInstitutions = (StructureListe) nouvelleDonnees;
// Test pour savoir si la liste contient des éléments
if (listeInstitutions.size() == 0) {
afficherDetailInstitution(null);
/trunk/src/org/tela_botanica/client/vues/EntetePanneauVue.java
69,9 → 69,11
barreBoutons.setButtonAlign(Style.HorizontalAlignment.RIGHT);
Button parametresBouton = new Button("Paramêtres", boutonEcouteur);
parametresBouton.setId(ComposantId.BTN_PARAMETRES);
parametresBouton.setIconStyle("icone-param");
barreBoutons.add(parametresBouton);
Button aideBouton = new Button("Aide", boutonEcouteur);
aideBouton.setId(ComposantId.BTN_AIDE);
aideBouton.setIconStyle("icone-aide");
barreBoutons.add(aideBouton);
identificationBouton = new Button("Identifiez vous...", boutonEcouteur);
identificationBouton.setId(ComposantId.BTN_CONNEXION);
92,6 → 94,7
}
});
menuCel.setId(ComposantId.MENU_CEL);
menuCel.setIconStyle("icone-cel");
menu.add(menuCel);
MenuItem menuBel = new MenuItem("Biblio en ligne", new SelectionListener<ComponentEvent>() {
@Override
103,9 → 106,11
}
});
menuBel.setId(ComposantId.MENU_BEL);
menuBel.setIconStyle("icone-bel");
menu.add(menuBel);
applisBouton.setMenu(menu);
applisBouton.setMenu(menu);
applisBouton.setIconStyle("icone-bascule");
barreBoutons.add(applisBouton);
add(html, new RowData(.3, 1));
119,10 → 124,12
if (utilisateur.isIdentifie() == true) {
identificationInfoHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add("Bienvenue : "+utilisateur.getLogin())));
identificationBouton.setText("Deconnexion");
identificationBouton.setIconStyle("icone-deconnexion");
identificationBouton.setId(ComposantId.BTN_DECONNEXION);
} else {
identificationInfoHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add("Mode anonyme")));
identificationBouton.setText("Identifiez vous...");
identificationBouton.setIconStyle("icone-connexion");
identificationBouton.setId(ComposantId.BTN_CONNEXION);
}
}
/trunk/src/org/tela_botanica/client/vues/MenuPanneauVue.java
54,11 → 54,15
public Menu listerMenu() {
Menu menus = new Menu();
Menu accueilMenu = new Menu("Accueil");
Menu projetMenu = new Menu("Projets");
Menu menuInstitution = new Menu("Institutions");
Menu menuCollections = new Menu("Collections");
Menu menuPersonnes = new Menu("Personnes");
Menu menuPublications = new Menu("Publications");
menus.add(accueilMenu);
menus.add(projetMenu);
menus.add(menuInstitution);
menus.add(menuCollections);
menus.add(menuPersonnes);
/trunk/src/org/tela_botanica/client/vues/StructureVue.java
2,7 → 2,7
 
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ListeStructure;
import org.tela_botanica.client.modeles.StructureListe;
 
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.LayoutRegion;
33,14 → 33,14
}
 
public void rafraichir(Object nouvelleDonnees) {
if (nouvelleDonnees instanceof ListeStructure) {
remplirListe((ListeStructure) nouvelleDonnees);
if (nouvelleDonnees instanceof StructureListe) {
remplirListe((StructureListe) nouvelleDonnees);
} else {
Window.alert("Problème!");
}
}
private void remplirListe(ListeStructure listeInstitutions) {
private void remplirListe(StructureListe listeInstitutions) {
LayoutContainer panneauCentre = (LayoutContainer) Registry.get(RegistreId.PANNEAU_CENTRE);
panneauInstitutionListe.rafraichir(listeInstitutions);
panneauInstitutionDetail.rafraichir(listeInstitutions);