/trunk/src/org/tela_botanica/client/modeles/UtilisateurAsynchroneDAO.java |
---|
File deleted |
\ No newline at end of file |
/trunk/src/org/tela_botanica/client/modeles/Aide.java |
---|
New file |
0,0 → 1,42 |
package org.tela_botanica.client.modeles; |
import com.extjs.gxt.ui.client.data.BaseTreeModel; |
import com.extjs.gxt.ui.client.data.TreeModel; |
public class Aide extends BaseTreeModel<TreeModel> { |
public Aide() { |
} |
public Aide(String n) { |
set("nom", n); |
} |
public Aide(String nom, String code, String auteur, String groupe) { |
set("nom", nom); |
set("code", code); |
set("auteur", auteur); |
set("groupe", groupe); |
} |
public String getNom() { |
return (String) get("nom"); |
} |
public String getCode() { |
return (String) get("code"); |
} |
public String getAuteur() { |
return (String) get("auteur"); |
} |
public String getGroupe() { |
return (String) get("groupe"); |
} |
public String toString() { |
return getNom(); |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/Configuration.java |
---|
15,7 → 15,13 |
* L'url de base du serveur jrest |
*/ |
private String serviceBaseUrl; |
/** |
* L'url de base de l'aide |
*/ |
private String aideBaseUrl; |
/** |
* L'url de base du Carnet en Ligne |
*/ |
private String celUrl; |
27,6 → 33,7 |
// 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"); |
} |
38,6 → 45,15 |
public String getServiceBaseUrl() { |
return serviceBaseUrl; |
} |
/** |
* 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 |
/trunk/src/org/tela_botanica/client/modeles/Utilisateur.java |
---|
14,8 → 14,8 |
*/ |
private static final long serialVersionUID = 3; |
public Utilisateur(String identifiant, boolean identifie) { |
set("identifiant", identifiant); |
public Utilisateur(String login, boolean identifie) { |
set("login", login); |
set("identifie", identifie); |
} |
57,20 → 57,16 |
set("identifie", bool); |
} |
public void setIdentifiant(String i) { |
set("identifiant", i); |
public void setLogin(String l) { |
set("login", l); |
} |
/** |
* Retourne l'identifiant de l'utilisateur identifié ou un identifiant de session. |
* @return String identifiant |
*/ |
public String getIdentifiant() { |
return get("identifiant"); |
public void setMotDePasse(String mdp) { |
set("mot_de_passe", mdp); |
} |
/** |
* Retourne le login de l'utilisateur |
* Retourne le login de l'utilisateur ou l'identifiant de session si la personne n'est pas identifiée. |
* @return String login |
*/ |
public String getLogin() { |
92,14 → 88,5 |
public boolean isIdentifie() { |
return get("identifie"); |
} |
public void setLogin(String l) { |
set("login", l); |
} |
public void setMotDePasse(String mdp) { |
set("mot_de_passe", mdp); |
} |
} |
/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/Mediateur.java |
---|
2,6 → 2,7 |
import org.tela_botanica.client.composants.AideFenetre; |
import org.tela_botanica.client.composants.IdentificationFenetre; |
import org.tela_botanica.client.composants.ParametreFenetre; |
import org.tela_botanica.client.modeles.Configuration; |
import org.tela_botanica.client.modeles.Menu; |
import org.tela_botanica.client.modeles.Structure; |
15,7 → 16,6 |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.Style.LayoutRegion; |
import com.extjs.gxt.ui.client.fx.FxConfig; |
import com.extjs.gxt.ui.client.util.Margins; |
import com.extjs.gxt.ui.client.widget.Viewport; |
import com.extjs.gxt.ui.client.widget.layout.BorderLayout; |
128,18 → 128,18 |
public void ouvrirAide() { |
AideFenetre aideFenetre = new AideFenetre(); |
aideFenetre.show(); |
aideFenetre.el().fadeIn(FxConfig.NONE); |
// FIXME : apparament le fade In/Fade Out pose problème sur les navigateurs... |
//aideFenetre.el().fadeIn(FxConfig.NONE); |
} |
public void ouvrirParametres() { |
//ParametreFenetre parametresFenetre = new ParametreFenetre(); |
//parametresFenetre.show(); |
ParametreFenetre parametresFenetre = new ParametreFenetre(); |
parametresFenetre.show(); |
} |
public void ouvrirIdentification() { |
IdentificationFenetre identifFenetre = new IdentificationFenetre(); |
identifFenetre.show(); |
// identifFenetre.el().fadeIn(FxConfig.NONE); |
} |
public void ouvrirApplis(String id) { |
161,4 → 161,5 |
public void mettreAJourEtatIdentification(Utilisateur utilisateur) { |
panneauNord.rafraichir(utilisateur); |
} |
} |
/trunk/src/org/tela_botanica/client/ComposantId.java |
---|
7,5 → 7,6 |
public static final String BTN_APPLIS = "coel-id-btn-applis"; |
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 BTN_DECONNEXION = "coel-id-btn-deconnexion"; |
public static final String PANNEAU_AIDE = "coel-id-pano-aide";; |
} |
/trunk/src/org/tela_botanica/client/Coel.java |
---|
24,6 → 24,7 |
Registry.register(RegistreId.APPLI_VERSION, "0.1"); |
Registry.register(RegistreId.APPLI_REVISION, "$Revision$"); |
Registry.register(RegistreId.CONFIG, new Configuration()); |
new Mediateur(); |
} |
} |
/trunk/src/org/tela_botanica/client/vues/EntetePanneauVue.java |
---|
9,10 → 9,10 |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.Style; |
import com.extjs.gxt.ui.client.Style.Orientation; |
import com.extjs.gxt.ui.client.event.ButtonEvent; |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
import com.extjs.gxt.ui.client.event.MenuEvent; |
import com.extjs.gxt.ui.client.event.SelectionListener; |
import com.extjs.gxt.ui.client.util.Format; |
import com.extjs.gxt.ui.client.util.Params; |
import com.extjs.gxt.ui.client.widget.HtmlContainer; |
import com.extjs.gxt.ui.client.widget.Info; |
import com.extjs.gxt.ui.client.widget.LayoutContainer; |
21,15 → 21,15 |
import com.extjs.gxt.ui.client.widget.button.SplitButton; |
import com.extjs.gxt.ui.client.widget.layout.RowData; |
import com.extjs.gxt.ui.client.widget.layout.RowLayout; |
import com.extjs.gxt.ui.client.widget.menu.Item; |
import com.extjs.gxt.ui.client.widget.menu.Menu; |
import com.extjs.gxt.ui.client.widget.menu.MenuItem; |
import com.google.gwt.user.client.Window; |
public class EntetePanneauVue extends LayoutContainer implements Rafraichissable { |
private ButtonBar barreBoutons = null; |
private Button identificationBouton = null; |
private String identificationInfoTpl = "<div id='coel-identification'>{0}</div>"; |
private HtmlContainer identificationInfoHtml = null; |
public EntetePanneauVue() { |
setLayout(new RowLayout(Orientation.HORIZONTAL)); |
42,11 → 42,9 |
html.setHtml(sb.toString()); |
html.setEnableState(false); |
HtmlContainer htmlIdentification = new HtmlContainer(); |
StringBuffer sb2 = new StringBuffer(); |
sb2.append(" <div id='coel-identification'></div>"); |
html.setHtml(sb.toString()); |
html.setEnableState(false); |
identificationInfoHtml = new HtmlContainer(); |
identificationInfoHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add("Mode anonyme"))); |
identificationInfoHtml.setEnableState(false); |
// Création des écouteurs |
SelectionListener<ComponentEvent> boutonEcouteur = new SelectionListener<ComponentEvent>() { |
111,17 → 109,20 |
barreBoutons.add(applisBouton); |
add(html, new RowData(.3, 1)); |
add(htmlIdentification, new RowData(.2, 50)); |
add(barreBoutons, new RowData(.5, 50)); |
add(identificationInfoHtml, new RowData(.3, 50)); |
add(barreBoutons, new RowData(.4, 50)); |
} |
public void rafraichir(Object nouvelleDonnees) { |
if (nouvelleDonnees instanceof Utilisateur) { |
if (((Utilisateur) nouvelleDonnees).isIdentifie() == true) { |
identificationBouton.setText("Deconnexion"+((Utilisateur) nouvelleDonnees).getIdentifiant()); |
Utilisateur utilisateur = (Utilisateur) nouvelleDonnees; |
if (utilisateur.isIdentifie() == true) { |
identificationInfoHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add("Bienvenue : "+utilisateur.getLogin()))); |
identificationBouton.setText("Deconnexion"); |
identificationBouton.setId(ComposantId.BTN_DECONNEXION); |
} else { |
identificationBouton.setText("Identifiez vous...2"); |
identificationInfoHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add("Mode anonyme"))); |
identificationBouton.setText("Identifiez vous..."); |
identificationBouton.setId(ComposantId.BTN_CONNEXION); |
} |
} |
/trunk/src/org/tela_botanica/client/Modele.java |
---|
4,7 → 4,7 |
import org.tela_botanica.client.modeles.ListeStructure; |
import org.tela_botanica.client.modeles.ListeStructureAsyncDao; |
import org.tela_botanica.client.modeles.Utilisateur; |
import org.tela_botanica.client.modeles.UtilisateurAsynchroneDAO; |
import org.tela_botanica.client.modeles.UtilisateurAsyncDAO; |
import com.extjs.gxt.ui.client.Registry; |
32,12 → 32,12 |
Utilisateur utilisateur = (Utilisateur) Registry.get(RegistreId.UTILISATEUR); |
utilisateur.setLogin(login); |
utilisateur.setMotDePasse(mdp); |
UtilisateurAsynchroneDAO uDao = new UtilisateurAsynchroneDAO(this); |
UtilisateurAsyncDAO uDao = new UtilisateurAsyncDAO(this); |
uDao.connecterUtilisateur(); |
} |
public void deconnecterUtilisateur() { |
UtilisateurAsynchroneDAO uDao = new UtilisateurAsynchroneDAO(this); |
UtilisateurAsyncDAO uDao = new UtilisateurAsyncDAO(this); |
uDao.deconnecterUtilisateur(); |
} |
/trunk/src/org/tela_botanica/client/composants/IdentificationFenetre.java |
---|
9,7 → 9,6 |
*/ |
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.modeles.Utilisateur; |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.event.ButtonEvent; |
16,7 → 15,6 |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
import com.extjs.gxt.ui.client.event.KeyListener; |
import com.extjs.gxt.ui.client.event.SelectionListener; |
import com.extjs.gxt.ui.client.fx.FxConfig; |
import com.extjs.gxt.ui.client.widget.Dialog; |
import com.extjs.gxt.ui.client.widget.button.Button; |
import com.extjs.gxt.ui.client.widget.button.StatusButtonBar; |
26,11 → 24,11 |
public class IdentificationFenetre extends Dialog { |
protected StatusButtonBar buttonBar; |
protected TextField<String> userName; |
protected TextField<String> password; |
protected Button reset; |
protected Button login; |
protected StatusButtonBar barreDeBoutons; |
protected TextField<String> login; |
protected TextField<String> motDePasse; |
protected Button reinitialiserBouton; |
protected Button validerBouton; |
public IdentificationFenetre() { |
FormLayout layout = new FormLayout(); |
55,60 → 53,60 |
}; |
userName = new TextField<String>(); |
userName.setMinLength(4); |
userName.setFieldLabel("Courriel"); |
userName.addKeyListener(keyListener); |
add(userName); |
login = new TextField<String>(); |
login.setMinLength(4); |
login.setFieldLabel("Courriel"); |
login.addKeyListener(keyListener); |
add(login); |
password = new TextField<String>(); |
password.setMinLength(4); |
password.setPassword(true); |
password.setFieldLabel("Mot de passe"); |
password.addKeyListener(keyListener); |
add(password); |
motDePasse = new TextField<String>(); |
motDePasse.setMinLength(4); |
motDePasse.setPassword(true); |
motDePasse.setFieldLabel("Mot de passe"); |
motDePasse.addKeyListener(keyListener); |
add(motDePasse); |
setFocusWidget(userName); |
setFocusWidget(login); |
buttonBar = new StatusButtonBar(); |
setButtonBar(buttonBar); |
barreDeBoutons = new StatusButtonBar(); |
setButtonBar(barreDeBoutons); |
} |
@Override |
protected void createButtons() { |
reset = new Button("Réinitialiser"); |
reset.addSelectionListener(new SelectionListener<ButtonEvent>() { |
reinitialiserBouton = new Button("Réinitialiser"); |
reinitialiserBouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
userName.reset(); |
password.reset(); |
login.reset(); |
motDePasse.reset(); |
validate(); |
userName.focus(); |
login.focus(); |
} |
}); |
login = new Button("Valider"); |
validerBouton = new Button("Valider"); |
//login.disable(); // Par défaut : dois être en mode disable |
login.addSelectionListener(new SelectionListener<ButtonEvent>() { |
validerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
onSubmit(); |
} |
}); |
buttonBar.add(reset); |
buttonBar.add(login); |
barreDeBoutons.add(reinitialiserBouton); |
barreDeBoutons.add(validerBouton); |
} |
protected void onSubmit() { |
buttonBar.getStatusBar().showBusy("Chargement en cours ..."); |
buttonBar.disable(); |
barreDeBoutons.getStatusBar().showBusy("Chargement en cours ..."); |
barreDeBoutons.disable(); |
Timer t = new Timer() { |
@Override |
public void run() { |
IdentificationFenetre.this.hide(); |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).connecterUtilisateur(userName.getValue(), password.getValue()); |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).connecterUtilisateur(login.getValue(), motDePasse.getValue()); |
} |
}; |
120,7 → 118,7 |
} |
protected void validate() { |
login.setEnabled(hasValue(userName) && hasValue(password) && password.getValue().length() > 3); |
validerBouton.setEnabled(hasValue(login) && hasValue(motDePasse) && motDePasse.getValue().length() > 3); |
} |
} |
/trunk/src/org/tela_botanica/client/composants/ParametreFenetre.java |
---|
2,7 → 2,9 |
import org.tela_botanica.client.RegistreId; |
import com.extjs.gxt.ui.client.GXT; |
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.Version; |
import com.extjs.gxt.ui.client.widget.TabItem; |
import com.extjs.gxt.ui.client.widget.TabPanel; |
import com.extjs.gxt.ui.client.widget.Window; |
18,28 → 20,37 |
setHeading("Paramêtres et préférences"); |
setLayout(new FitLayout()); |
TabPanel panel = new TabPanel(); |
panel.setBorders(false); |
TabItem item1 = new TabItem("Paramêtres"); |
item1.addText("Paramêtres de l'application..."); |
item1.addStyleName("pad-text"); |
TabPanel panneaux = new TabPanel(); |
panneaux.setBorders(false); |
TabItem parametresOnglet = new TabItem("Paramêtres"); |
parametresOnglet.addText("Paramêtres de l'application..."); |
parametresOnglet.addStyleName("pad-text"); |
TabItem item2 = new TabItem("Préférences"); |
item2.addText("Préférences de l'application..."); |
item2.addStyleName("pad-text"); |
TabItem preferencesOnglet = new TabItem("Préférences"); |
preferencesOnglet.addText("Préférences de l'application..."); |
preferencesOnglet.addStyleName("pad-text"); |
TabItem item3 = new TabItem("A propos..."); |
item3.addText("Application : "+(String) Registry.get(RegistreId.APPLI_NOM)); |
item3.addText("Application abréviation : "+(String) Registry.get(RegistreId.APPLI_CODE)); |
item3.addText("Version : "+(String) Registry.get(RegistreId.APPLI_VERSION)); |
item3.addText("Révision : "+(String) Registry.get(RegistreId.APPLI_REVISION)); |
item3.addText("Version de GWT : "+GWT.getVersion()); |
item3.addStyleName("pad-text"); |
TabItem aproposOnglet = new TabItem("A propos..."); |
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)); |
aproposOnglet.addText("Révision : "+(String) Registry.get(RegistreId.APPLI_REVISION)); |
aproposOnglet.addText("<hr />"); |
aproposOnglet.addText("<h1>"+"Cadre de travail"+"</h1>"); |
aproposOnglet.addText("GWT : v"+GWT.getVersion()); |
Version gxtVersion = GXT.getVersion(); |
aproposOnglet.addText("GXT : v"+gxtVersion.getRelease()); |
aproposOnglet.addText("<hr />"); |
aproposOnglet.addText("<h1>"+"Navigateur"+"</h1>"); |
aproposOnglet.addText("COEL fonctionne actuellement dans : "+GXT.getUserAgent()); |
panel.add(item1); |
panel.add(item2); |
aproposOnglet.addStyleName("pad-text"); |
add(panel, new FitData(4)); |
panneaux.add(parametresOnglet); |
panneaux.add(preferencesOnglet); |
panneaux.add(aproposOnglet); |
add(panneaux, new FitData(4)); |
} |
} |
/trunk/src/org/tela_botanica/client/composants/AideFenetre.java |
---|
1,53 → 1,220 |
package org.tela_botanica.client.composants; |
import java.io.Console; |
import java.util.ArrayList; |
import java.util.List; |
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; |
import com.extjs.gxt.ui.client.Events; |
import com.extjs.gxt.ui.client.Registry; |
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.Listener; |
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; |
import com.extjs.gxt.ui.client.widget.button.Button; |
import com.extjs.gxt.ui.client.widget.layout.BorderLayout; |
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; |
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; |
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 VerticalPanel sommairePanneau = null; |
private ContentPanel contenuPanneau = null; |
private HtmlContainer contenuHtml = null; |
public AideFenetre() { |
setBodyBorder(false); |
setButtons(Dialog.OK); |
setIconStyle("icon-app-side"); |
setHeading("COEL - Aide"); |
setWidth(400); |
setHeight(225); |
setWidth(675); |
setHeight(400); |
setHideOnButtonClick(true); |
setLayout(new BorderLayout()); |
BorderLayout layout = new BorderLayout(); |
setLayout(layout); |
// Panneau Ouest : sommaire |
sommairePanneau = new VerticalPanel(); |
sommairePanneau.setSpacing(8); |
sommairePanneau.addStyleName("x-small-editor"); |
BorderLayoutData sommaireDisposition = new BorderLayoutData(LayoutRegion.WEST, 175, 100, 250); |
sommaireDisposition.setMargins(new Margins(0, 5, 0, 0)); |
sommaireDisposition.setSplit(true); |
sommaireDisposition.setCollapsible(true); |
sommaireDisposition.setFloatable(true); |
add(sommairePanneau, sommaireDisposition); |
// Panneau Ouest |
ContentPanel panel = new ContentPanel(); |
panel.setHeading("Sommaire"); |
BorderLayoutData data = new BorderLayoutData(LayoutRegion.WEST, 150, 100, 250); |
data.setMargins(new Margins(0, 5, 0, 0)); |
data.setSplit(true); |
data.setCollapsible(true); |
data.setFloatable(true); |
add(panel, data); |
// Chargement de l'arbre du sommaire et de son filtre |
chargerSommaireArbre(); |
sommairePanneau.add(filtre); |
sommairePanneau.add(arbre); |
// Panneau Central |
panel = new ContentPanel(); |
data = new BorderLayoutData(LayoutRegion.CENTER); |
add(panel, data); |
// Panneau Central : contenu |
contenuPanneau = new ContentPanel(); |
contenuPanneau.setScrollMode(Scroll.AUTO); |
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")); |
} |
private void chargerSommaireArbre() { |
arbre = new Tree(); |
magazin = new TreeStore<Aide>(); |
magazin.add(getSommaireArbreModele(), true); |
binder = new TreeBinder<Aide>(arbre, magazin); |
binder.setAutoLoad(true); |
binder.setDisplayProperty("nom"); |
binder.init(); |
inititialiserSommaireArbreFiltre(); |
filtre.bind(magazin); |
arbre.addListener(Events.OnClick, new Listener<TreeEvent>(){ |
public void handleEvent(TreeEvent be) { |
TreeItem f = be.item; |
if (f.isLeaf()) { |
selectionSommaire((String) f.getModel().get("code")); |
} |
} |
}); |
} |
private void selectionSommaire(String page) { |
String serviceUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl(); |
String aidePageUrl = serviceUrl+"CoelAide/"+page; |
GWT.log("Sélection : "+aidePageUrl, null); |
chargerPageAide(aidePageUrl); |
} |
private void chargerPageAide(String url) { |
GWT.log("Charger : "+url, null); |
contenuHtml = new HtmlContainer() { |
public void onBrowserEvent(Event e) { |
// Nous vérifions que l'évenement est un clic et qu'il a lieu sur un lien |
if (e.getTypeInt()== Event.ONCLICK && e.getTarget().getTagName().equals("A")) { |
e.preventDefault(); |
GWT.log("Clic : "+e.getTarget().getTagName()+"::"+e.getTarget().toString(), null); |
chargerPageAide(e.getTarget().toString()); |
} |
} |
}; |
contenuHtml.setId(ComposantId.PANNEAU_AIDE); |
contenuHtml.setWidth(400); |
contenuHtml.sinkEvents(Event.ONCLICK); |
contenuHtml.setUrl(url); |
contenuHtml.recalculate(); |
contenuPanneau.removeAll(); |
contenuPanneau.add(contenuHtml); |
contenuPanneau.layout(); |
} |
private void inititialiserSommaireArbreFiltre() { |
filtre = new StoreFilterField<Aide>() { |
@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; |
//} |
String nom = enregistrement.getNom(); |
nom = nom.toLowerCase(); |
if (nom.startsWith(filtre.toLowerCase())) { |
return true; |
} |
return false; |
} |
}; |
} |
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"), |
}) |
}; |
Menu racine = new Menu("root"); |
for (int i = 0; i < menus.length; i++) { |
racine.add((Menu) menus[i]); |
} |
return racine; |
*/ |
return l; |
} |
/** |
* Sur une fermeture on fait un fadeOut. |
* |
*/ |
/* |
protected void onButtonPressed(Button btn) { |
if (this.isHideOnButtonClick()) { |
this.el().fadeOut(FxConfig.NONE); |
// FIXME : apparament le fade In/Fade Out pose problème sur les navigateurs... |
//this.el().fadeOut(FxConfig.NONE); |
} else { |
super.onButtonPressed(btn); |
} |
} |
}*/ |
} |
/trunk/src/org/tela_botanica/public/config.js |
---|
1,4 → 1,6 |
var configuration = { |
celUrl:"http://www.tela-botanica.org/cel/www/org.tela_botanica.Cel/Cel.html", |
serviceBaseUrl:"http://localhost/jrest/" |
aideBaseUrl:"http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki={0}/raw", |
serviceBaseUrl:"http://162.38.234.1/jrest/", |
aideServiceUrl:"http://162.38.234.1/CoelAide/{0}" |
}; |
/trunk/src/org/tela_botanica/public/Coel.css |
---|
31,17 → 31,20 |
vertical-align:top;} |
#loading-msg { |
font: normal 10px arial, tahoma, sans-serif;} |
/* #------------------------------------------------------------------------------------------------------# */ |
/* GÉNÉRAL */ |
/* #------------------------------------------------------------------------------------------------------# */ |
/* #------------------------------------------------------------------------------------------------------# */ |
/* ENTÊTE */ |
/* #------------------------------------------------------------------------------------------------------# */ |
#coel-entete { |
color:white; |
height:100px; |
background:#1E4176 url(images/bg/hd-bg.png) repeat-x scroll 0pt; |
border:0pt none; |
padding-left:3px;} |
#coel-titre { |
color:white; |
font-family:tahoma, arial, sans-serif; |
font-size:16px; |
font-size-adjust:none; |
50,8 → 53,17 |
font-variant:normal; |
font-weight:normal; |
line-height:normal; |
padding:6 0 8 6px;} |
padding:0 0 8 6px;} |
#coel-identification{ |
float:right; |
margin:2 5 0 0px} |
/* #------------------------------------------------------------------------------------------------------# */ |
/* AIDE */ |
/* #------------------------------------------------------------------------------------------------------# */ |
#coel-id-pano-aide{ |
font-size: 11px; |
margin:5px;} |
/* #------------------------------------------------------------------------------------------------------# */ |
/* PANNEAU DÉTAIL */ |
/* #------------------------------------------------------------------------------------------------------# */ |
.coel-detail { |