/trunk/src/org/tela_botanica/client/Mediateur.java |
---|
1,9 → 1,12 |
package org.tela_botanica.client; |
import org.tela_botanica.client.composants.AideFenetre; |
import org.tela_botanica.client.composants.IdentificationFenetre; |
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.Utilisateur; |
import org.tela_botanica.client.vues.ContenuPanneauVue; |
import org.tela_botanica.client.vues.EntetePanneauVue; |
import org.tela_botanica.client.vues.StructureDetailPanneauVue; |
12,6 → 15,7 |
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; |
116,4 → 120,34 |
panneauCentre.add(institutionVue); |
institutionVue.rafraichir(nouvelleDonnees); |
} |
public void ouvrirAide() { |
AideFenetre aideFenetre = new AideFenetre(); |
aideFenetre.show(); |
aideFenetre.el().fadeIn(FxConfig.NONE); |
} |
public void ouvrirParametres() { |
//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) { |
if (id.equals(ComposantId.MENU_CEL)) { |
Window.open(((Configuration) Registry.get(RegistreId.CONFIG)).getCelUrl(), "Carnet en ligne", ""); |
} else if (id.equals(ComposantId.MENU_BEL)) { |
Window.open(((Configuration) Registry.get(RegistreId.CONFIG)).getCelUrl(), "Carnet en ligne", ""); |
} |
} |
public void connecterUtilisateur(Utilisateur utilisateur) { |
panneauNord.rafraichir(utilisateur); |
} |
} |
/trunk/src/org/tela_botanica/client/ComposantId.java |
---|
New file |
0,0 → 1,11 |
package org.tela_botanica.client; |
public final class ComposantId { |
public static final String BTN_AIDE = "coel-id-btn-aide"; |
public static final String BTN_PARAMETRES = "coel-id-btn-parametres"; |
public static final String BTN_IDENTIFICATION = "coel-id-btn-identification"; |
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";; |
} |
/trunk/src/org/tela_botanica/client/vues/EntetePanneauVue.java |
---|
1,12 → 1,17 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.ComposantId; |
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.modeles.Configuration; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Utilisateur; |
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.widget.HtmlContainer; |
import com.extjs.gxt.ui.client.widget.Info; |
16,11 → 21,17 |
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 { |
public class EntetePanneauVue extends LayoutContainer implements Rafraichissable { |
private ButtonBar barreBoutons = null; |
private Button identificationBouton = null; |
private Button deconnexionBouton = null; |
public EntetePanneauVue() { |
setLayout(new RowLayout(Orientation.HORIZONTAL)); |
setId("coel-entete"); |
32,30 → 43,86 |
html.setHtml(sb.toString()); |
html.setEnableState(false); |
// Création de l'écouteur |
SelectionListener<ComponentEvent> ecouteur = new SelectionListener<ComponentEvent>() { |
HtmlContainer htmlIdentification = new HtmlContainer(); |
StringBuffer sb2 = new StringBuffer(); |
sb2.append(" <div id='coel-identification'></div>"); |
html.setHtml(sb.toString()); |
html.setEnableState(false); |
// Création des écouteurs |
SelectionListener<ComponentEvent> boutonEcouteur = new SelectionListener<ComponentEvent>() { |
public void componentSelected(ComponentEvent ce) { |
Button btn = (Button) ce.component; |
Info.display(btn.getText(), "Chargement de la fenêtre '{0}' en cours...", btn.getText()); |
Button btn = (Button) ce.component; |
Info.display(btn.getText()+" - "+btn.getId(), "Chargement de la fenêtre '{0}' en cours...", btn.getText()); |
if (btn.getId().equals(ComposantId.BTN_AIDE)) { |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).ouvrirAide(); |
} else if (btn.getId().equals(ComposantId.BTN_PARAMETRES)) { |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).ouvrirParametres(); |
} else if (btn.getId().equals(ComposantId.BTN_IDENTIFICATION)) { |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).ouvrirIdentification(); |
} else if (btn.getId().equals(ComposantId.BTN_APPLIS)) { |
btn.getMenu().show(btn); |
} |
} |
}; |
ButtonBar buttonBar = new ButtonBar(); |
buttonBar.setButtonAlign(Style.HorizontalAlignment.RIGHT); |
buttonBar.add(new Button("Paramêtres", ecouteur)); |
buttonBar.add(new Button("Aide", ecouteur)); |
buttonBar.add(new Button("Identifiez vous...", ecouteur)); |
barreBoutons = new ButtonBar(); |
barreBoutons.setButtonAlign(Style.HorizontalAlignment.RIGHT); |
Button parametresBouton = new Button("Paramêtres", boutonEcouteur); |
parametresBouton.setId(ComposantId.BTN_PARAMETRES); |
barreBoutons.add(parametresBouton); |
Button aideBouton = new Button("Aide", boutonEcouteur); |
aideBouton.setId(ComposantId.BTN_AIDE); |
barreBoutons.add(aideBouton); |
identificationBouton = new Button("Identifiez vous...", boutonEcouteur); |
identificationBouton.setId(ComposantId.BTN_IDENTIFICATION); |
barreBoutons.add(identificationBouton); |
deconnexionBouton = new Button("Deconnexion", boutonEcouteur); |
deconnexionBouton.setId(ComposantId.BTN_DECONNEXION); |
deconnexionBouton.hide(); |
barreBoutons.add(deconnexionBouton); |
SplitButton button = new SplitButton(); |
button.setText("Changez d'application..."); |
button.addSelectionListener(ecouteur); |
Menu menu = new Menu(); |
String urlCel = ((Configuration) Registry.get(RegistreId.CONFIG)).getCelUrl(); |
menu.add(new MenuItem("<a href='"+urlCel+"'>Carnet en ligne</a>")); |
button.setMenu(menu); |
buttonBar.add(button); |
SplitButton applisBouton = new SplitButton("Changez d'application..."); |
applisBouton.setId(ComposantId.BTN_APPLIS); |
applisBouton.addSelectionListener(boutonEcouteur); |
add(html, new RowData(.3, 1)); |
add(buttonBar, new RowData(.7, 50)); |
Menu menu = new Menu(); |
MenuItem menuCel = new MenuItem("Carnet en ligne", new SelectionListener<ComponentEvent>() { |
@Override |
public void componentSelected(ComponentEvent ce) { |
Menu me = (Menu) ce.component; |
MenuItem mi = (MenuItem) me.getItemByItemId(ComposantId.MENU_CEL); |
Info.display(mi.getId()+" - "+mi.getText(), "Chargement du menu '{0}' en cours...", mi.getId()); |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).ouvrirApplis(ComposantId.MENU_CEL); |
} |
}); |
menuCel.setId(ComposantId.MENU_CEL); |
menu.add(menuCel); |
MenuItem menuBel = new MenuItem("Biblio en ligne", new SelectionListener<ComponentEvent>() { |
@Override |
public void componentSelected(ComponentEvent ce) { |
Menu me = (Menu) ce.component; |
MenuItem mi = (MenuItem) me.getItemByItemId(ComposantId.MENU_BEL); |
Info.display(mi.getId()+" - "+mi.getText(), "Chargement du menu '{0}' en cours...", mi.getId()); |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).ouvrirApplis(ComposantId.MENU_BEL); |
} |
}); |
menuBel.setId(ComposantId.MENU_BEL); |
menu.add(menuBel); |
applisBouton.setMenu(menu); |
barreBoutons.add(applisBouton); |
add(html, new RowData(.3, 1)); |
add(htmlIdentification, new RowData(.2, 50)); |
add(barreBoutons, new RowData(.5, 50)); |
} |
public void rafraichir(Object nouvelleDonnees) { |
if (nouvelleDonnees instanceof Utilisateur) { |
identificationBouton.hide(); |
deconnexionBouton.show(); |
} |
} |
} |
/trunk/src/org/tela_botanica/client/composants/IdentificationFenetre.java |
---|
7,10 → 7,16 |
* |
* http://extjs.com/license |
*/ |
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; |
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; |
20,99 → 26,100 |
public class IdentificationFenetre extends Dialog { |
protected StatusButtonBar buttonBar; |
protected TextField<String> userName; |
protected TextField<String> password; |
protected Button reset; |
protected Button login; |
protected StatusButtonBar buttonBar; |
protected TextField<String> userName; |
protected TextField<String> password; |
protected Button reset; |
protected Button login; |
public IdentificationFenetre() { |
FormLayout layout = new FormLayout(); |
layout.setLabelWidth(90); |
layout.setDefaultWidth(155); |
setLayout(layout); |
public IdentificationFenetre() { |
FormLayout layout = new FormLayout(); |
layout.setLabelWidth(90); |
layout.setDefaultWidth(155); |
setLayout(layout); |
setButtons(""); |
setIconStyle("user"); |
setHeading("Collections en ligne - Identification"); |
setModal(true); |
setBodyBorder(true); |
setBodyStyle("padding: 10px;background: none"); |
setWidth(300); |
setResizable(false); |
setButtons(""); |
setIconStyle("user"); |
setHeading("Collections en ligne - Identification"); |
setModal(true); |
setBodyBorder(true); |
setBodyStyle("padding: 10px;background: none"); |
setWidth(300); |
setResizable(false); |
KeyListener keyListener = new KeyListener() { |
public void componentKeyUp(ComponentEvent event) { |
validate(); |
} |
KeyListener keyListener = new KeyListener() { |
public void componentKeyUp(ComponentEvent event) { |
validate(); |
} |
}; |
}; |
userName = new TextField<String>(); |
userName.setMinLength(4); |
userName.setFieldLabel("Courriel"); |
userName.addKeyListener(keyListener); |
add(userName); |
userName = new TextField<String>(); |
userName.setMinLength(4); |
userName.setFieldLabel("Courriel"); |
userName.addKeyListener(keyListener); |
add(userName); |
password = new TextField<String>(); |
password.setMinLength(4); |
password.setPassword(true); |
password.setFieldLabel("Mot de passe"); |
password.addKeyListener(keyListener); |
add(password); |
password = new TextField<String>(); |
password.setMinLength(4); |
password.setPassword(true); |
password.setFieldLabel("Mot de passe"); |
password.addKeyListener(keyListener); |
add(password); |
setFocusWidget(userName); |
setFocusWidget(userName); |
buttonBar = new StatusButtonBar(); |
setButtonBar(buttonBar); |
buttonBar = new StatusButtonBar(); |
setButtonBar(buttonBar); |
} |
} |
@Override |
protected void createButtons() { |
reset = new Button("Réinitialiser"); |
reset.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
userName.reset(); |
password.reset(); |
validate(); |
userName.focus(); |
} |
@Override |
protected void createButtons() { |
reset = new Button("Réinitialiser"); |
reset.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
userName.reset(); |
password.reset(); |
validate(); |
userName.focus(); |
} |
}); |
}); |
login = new Button("Valider"); |
//login.disable(); // Par défaut : dois être en mode disable |
login.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
onSubmit(); |
} |
}); |
login = new Button("Valider"); |
//login.disable(); // Par défaut : dois être en mode disable |
login.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
onSubmit(); |
} |
}); |
buttonBar.add(reset); |
buttonBar.add(login); |
} |
buttonBar.add(reset); |
buttonBar.add(login); |
} |
protected void onSubmit() { |
buttonBar.getStatusBar().showBusy("Chargement en cours ..."); |
buttonBar.disable(); |
Timer t = new Timer() { |
protected void onSubmit() { |
buttonBar.getStatusBar().showBusy("Chargement en cours ..."); |
buttonBar.disable(); |
Timer t = new Timer() { |
@Override |
public void run() { |
IdentificationFenetre.this.hide(); |
((Mediateur) Registry.get(RegistreId.MEDIATEUR)).connecterUtilisateur(new Utilisateur(userName.getValue(), true)); |
} |
@Override |
public void run() { |
IdentificationFenetre.this.hide(); |
} |
}; |
t.schedule(2);// Par défaut : 2000 |
} |
}; |
t.schedule(2);// Par défaut : 2000 |
} |
protected boolean hasValue(TextField<String> field) { |
return field.getValue() != null && field.getValue().length() > 0; |
} |
protected boolean hasValue(TextField<String> field) { |
return field.getValue() != null && field.getValue().length() > 0; |
} |
protected void validate() { |
login.setEnabled(hasValue(userName) && hasValue(password) && password.getValue().length() > 3); |
} |
protected void validate() { |
login.setEnabled(hasValue(userName) && hasValue(password) && password.getValue().length() > 3); |
} |
} |
/trunk/src/org/tela_botanica/client/composants/AideFenetre.java |
---|
New file |
0,0 → 1,53 |
package org.tela_botanica.client.composants; |
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.ContentPanel; |
import com.extjs.gxt.ui.client.widget.Dialog; |
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; |
public class AideFenetre extends Dialog { |
public AideFenetre() { |
setBodyBorder(false); |
setButtons(Dialog.OK); |
setIconStyle("icon-app-side"); |
setHeading("COEL - Aide"); |
setWidth(400); |
setHeight(225); |
setHideOnButtonClick(true); |
BorderLayout layout = new BorderLayout(); |
setLayout(layout); |
// 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); |
// Panneau Central |
panel = new ContentPanel(); |
data = new BorderLayoutData(LayoutRegion.CENTER); |
add(panel, data); |
} |
/** |
* Sur une fermeture on fait un fadeOut. |
* |
*/ |
protected void onButtonPressed(Button btn) { |
if (this.isHideOnButtonClick()) { |
this.el().fadeOut(FxConfig.NONE); |
} else { |
super.onButtonPressed(btn); |
} |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/Utilisateur.java |
---|
New file |
0,0 → 1,76 |
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 { |
/** |
* |
*/ |
private static final long serialVersionUID = 1L; |
private String identifiant = null; |
private boolean identifie = false; |
public Utilisateur(String identifiant, boolean identifie) { |
this.identifiant = identifiant; |
this.identifie = identifie; |
} |
/** |
* Constructeur avec un objet JSON |
* |
* @param image |
*/ |
public Utilisateur(JSONObject utilisateur) { |
// l'objet JSON est une table de hachage |
Set<String> im = utilisateur.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("^cp_", ""); |
if (utilisateur.get(cle).isString() != null) { |
String valeur = utilisateur.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 void setNom(String nom) { |
set("nom", nom); |
} |
public void setPrenom(String prenom) { |
set("prenom", prenom); |
} |
/** |
* Retourne l'identifiant de l'utilisateur identifié ou un identifiant de session. |
* @return String identifiant |
*/ |
public String getIdentifiant() { |
return identifiant; |
} |
/** |
* Retourne vrai si utilisateur est identifié. |
* @return boolean |
*/ |
public boolean isIdentifie() { |
return identifie; |
} |
} |