/trunk/www/org.tela_botanica.cel2/images/vide.jpg |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/4D12BCA46FB75F89057C18F600A3EACE.cache.xml |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/5E5FB118688C2B22AE4994F5E4159BCF.cache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/D7BFA3693FABA3E3CDF246E3E031E58B.cache.xml |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/A2E0E0E86C90ABDC6518BFF90B3D8074.cache.xml |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/D7BFA3693FABA3E3CDF246E3E031E58B.cache.html |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/4D12BCA46FB75F89057C18F600A3EACE.cache.html |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/config.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/A2E0E0E86C90ABDC6518BFF90B3D8074.cache.html |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/2EA4FFFC1C98D658D7C52877695CC188.cache.xml |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/2EA4FFFC1C98D658D7C52877695CC188.cache.html |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/D7BFA3693FABA3E3CDF246E3E031E58B.cache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/4D12BCA46FB75F89057C18F600A3EACE.cache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/A2E0E0E86C90ABDC6518BFF90B3D8074.cache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/clear.cache.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/2EA4FFFC1C98D658D7C52877695CC188.cache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/5E5FB118688C2B22AE4994F5E4159BCF.cache.xml |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/5E5FB118688C2B22AE4994F5E4159BCF.cache.html |
---|
File deleted |
\ No newline at end of file |
/trunk/www/org.tela_botanica.cel2/cel2.html |
---|
1,3 → 1,16 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
"http://www.w3.org/TR/html4/loose.dtd"> |
<!-- The HTML 4.01 Transitional DOCTYPE declaration--> |
<!-- above set at the top of the file will set --> |
<!-- the browser's rendering engine into --> |
<!-- "Standards Mode", which gives better cross --> |
<!-- browser compatibility to the application. --> |
<!-- Omitting this line leaves most browsers in --> |
<!-- "Quirks mode", emulating the bugs in older --> |
<!-- browser versions. --> |
<html> |
<head> |
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
11,11 → 24,7 |
<!-- If you add any GWT meta tags, they must --> |
<!-- be added before this line. --> |
<!-- --> |
<script type="text/javascript" language="javascript" src="config.js"></script> |
<script type="text/javascript" language="javascript" src="org.tela_botanica.cel2.nocache.js"></script> |
</head> |
<!-- --> |
/trunk/www/org.tela_botanica.cel2/org.tela_botanica.cel2.nocache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/www/org.tela_botanica.cel2/org.tela_botanica.cel2-xs.nocache.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/src/org/tela_botanica/client/CarnetEnLigne.java |
---|
New file |
0,0 → 1,51 |
/** |
Auteurs : |
- David Delon david.delon@clapas.net 2007 |
Licence Cecill/GPL |
*/ |
/* |
* CarnetEnLigne.java (Point d'entree de l'application carnet en ligne) |
* |
* |
*/ |
package org.tela_botanica.client; |
import com.google.gwt.core.client.EntryPoint; |
/** |
* Entry point classes define <code>onModuleLoad()</code>. |
*/ |
public class CarnetEnLigne implements EntryPoint { |
public void onModuleLoad() { |
// new Mediator(); |
new CarnetEnLigneMediateur(); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.1 2008-06-04 16:47:56 ddelon |
* modele mvc+mediateur |
* |
* Revision 1.11 2008-01-02 21:26:04 ddelon |
* mise en place mygwt |
* |
* Revision 1.10 2007-09-17 19:25:34 ddelon |
* Documentation |
* |
* |
*/ |
/trunk/src/org/tela_botanica/client/CarnetEnLigneMediateur.java |
---|
1,187 → 1,97 |
package org.tela_botanica.client; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.interfaces.iMediateur; |
import org.tela_botanica.client.interfaces.iRetourUtilisateur; |
import org.tela_botanica.client.modeles.Utilisateur; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import org.tela_botanica.client.vues.EtatConnexionVue; |
import org.tela_botanica.client.vues.FormulaireDeConnexionVue; |
import com.google.gwt.user.client.Window; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.layout.VerticalLayout; |
/** |
* Mediateur gérant les interactions entre vues et les echanges de données |
* C'est un singleton. |
* @author david delon |
* |
*/ |
public class CarnetEnLigneMediateur implements Rafraichissable { |
public class CarnetEnLigneMediateur { |
// Evenenements |
final static public int ETAT_CONNEXION=1; |
final static public int DECONNEXION=2; |
final static public int CONNEXION = 3; |
/** |
* booleen qui verifie l'unicite de l'instance |
*/ |
private static boolean estInstancie = false ; |
private final CarnetEnLigneModele carnetEnLigneModele; |
private Utilisateur utilisateur=null; |
/** |
* modele de données |
*/ |
private CarnetEnLigneModele carnetEnLigneModele=null; |
// Fonctionnement servicecs |
private boolean async=true; |
/** |
* panneau principal de l'application "Carnet en ligne" |
*/ |
private Panel panneauPrincipalCarnetEnLigne=new Panel("Carnet en ligne"); |
public CarnetEnLigneMediateur() { |
carnetEnLigneModele=new CarnetEnLigneModele(); |
//addListener(ETAT_CONNEXION,this); |
getEtatUtilisateur(); // Alimente Objet Utilisateur |
} |
/** |
* panneau a onglet pour les observation et les images |
*/ |
private Panel ongletsObservationsImages=null; |
/** |
* Indicateur d'etat de la connexion utilisateur |
* Fin construction (est appelle sur reception evenement Applicatif ETAT_CONNEXION) |
* |
*/ |
private EtatConnexionVue etatConnexionVue=null; |
/** |
* Texte d'invite connexion |
*/ |
private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica"; |
/** |
* Boolean indiquant un essai de connexion |
*/ |
private boolean tentativeConnection=false; |
/** |
* Formulaire de connexion (lazy instantiation) |
* |
*/ |
private FormulaireDeConnexionVue formulaireDeConnexionVue=null; |
/** |
* Mediateur Gestion des images |
*/ |
private ImageMediateur imageMediateur=null; |
/** |
* Mediateur Gestion des observations |
*/ |
private ObservationMediateur observationMediateur=null; |
/** |
* Utilisateur en cours |
*/ |
private void _CarnetEnLigneMediateur() { |
private Utilisateur utilisateur=null; |
ImageMediateur.Instance() ; |
new ObservationMediateur(this); |
public static CarnetEnLigneMediateur Instance() |
{ |
if(!estInstancie) |
{ |
estInstancie = true ; |
return new CarnetEnLigneMediateur() ; |
} |
else |
{ |
return null ; |
} |
} |
/** |
* constructeur privé (on accède a la classe par la méthode getInstance |
*/ |
private void getEtatUtilisateur() { // Pourrait devenir publique ... |
// TODO : utiliser une factory ici : Avec Modele synchrone ou non, ou au niveau methode comme dans cette exemple |
private CarnetEnLigneMediateur() { |
// Disposition |
// Pas possible de traiter dans Modele car retour asynchrone devant etre traité ici. |
panneauPrincipalCarnetEnLigne.setLayout(new VerticalLayout()); |
// if asynchrone |
// On crée un modèle d'acces aux donnnes |
carnetEnLigneModele=CarnetEnLigneModele.Instance(); |
// La vue affichant le statut de la connexion |
if (async) { |
carnetEnLigneModele.getUtilisateurAsynchroneDAO( |
new iRetourUtilisateur() { |
public void onRetour(Utilisateur uti) { |
utilisateur=uti; |
// fireEvent(ETAT_CONNEXION); |
} |
etatConnexionVue=new EtatConnexionVue(this); |
} |
); |
} |
// else if synchrone |
else { |
// Le panneau à onglet qui contient les 2 applications Observation et Images |
utilisateur= carnetEnLigneModele.getUtilisateurSynchroneDAO(); |
_CarnetEnLigneMediateur(); |
} |
ongletsObservationsImages = new Panel(); |
panneauPrincipalCarnetEnLigne.add(etatConnexionVue); |
// on ajoute le panneau a onglet au panneau principal |
panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages); |
} |
// On ajoute les applications |
observationMediateur = ObservationMediateur.Instance(this); |
// imageMediateur= ImageMediateur.Instance(); |
// on ajoute les panneaux principaux des applications au panneau à onglets |
// ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage()); |
ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation()); |
// Evenenements Applicatifs |
/* |
public void handleEvent(BaseEvent be) { |
if (be.type==CarnetEnLigneMediateur.ETAT_CONNEXION) { |
_CarnetEnLigneMediateur(); // Fin initialisation |
} |
} |
*/ |
public void getEtatUtilisateur() { |
carnetEnLigneModele.getEtatUtilisateur(this); |
} |
// Methode publiques |
/** |
* Recherche Identifiant utilisateur en cours et etat de connection |
* @return Utilisateur |
198,8 → 108,18 |
public void deconnecterUtilisateur() { |
carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant()); |
carnetEnLigneModele.deconnecterUtilisateur( |
new iRetourUtilisateur() { |
public void onRetour(Utilisateur uti) { |
utilisateur=uti; |
//fireEvent(DECONNEXION); |
} |
}, utilisateur.getIdentifiant() |
); |
} |
206,94 → 126,21 |
public void connecterUtilisateur(String login, String password) { |
tentativeConnection=true; |
carnetEnLigneModele.connecterUtilisateur(this, login, password); |
carnetEnLigneModele.connecterUtilisateur( |
new iRetourUtilisateur() { |
public void onRetour(Utilisateur uti) { |
utilisateur=uti; |
//fireEvent(CONNEXION); |
} |
}, login, password |
); |
} |
/** |
* Affichage etat de la connexion |
*/ |
private void afficheEtatConnexion() { |
if (!utilisateur.isIdentifie()) { |
etatConnexionVue.setEtat(texteDeconnexion,false); |
} |
else { |
etatConnexionVue.setEtat(utilisateur.getIdentifiant()+ " (deconnexion)",true); |
} |
} |
} |
/** |
* |
* Affichage boite de connexion |
* |
*/ |
public void afficherDialogueConnexion() { |
if (formulaireDeConnexionVue==null) { |
formulaireDeConnexionVue= new FormulaireDeConnexionVue(this); |
} |
// Position it roughly in the middle of the screen. |
int left = (Window.getClientWidth() - 512) / 2; |
int top = (Window.getClientHeight() - 256) / 2; |
formulaireDeConnexionVue.setPopupPosition(left, top); |
formulaireDeConnexionVue.show(); |
} |
public Panel getPanneauPrincipalCarnetEnLigne() { |
return panneauPrincipalCarnetEnLigne; |
} |
// TODO : repandre rafraichissement |
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) { |
if (nouvelleDonnees instanceof Utilisateur) { |
utilisateur = (Utilisateur) nouvelleDonnees; |
afficheEtatConnexion(); |
if ((tentativeConnection) && !utilisateur.isIdentifie()) { |
formulaireDeConnexionVue.afficherMessageAlerte(); |
} |
else { |
if ((tentativeConnection) && utilisateur.isIdentifie()) { |
formulaireDeConnexionVue.hide(); |
} |
} |
// On lance l'affichage des observations |
observationMediateur.obtenirNombreObservation(); |
} |
} |
} |
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java |
---|
205,7 → 205,9 |
panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre); |
// et le panneau de métadonnées et d'info sur le coté droit |
panneauPrincipalImage.add(detailsEtMotsCles,regionEst); |
} |
/** |
* Change la valeur du booleen de selection |
* @param selection la nouvelle valeur du booléen |
412,14 → 414,6 |
} |
public void afficherMenuId() |
{ |
IdVue i = new IdVue(this) ; |
i.show() ; |
} |
/** |
* Renvoie l'identifiant de la vue en cours |
* @return l'identifiant de la vue en cours de visualisation |
1048,10 → 1042,12 |
} |
public void afficherMenuId() |
{ |
IdVue i = new IdVue(this) ; |
i.show() ; |
} |
// Lancement identification |
/** |
* C'est dans cette fonction que doivent être renvoyé les valeurs des filtres |
* sous forme de tableau [nom, valeur] |
/trunk/src/org/tela_botanica/client/vues/BarrePaginationObservationVue.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/vues/ListeObservationVue.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/vues/AutoCompleteAsyncTextBox.java |
---|
File deleted |
\ No newline at end of file |
/trunk/src/org/tela_botanica/client/vues/FormulaireDeConnexionVue.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/vues/LocationAssistantVue.java |
---|
File deleted |
\ No newline at end of file |
/trunk/src/org/tela_botanica/client/vues/EtatConnexionVue.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/vues/FormulaireSaisieObservationVue.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/interfaces/FournisseurListe.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/CarnetEnLigneModele.java |
---|
6,87 → 6,60 |
*/ |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Configuration; |
import org.tela_botanica.client.interfaces.iRetourUtilisateur; |
import org.tela_botanica.client.modeles.Utilisateur; |
import org.tela_botanica.client.modeles.UtilisateurAsynchroneDAO; |
import com.google.gwt.i18n.client.Dictionary; |
public class CarnetEnLigneModele { |
private final String baseURL; // Url d'appel aux services |
/** |
* booleen qui verifie l'unicite de l'instance |
*/ |
private static boolean estInstancie = false ; |
/** |
* La configuration en cours |
*/ |
private Configuration config = null; |
/** |
* Constructeur |
*/ |
public static CarnetEnLigneModele Instance() |
{ |
if(!estInstancie) |
{ |
estInstancie = true ; |
return new CarnetEnLigneModele() ; |
} |
else |
{ |
return null ; |
} |
} |
private CarnetEnLigneModele() { |
public CarnetEnLigneModele() { |
config = new Configuration(); |
baseURL=Dictionary.getDictionary("Parameters").get("serviceBaseUrl"); |
} |
/** |
* |
* |
*/ |
public void getUtilisateurAsynchroneDAO(final iRetourUtilisateur retour) { |
public void deconnecterUtilisateur(Rafraichissable r, String user) { |
new UtilisateurAsynchroneDAO().getUtilisateur(baseURL,retour ); |
new UtilisateurAsynchroneDAO(this).deconnecterUtilisateur(r,user ); |
} |
public void connecterUtilisateur(Rafraichissable r, String login , String password) { |
new UtilisateurAsynchroneDAO(this).connecteUtilisateur(r,login, password ); |
} |
/** |
* |
* |
*/ |
public Utilisateur getUtilisateurSynchroneDAO() { |
return new Utilisateur("David Delon synchrone",true); |
public void getEtatUtilisateur(Rafraichissable r) { |
new UtilisateurAsynchroneDAO(this).getEtatUtilisateur(r); |
} |
public void deconnecterUtilisateur(final iRetourUtilisateur retour, String user) { |
new UtilisateurAsynchroneDAO().deconnecterUtilisateur(baseURL,retour,user ); |
/** |
* Accesseur pour la configuration en cours d'utilisation |
* |
* @return la configuration |
*/ |
public Configuration getConfig() { |
return config; |
} |
public void connecterUtilisateur(final iRetourUtilisateur retour, String login , String password) { |
new UtilisateurAsynchroneDAO().connecteUtilisateur(baseURL,retour,login, password ); |
} |
} |
/trunk/src/org/tela_botanica/client/cel2.java |
---|
1,12 → 1,20 |
package org.tela_botanica.client; |
import org.tela_botanica.client.image.ImageMediateur; |
import com.google.gwt.core.client.EntryPoint; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.DialogBox; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.RootPanel; |
import com.google.gwt.user.client.ui.VerticalPanel; |
import com.google.gwt.user.client.ui.Widget; |
import com.gwtext.client.widgets.Viewport; |
/** |
* Entry point classes define <code>onModuleLoad()</code>. |
*/ |
public class cel2 implements EntryPoint { |
/** |
13,16 → 21,9 |
* This is the entry point method. |
*/ |
public void onModuleLoad() { |
CarnetEnLigneMediateur carnetEnLigneMediateur= CarnetEnLigneMediateur.Instance(); |
ImageMediateur im = ImageMediateur.Instance() ; |
new Viewport(carnetEnLigneMediateur.getPanneauPrincipalCarnetEnLigne()); |
// On appelle la gestion de l'identification |
// Veillez d'ailleurs a ne pas appeller de services dans les constructeurs |
carnetEnLigneMediateur.getEtatUtilisateur(); |
new Viewport(im.getPanneauPrincipalImage()); |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/ReferentielCommune.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/ListeReferentielCommune.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/ListeObservation.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/Configuration.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/ListeReferentielCommuneAsynchroneDAO.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/ListeObservationAsynchroneDAO.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/NombreObservationAsynchroneDAO.java |
---|
File deleted |
/trunk/src/org/tela_botanica/client/modeles/UtilisateurAsynchroneDAO.java |
---|
5,8 → 5,7 |
* |
*/ |
import org.tela_botanica.client.CarnetEnLigneModele; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.interfaces.iRetourUtilisateur; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONBoolean; |
20,25 → 19,15 |
/** |
* Le modèle associé au DAO |
*/ |
private CarnetEnLigneModele carnetEnLigneModele = null ; |
/** |
* Constructeur |
*/ |
public UtilisateurAsynchroneDAO(CarnetEnLigneModele carnetEnLigneModele) { |
this.carnetEnLigneModele=carnetEnLigneModele; |
public UtilisateurAsynchroneDAO() { |
} |
/** |
* Methode de classe d'appel du service gestion identification |
* @param baseURL : URL du service |
45,11 → 34,11 |
* @param retour : methode appelle en retour d'appel |
*/ |
public void getEtatUtilisateur(final Rafraichissable r) { |
public void getUtilisateur(String baseURL, final iRetourUtilisateur retour) { |
// Recherche identifiant utilisateur identifie |
HTTPRequest.asyncGet(carnetEnLigneModele.getConfig().getServiceBaseUrl() + "/User/", new ResponseTextHandler() { |
HTTPRequest.asyncGet(baseURL + "/User/", new ResponseTextHandler() { |
public void onCompletion(String str) { |
JSONValue jsonValue = JSONParser.parse(str); |
62,7 → 51,7 |
boolean identifie = ((JSONBoolean) jsonArray.get(1)) |
.booleanValue(); // Drapeau leve si utilisateur |
// deja identifie |
r.rafraichir(new Utilisateur(identifiant, identifie),true); |
retour.onRetour(new Utilisateur(identifiant, identifie)); |
} |
} |
}); |
71,9 → 60,9 |
public void deconnecterUtilisateur(final Rafraichissable r, String user) { |
public void deconnecterUtilisateur(String baseURL, final iRetourUtilisateur retour, String user) { |
HTTPRequest.asyncGet(carnetEnLigneModele.getConfig().getServiceBaseUrl()+ "/User/" + user , |
HTTPRequest.asyncGet(baseURL + "/User/" + user , |
new ResponseTextHandler() { |
public void onCompletion(String str) { |
89,7 → 78,8 |
.booleanValue(); // Drapeau leve si utilisateur |
// deja identifie |
r.rafraichir(new Utilisateur(identifiant, identifie),true); |
retour.onRetour(new Utilisateur(identifiant, identifie)); |
} |
} |
}); |
97,9 → 87,9 |
public void connecteUtilisateur (final Rafraichissable r, String login, String password) { |
public void connecteUtilisateur(String baseURL,final iRetourUtilisateur retour, String login, String password) { |
HTTPRequest.asyncGet(carnetEnLigneModele.getConfig().getServiceBaseUrl() + "/User/" + login + "/" + password , |
HTTPRequest.asyncGet(baseURL + "/User/" + login + "/" + password , |
new ResponseTextHandler() { |
public void onCompletion(String str) { |
117,7 → 107,7 |
// deja identifie |
r.rafraichir(new Utilisateur(identifiant, identifie),true); |
retour.onRetour(new Utilisateur(identifiant, identifie)); |
} |
} |
}); |
124,7 → 114,4 |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/ObservationAsynchroneDAO.java |
---|
New file |
0,0 → 1,115 |
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.Util; |
import org.tela_botanica.client.interfaces.iRetourObservation; |
import com.google.gwt.http.client.URL; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONNumber; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.HTTPRequest; |
import com.google.gwt.user.client.ResponseTextHandler; |
public class ObservationAsynchroneDAO { |
/** |
* Constructeur |
*/ |
public ObservationAsynchroneDAO() { |
} |
// TODO Classe Filtre pour les parametres ? |
public void getNombreObservation(String baseURL, final iRetourObservation retour, String identifiant, String identifiantLocalite, String localite, String annee, String mois, String jour, String lieudit, String rechercheLibre) { |
HTTPRequest.asyncGet(baseURL + "/InventoryItemList/" + identifiant + "/" + identifiantLocalite + "/" + URL.encodeComponent(localite) + "/" + annee + "/" + mois + "/" + jour + "/" + URL.encodeComponent(rechercheLibre) + "/" + URL.encodeComponent(lieudit), |
new ResponseTextHandler() { |
public void onCompletion(String str) { |
JSONValue jsonValue = JSONParser.parse(str); |
JSONNumber jsonNumber; |
if ((jsonNumber = jsonValue.isNumber()) != null) { |
retour.onRetour(new Observation((int) jsonNumber.getValue())); |
} |
} |
}); |
} |
public void getListeObservation(String baseURL,final iRetourObservation retour, String identifiant, String identifiantLocalite, String localite, String annee, String mois, String jour, String lieudit, String rechercheLibre, int debut, int longueur) |
{ |
HTTPRequest.asyncGet(baseURL + "/InventoryItemList/" + identifiant + "/" + identifiantLocalite + "/" + URL.encodeComponent(localite) +"/" + annee + "/" + mois + "/" + jour + "/" + URL.encodeComponent(rechercheLibre) + "/" + URL.encodeComponent(lieudit) + "/" |
+ debut + "/" + longueur , |
new ResponseTextHandler() { |
public void onCompletion(String str) { |
JSONValue jsonValue = JSONParser.parse(str); |
JSONArray jsonArray; |
JSONArray jsonArrayNested; |
if ((jsonArray = jsonValue.isArray()) != null) { |
if ((jsonArray = jsonValue.isArray()) != null) { |
int arraySize = jsonArray.size(); |
Observation[] listeObservation=new Observation[arraySize]; |
for (int i = 0; i < arraySize; i++) { |
if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) { |
String transmis=((JSONString) jsonArrayNested.get(13)).stringValue(); |
String nomSaisi=Util.toCelString(((JSONString) jsonArrayNested.get(0)).toString()); |
String nomRetenu=Util.toCelString(((JSONString) jsonArrayNested.get(2)).toString()); |
String numeroNomenclatural=((JSONString) jsonArrayNested.get(3)).stringValue(); |
String numeroTaxonomique=((JSONString) jsonArrayNested.get(4)).stringValue(); |
String famille=Util.toCelString(((JSONString) jsonArrayNested .get(5)).toString()); |
String localite=Util.toCelString(((JSONString) jsonArrayNested .get(6)).toString()); |
String lieudit=Util.toCelString(((JSONString) jsonArrayNested .get(9)).toString()); |
String station=Util.toCelString(((JSONString) jsonArrayNested .get(10)).toString()); |
String milieu=Util.toCelString(((JSONString) jsonArrayNested .get(11)).toString()); |
String commentaire=Util.toCelString(((JSONString) jsonArrayNested .get(12)).toString()); |
String date=((JSONString) jsonArrayNested .get(8)).stringValue(); |
String numeroOrdre=((JSONString) jsonArrayNested.get(7)).stringValue(); |
listeObservation[i]=new Observation(transmis, nomSaisi, nomRetenu, numeroNomenclatural, numeroTaxonomique, famille, localite, lieudit, station, milieu, commentaire, date, numeroOrdre); |
} |
} |
retour.onRetour(new Observation(listeObservation)); |
} |
} |
} |
}); |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/Observation.java |
---|
4,6 → 4,9 |
public class Observation { |
private int nombreObservations=0; |
private Observation [] listeObservation=null; |
private String transmis=null; |
private String nomSaisi=null; |
private String nomRetenu=null; |
25,6 → 28,22 |
/** |
* Constructeur nombre total d'observations |
* @param i |
*/ |
public Observation(int i) { |
nombreObservations=i; |
} |
public int getNombreObservations() { |
return nombreObservations; |
} |
/** |
* @param transmis |
* @param nomSaisi |
* @param nomRetenu |
58,70 → 77,19 |
} |
public String getNomSaisi() { |
return nomSaisi; |
public Observation(Observation[] listeObservation) { |
this.listeObservation=listeObservation; |
} |
public String getNumeroOrdre() { |
return numeroOrdre; |
public Observation[] getListeObservation() { |
return listeObservation; |
} |
public String getCommentaire() { |
return commentaire; |
public String getNomSaisi() { |
return nomSaisi; |
} |
public String getDate() { |
return date; |
} |
public String getFamille() { |
return famille; |
} |
public String getLieudit() { |
return lieudit; |
} |
public String getLocalite() { |
return localite; |
} |
public String getMilieu() { |
return milieu; |
} |
public String getNomRetenu() { |
return nomRetenu; |
} |
public String getNumeroNomenclatural() { |
return numeroNomenclatural; |
} |
public String getNumeroTaxonomique() { |
return numeroTaxonomique; |
} |
public String getStation() { |
return station; |
} |
public String getTransmis() { |
return transmis; |
} |
} |
/trunk/src/org/tela_botanica/client/observation/EtatConnexionVue.java |
---|
New file |
0,0 → 1,103 |
/** |
David Delon david.delon@clapas.net 2007 |
*/ |
/* |
* EtatConnexionVue.java : affichage information portant sur le statut de la connexion utilisateur |
* |
* |
* 1: Le programme affiche le statut connecte si l'utilisateur s'est connecte precedemment, sinon s'affiche le statut deconnecte |
* 2: Le programme arme les actions liees a la connection ou a la deconnection |
* - Connection : affichage de la boite de connexion |
* - Deconnexion : appel du service de deconnexion, et appel de la re-initialisation de l'affichage pour le nouvel identifiant utilisateur obtenu (identifiant de session) |
*/ |
package org.tela_botanica.client.observation; |
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HorizontalPanel; |
import com.google.gwt.user.client.ui.Widget; |
public class EtatConnexionVue extends Composite { |
private ObservationMediateur observationMediateur=null; |
private HTML signLabel = new HTML() ; |
private boolean connecte = false ; |
public EtatConnexionVue(final ObservationMediateur med) { |
observationMediateur=med; |
HorizontalPanel outer = new HorizontalPanel(); |
HorizontalPanel inner = new HorizontalPanel(); |
outer.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT); |
inner.add(signLabel); |
inner.setSpacing(3); |
outer.add(inner); |
initWidget(outer); |
signLabel.addClickListener( |
new ClickListener() { |
public void onClick(Widget sender) { |
// Non connecte ? Lien vers boite de connection |
if (!connecte) { |
observationMediateur.afficherDialogueConnexion(); |
} |
else { |
observationMediateur.deconnecterUtilisateur(); |
} |
} |
} |
); |
} |
public void setEtat(String text, boolean connecte) { |
signLabel.setHTML(text); |
this.connecte=connecte; |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.2 2008-04-28 13:10:44 ddelon |
* Integration MyGwt |
* |
* Revision 1.1 2008-01-02 21:26:04 ddelon |
* mise en place mygwt |
* |
* Revision 1.6 2007-12-22 14:48:53 ddelon |
* Documentation et refactorisation |
* |
* Revision 1.5 2007-09-17 19:25:34 ddelon |
* Documentation |
* |
* |
*/ |
/trunk/src/org/tela_botanica/client/observation/FormulaireDeConnexionVue.java |
---|
New file |
0,0 → 1,204 |
/** |
David Delon david.delon@clapas.net 2007 |
*/ |
/* |
* LoginDialog.java (DialogBox) |
* |
* Cas d'utilisation : |
* Dialogue de validation de l'identification utilisateur |
* |
* 1 : L'utilisateur saisit son identifiant (e-mail) et son mot de passe |
* 2 : Le dialogue controle aupres du systeme distant la validite des informations saisies |
* 3 : Le dialogue transmet au systeme local les informations d'identification |
* 3a : Le dialogue informe l'utilisateur que les elements d'identification ne sont pas valide : retour au point 1, ou passe au point 4. |
* 4 : Cloture du dialogue |
* 5 : Appel du dialogue d'importation |
*/ |
package org.tela_botanica.client.observation; |
// TODO : utiliser classe formulaire |
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.DialogBox; |
import com.google.gwt.user.client.ui.Grid; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.KeyboardListener; |
import com.google.gwt.user.client.ui.PasswordTextBox; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.VerticalPanel; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireDeConnexionVue extends DialogBox { |
private ObservationMediateur observationMediateur=null; |
private TextBox login = new TextBox(); |
private PasswordTextBox password = new PasswordTextBox(); |
private Grid inner = new Grid(4,2); |
public FormulaireDeConnexionVue(final ObservationMediateur carnetEnLigneMediateur) { |
setText("Connexion"); |
this.observationMediateur=carnetEnLigneMediateur; |
VerticalPanel outer = new VerticalPanel(); |
/* |
* E-Mail : Zone_saisie_email |
* Mot-de-passe : Zone_saisie_mot_de_passe |
* Message d'information |
* Bouton_Ok Bouton_Annuler |
*/ |
// Validation bouton |
HTML okButton=new HTML("Ok"); |
okButton.setStyleName("html_button"); |
okButton.addClickListener( |
new ClickListener() { |
public void onClick(Widget sender) { |
connecteUtilisateur(); |
} |
} |
); |
// Annulation |
HTML cancelButton=new HTML("Annuler"); |
cancelButton.setStyleName("html_button"); |
cancelButton.addClickListener( |
new ClickListener() { |
public void onClick(Widget sender) { |
hide(); |
} |
} |
); |
//Validation utilisateur sans utilisation des boutons : |
login.addKeyboardListener( new KeyboardListener() { |
public void onKeyDown(Widget arg0, char arg1, int arg2) { |
if(arg1 == KEY_ENTER) |
{ |
connecteUtilisateur(); |
} |
} |
public void onKeyUp(Widget arg0, char arg1, int arg2) { } |
public void onKeyPress(Widget arg0, char arg1, int arg2) { } |
} |
); |
// Validation utilisateur sans utilisation des boutons : |
password.addKeyboardListener( new KeyboardListener() { |
public void onKeyDown(Widget arg0, char arg1, int arg2) { |
if(arg1 == KEY_ENTER) |
{ |
connecteUtilisateur(); |
} |
} |
public void onKeyUp(Widget arg0, char arg1, int arg2) { } |
public void onKeyPress(Widget arg0, char arg1, int arg2) { } |
} |
); |
inner.setHTML(0,0,"E-mail:"); |
inner.setWidget(0,1,login); |
inner.setHTML(1,0,"Mot de passe: "); |
inner.setWidget(1,1,password); |
inner.setWidget(3,0,okButton); |
inner.setWidget(3,1,cancelButton); |
inner.setCellPadding(10); |
outer.add(inner); |
setWidget(outer); |
} |
/** |
* Appel du service d'identification et positionnement de l'etat de connection en fonction du resultat. |
* |
* @param login : identifiant saisi |
* @param password : mot de passe saisi |
* |
*/ |
private void connecteUtilisateur() { |
final String login=this.login.getText(); |
String password=this.password.getText(); |
observationMediateur.connecterUtilisateur(login,password); |
} |
public boolean onKeyDownPreview(char key, int modifiers) { |
// Use the popup's key preview hooks to close the dialog when either |
// escape is pressed. |
switch (key) { |
case KeyboardListener.KEY_ESCAPE: |
hide(); |
break; |
} |
return true; |
} |
public void afficherMessageAlerte() { |
inner.setHTML(2,0,"Identification incorrecte !"); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.10 2007-09-17 19:25:34 ddelon |
* Documentation |
* |
* Revision 1.9 2007-05-21 21:03:44 ddelon |
* nettoyage de code |
* |
* Revision 1.8 2007-05-21 18:14:06 ddelon |
* Gestion importation releve locaux |
* |
* Revision 1.7 2007-05-21 11:47:30 ddelon |
* meta cvs |
* |
* Revision 1.6 2007-05-21 11:39:48 ddelon |
* meta cvs |
* |
* Revision 1.5 2007-05-21 11:39:12 ddelon |
* meta cvs |
* |
* Revision 1.4 2007-05-21 11:37:35 ddelon |
* meta cvs |
* |
* Revision 1.3 2007-05-21 11:36:51 ddelon |
* meta cvs |
* |
*/ |
/trunk/src/org/tela_botanica/client/observation/ListeObservationsVue.java |
---|
183,7 → 183,7 |
// TODO : renderer date, alignement etc |
/* |
columns[0] = new TableColumn("etat","Transmis", 50); |
columns[0] = new TableColumn("etat","Aransmis", 50); |
columns[1] = new TableColumn("nom","Nom saisi", 250); |
323,7 → 323,7 |
setStatusDisabled(); |
// observationMediateur.addListener(ObservationMediateur.NOMBRE_OBSERVATION,this); |
// observationMediateur.getNombreObservation(identifiantLocalite,localite,annee, mois, jour ,lieudit,rechercheLibre); // Retour dans handlevent() NOMBRE_OBSERVATION |
observationMediateur.getNombreObservation(identifiantLocalite,localite,annee, mois, jour ,lieudit,rechercheLibre); // Retour dans handlevent() NOMBRE_OBSERVATION |
} |
338,14 → 338,14 |
public void getListeObservation() { |
// observationMediateur.addListener(ObservationMediateur.LISTE_OBSERVATION,this); |
// observationMediateur.getListeObservation(identifiantLocalite,localite,annee, mois, jour ,lieudit,rechercheLibre, startIndex, VISIBLE_TAXON_COUNT); // Retour dans handlevent() LISTE_OBSERVATION |
observationMediateur.getListeObservation(identifiantLocalite,localite,annee, mois, jour ,lieudit,rechercheLibre, startIndex, VISIBLE_TAXON_COUNT); // Retour dans handlevent() LISTE_OBSERVATION |
} |
public void afficherListeObservation() { |
// Observation[] listeObservation =observationMediateur.getObservation().getListeObservation(); |
/* |
Observation[] listeObservation =observationMediateur.getObservation().getListeObservation(); |
for (int i=0;i<listeObservation.length;i++) { |
Object[] values = new Object[6]; |
355,7 → 355,7 |
values[4]="4"; |
values[5]="5"; |
values[1]=listeObservation[i].getNomSaisi(); |
*/ |
// table.add(new TableItem(values)); |
} |
592,7 → 592,7 |
*/ |
// } |
} |
/** |
891,9 → 891,6 |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-06-17 14:16:16 aperonnet |
* *** empty log message *** |
* |
* Revision 1.2 2008-06-09 16:29:01 ddelon |
* import branche observation |
* |
/trunk/src/org/tela_botanica/client/observation/ObservationModele.java |
---|
1,137 → 1,37 |
package org.tela_botanica.client.observation; |
import org.tela_botanica.client.interfaces.iRetourObservation; |
import org.tela_botanica.client.modeles.ObservationAsynchroneDAO; |
import org.tela_botanica.client.interfaces.FournisseurListe; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Configuration; |
import org.tela_botanica.client.modeles.ListeObservationAsynchroneDAO; |
import org.tela_botanica.client.modeles.ListeReferentielCommuneAsynchroneDAO; |
import org.tela_botanica.client.modeles.NombreObservationAsynchroneDAO; |
import com.google.gwt.i18n.client.Dictionary; |
public class ObservationModele { |
public class ObservationModele { |
private final String baseURL; |
/** |
* Booleen indiquant si le médiateur est instancié (l'instance doit être unique donc le booleen est static) |
*/ |
private static boolean estInstancie = false ; |
/** |
* La configuration en cours |
*/ |
private Configuration config = null; |
/** |
* Le médiateur associé au modèle |
*/ |
private ObservationMediateur observationMediateur = null ; |
/** |
* Retourne une instance de manière unique |
* @param im le médiateur à associer |
* @return l'instance du modèle |
*/ |
static ObservationModele Instance(ObservationMediateur observationMediateur) |
{ |
// si le modèle n'est pas encore instancié |
if(!estInstancie) |
{ |
// on en crée un nouveau |
estInstancie = true ; |
return new ObservationModele(observationMediateur); |
} |
else |
{ |
// sinon on renvoit null, interdisant explicitement la création d'un autre exemplaire |
return null ; |
} |
} |
private ObservationModele(ObservationMediateur observationMediateur) { |
public ObservationModele() { |
this.observationMediateur=observationMediateur; |
baseURL=Dictionary.getDictionary("Parameters").get("serviceBaseUrl"); |
config = new Configuration(); |
} |
/** |
* Appelle le DAO asynchrone pour obtenir le nombre d'observation |
* @param r le rafraichissable auxquel on enverra les données |
* @param taillePage |
*/ |
public void obtenirNombreObservation(Rafraichissable r) { |
public void getNombreObservation(final iRetourObservation retour, String identifiant, String identifiantLocalite, String localite, String annee, String mois, String jour, String lieudit, String rechercheLibre) { |
new ObservationAsynchroneDAO().getNombreObservation(baseURL, retour, identifiant, identifiantLocalite, localite, annee, mois, jour, lieudit, rechercheLibre ); |
String motsClesFiltres[][] = observationMediateur.renvoyerFiltres() ; |
// on rassemble les critères |
String[][] criteres = {{motsClesFiltres[0][0], motsClesFiltres[0][1]} } ; |
// on les crée un DAO auquel on les transmet et qui demande le nombre d'images correspondantes (pour les pages) |
NombreObservationAsynchroneDAO noaDAO = new NombreObservationAsynchroneDAO(this) ; |
noaDAO.obtenirNombreObservation(r, observationMediateur.getIdentifiant(), criteres) ; |
} |
/** |
* Appelle le DAO asynchrone pour obtenir la liste des images |
* @param r le rafraichissable auxquel on enverra les données |
* @param taillePage |
*/ |
public void obtenirListeObservation(Rafraichissable r, int taillePage, int pageEncours) { |
String motsClesFiltres[][] = observationMediateur.renvoyerFiltres() ; |
// ensuite on demande la page correspondante avec les mêmes critères |
String[][] criteres2 = { {"limite" ,""+taillePage },{"numero_page",""+pageEncours}, {motsClesFiltres[0][0], motsClesFiltres[0][1]}} ; |
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images |
ListeObservationAsynchroneDAO loaDAO = new ListeObservationAsynchroneDAO(this); |
loaDAO.obtenirListeObservation(r, observationMediateur.getIdentifiant(), criteres2); |
} |
public FournisseurListe obtenirFournisseurReferentielCommune() { |
public void getListeObservation(iRetourObservation retour, String identifiant, String identifiantLocalite, String localite, String annee, String mois, String jour, String lieudit, String rechercheLibre, int debut, int longueur) { |
return new ListeReferentielCommuneAsynchroneDAO(this); |
new ObservationAsynchroneDAO().getListeObservation(baseURL, retour, identifiant, identifiantLocalite, localite, annee, mois, jour, lieudit, rechercheLibre, debut, longueur ); |
} |
/** |
* Accesseur pour la configuration en cours d'utilisation |
* |
* @return la configuration |
*/ |
public Configuration getConfig() { |
return config; |
} |
} |
/trunk/src/org/tela_botanica/client/observation/ObservationMediateur.java |
---|
1,473 → 1,256 |
package org.tela_botanica.client.observation; |
import java.util.Iterator; |
import org.tela_botanica.client.CarnetEnLigneMediateur; |
import org.tela_botanica.client.interfaces.FournisseurListe; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.ListeObservation; |
import org.tela_botanica.client.interfaces.iMediateur; |
import org.tela_botanica.client.interfaces.iRetourObservation; |
import org.tela_botanica.client.modeles.Observation; |
import org.tela_botanica.client.vues.FormulaireSaisieObservationVue; |
import org.tela_botanica.client.vues.ListeObservationVue; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.TabPanel; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.RootPanel; |
import com.google.gwt.user.client.ui.VerticalPanel; |
/** |
* Mediateur gérant les interactions entre vues et les echanges de données |
* C'est un singleton. |
* @author aurelien |
* |
*/ |
public class ObservationMediateur implements Rafraichissable { |
public class ObservationMediateur implements iMediateur{ |
// Evenenements |
final static public int NOMBRE_OBSERVATION=1; |
final static public int LISTE_OBSERVATION=2; |
/** |
* booleen qui verifie l'unicite de l'instance (donc static) |
*/ |
private static boolean estInstancie = false ; |
/** Mediateur general de l'application carnet en ligne |
* |
* |
*/ |
private CarnetEnLigneMediateur carnetEnLigneMediateur = null ; |
/** |
* modele de données |
*/ |
private ObservationModele observationModele = null ; |
/** |
* panneau principal des Observation (onglet "observation") |
*/ |
private final Panel panneauPrincipalObservation = new Panel("Observation"); |
/** |
* panneau a onglet pour la liste |
*/ |
private TabPanel ongletsObservation = null ; |
/** |
* conteneur du panneau a onglets |
*/ |
private Panel panneauMenuEtOngletsObservation = null ; |
/** |
* liste détaillée des Observations |
*/ |
private ListeObservationVue listeObservation = null ; |
/** |
* Saisie des Observations |
*/ |
private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null; |
/** |
* l'indice du dernier onglet sélectionné |
*/ |
private int dernierIndexOnglet = 0 ; |
/** |
* booleen explicitant s'il y a une selection en cours |
*/ |
private boolean selection = false ; |
private CarnetEnLigneMediateur carnetEnLigneMediateur=null; // Mediateur General |
private final ObservationModele observationModele=new ObservationModele(); |
/** |
* |
* Numéro de page en cours |
*/ |
private int pageEncours = 0 ; |
/** |
* Nombre de pages totales |
*/ |
private int pageMax = 1 ; |
/** |
* Taille de page (par défaut 20) |
*/ |
private int taillePage = 20 ; |
/** |
* Nombre d'éléments total correspondant à la requete |
*/ |
private int nbElements = 0 ; |
private Observation observation=null; |
// Variable interne |
private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica"; |
// Composants graphiques |
/** |
* Le store contenant les données à afficher, que le modèle transmet au médiateur quand il le demande |
*/ |
private Store st = null ; |
/** |
* La liste des observations affichées en cours (verifier utilité) |
*/ |
private ListeObservation cacheObservation = new ListeObservation(0) ; |
/** |
/** |
* constructeur privé (on accède a la classe par la méthode getInstance |
*/ |
private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur ) |
{ |
this.carnetEnLigneMediateur=carnetEnLigneMediateur; |
// Demande d'identification |
// afficherMenuId() ; |
private EtatConnexionVue etatConnexionVue=null; // Vue Etat de la connexion utilisateur |
private FormulaireDeConnexionVue formulaireDeConnexionVue=null; // Formulaire de connexion utilisateur |
private ListeObservationsVue listeObservationsVue = null; // Liste de releves |
// |
// on crée un modèle |
observationModele = ObservationModele.Instance(this); |
public ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur) { |
// on gère la mise en page du panneau principal |
//panneauPrincipalObservation.setLayout(new BorderLayout()); |
// on crée le panneau qui contient les differentes onglets ainsi que le menu supérieur |
// panneauMenuEtOngletsObservation = new Panel("gg") ; |
// panneauMenuEtOngletsObservation.setLayout(new BorderLayout()) ; |
// le panneau à onglet qui contient la vue |
//ongletsObservation = new TabPanel(); |
// la liste des observations |
//Panel panneauListeObservation = new Panel("Liste"); |
listeObservation = new ListeObservationVue(this); |
// Le formulaire de saisie / modification d'observation |
formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this); |
this.carnetEnLigneMediateur=carnetEnLigneMediateur; |
//panneauListeObservation.setLayout(new FitLayout()); |
//panneauListeObservation.setSize(600,600); |
//panneauListeObservation.add(listeObservation); |
etatConnexionVue=new EtatConnexionVue(this); |
listeObservationsVue=new ListeObservationsVue(this); |
VerticalPanel panel=new VerticalPanel(); |
// on ajoute les panneaux au panneau à onglets |
//ongletsObservation.add(panneauListeObservation); |
// les onglets au centre |
// panneauMenuEtOngletsObservation.add(ongletsObservation,regionCentre); |
// on ajoute le panneau qui contient le menu et les onglets d'images au centre |
//panneauPrincipalObservation.add(panneauMenuEtOngletsObservation,regionCentre); |
panneauPrincipalObservation.add(formulaireSaisieObservationVue); |
panel.add(etatConnexionVue); |
panneauPrincipalObservation.add(listeObservation); |
panel.add(listeObservationsVue); |
RootPanel.get().add(panel); |
onInitialisation(); |
} |
/// Methodes privees |
/** |
* Retourne une instance de manière unique |
* @return l'instance unique du médiateur |
* |
* Initialisations |
* |
*/ |
public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur) |
{ |
if(!estInstancie) |
{ |
estInstancie = true ; |
return new ObservationMediateur(carnetEnLigneMediateur) ; |
} |
else |
{ |
return null ; |
} |
} |
private void onInitialisation() { |
/** |
* envoie au modèle une demande de mise a jour |
*/ |
public void obtenirNombreObservation() { |
afficheEtatConnexion(); |
onFiltrageListeObservation("all","all","all"); |
listeObservation.masquerChargement(); |
observationModele.obtenirNombreObservation(this) ; |
} |
// Filtre selection lieu |
/** |
* envoie au modèle une demande de mise a jour |
* Action sur selection d'un lieu : affichage de la liste des taxons correspondants au filtrage |
*/ |
public void onFiltrageListeObservation(String id_loc, String loc,String lieu) { |
// Positionnement Filtre affichage |
listeObservationsVue.setIdLocation(id_loc); |
listeObservationsVue.setLocalite(loc); |
listeObservationsVue.setLieudit(lieu); |
listeObservationsVue.initialiser(); |
public void obtenirListeObservation() { |
// Affichage des filtres |
listeObservationsVue.displayFilter(); |
observationModele.obtenirListeObservation(this, taillePage, pageEncours) ; |
} |
/// UTILISATEUR |
/** |
* C'est dans cette fonction que doivent être renvoyé les valeurs des filtres |
* sous forme de tableau [nom, valeur] |
* @return Les noms et valeurs des filtres |
* Affichage etat de la connexion |
*/ |
public String[][] renvoyerFiltres() |
{ |
String[][] valeursFiltres = { {"location","Saint-Martin-de-Londres"} } ; |
return valeursFiltres ; |
} |
public String getIdentifiant() { |
return carnetEnLigneMediateur.getUtilisateur().getIdentifiant(); |
} |
public Panel getPanneauPrincipalObservation() { |
return panneauPrincipalObservation; |
} |
// TODO : plutot dans la listevu non ? |
public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) { |
private void afficheEtatConnexion() { |
if (!carnetEnLigneMediateur.getUtilisateur().isIdentifie()) { |
etatConnexionVue.setEtat(texteDeconnexion,false); |
} |
else { |
etatConnexionVue.setEtat(carnetEnLigneMediateur.getUtilisateur().getIdentifiant()+ " (deconnexion)",true); |
} |
// si l'on a reçu une liste d'observation |
if(nouvelleDonnees instanceof ListeObservation) |
{ |
ListeObservation data = (ListeObservation) nouvelleDonnees ; |
Object[][] observationData = new Object[data.size()][8]; |
int i = 0 ; |
if(data.size() == 0) |
{ |
pageEncours = 0 ; |
} |
// on la parse et on récupère les informations quiç nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
Observation obs=(Observation) data.get(it.next()); |
observationData[i][0]= obs.getTransmis(); |
observationData[i][1]= obs.getNomSaisi(); |
observationData[i][2]= obs.getNomRetenu(); |
observationData[i][3]= obs.getLieudit(); |
observationData[i][4]= obs.getDate(); |
observationData[i][5]= obs.getNumeroOrdre(); |
} |
i++ ; |
} |
// creation du store qui les contient |
FieldDef defEtatObservation = new StringFieldDef("etat_observation"); |
FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation"); |
FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation"); |
FieldDef defLieuObservation = new StringFieldDef("lieu_observation"); |
FieldDef defDateObservation = new StringFieldDef("date_observation"); |
FieldDef defOrdreObservation = new StringFieldDef("ordre_observation"); |
// on associe le store |
FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation, |
defLieuObservation, defDateObservation, defOrdreObservation }; |
RecordDef rd = new RecordDef(defTab); |
final MemoryProxy dataProxy = new MemoryProxy(observationData); |
final ArrayReader reader = new ArrayReader(rd); |
final Store observationStore = new Store(dataProxy, reader); |
st = observationStore ; |
st.load() ; |
// par défaut le store est trié sur l'ordre d'observations |
st.sort("ordre_observation") ; |
// si on doit répandre les données, on notifie le médiateur qui les distribuera à son tour |
if(repandreRafraichissement) |
{ |
listeObservation.rafraichir(st, false) ; |
} |
} |
// Si on reçoit un tableau d'entiers |
// c'est un tableau d'un seul entier qui est le nombre d'observation correspondant aux critères |
if(nouvelleDonnees instanceof int[]) |
{ |
int[] pages = (int[])nouvelleDonnees ; |
// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle |
pageMax = calculerNbPages(pages[0]) ; |
nbElements = pages[0] ; |
// et on notifie de le mediateur du changement des valeurs |
changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ; |
obtenirListeObservation(); |
} |
} |
/** |
* Met à jour les barre d'outils avec des nouvelles valeurs |
* @param pageMax le nombre de pages |
* @param pageEncours la page en cours |
* @param taillePage la taille de page |
* @param nbElement le nombre d'élements par page |
* |
* Affichage boite de connexion |
* |
*/ |
public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement) |
{ |
int[] pages = {pageMax,pageEncours, taillePage, nbElement} ; |
listeObservation.getToolBarVue().rafraichir(pages, false) ; |
} |
/** |
* Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page |
* en cours |
* @param nbElements le nombre d'élements total |
* @return le nombre de pages |
*/ |
public int calculerNbPages(int nbElements) |
{ |
// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement |
// pour eviter qu'il arrondisse mal la division |
// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur |
public void afficherDialogueConnexion() { |
double nPage = (1.0*nbElements)/(1.0*taillePage) ; |
double nPageRound = Math.ceil(nPage) ; |
Double nPageInt = new Double(nPageRound) ; |
// TODO : singleton ? |
formulaireDeConnexionVue = new FormulaireDeConnexionVue(this); |
// Position it roughly in the middle of the screen. |
int left = (Window.getClientWidth() - 512) / 2; |
int top = (Window.getClientHeight() - 256) / 2; |
formulaireDeConnexionVue.setPopupPosition(left, top); |
formulaireDeConnexionVue.show(); |
// on convertit en entier |
return nPageInt.intValue() ; |
} |
/** |
* Recalcule la page en cours lors du changement du nombre d'élements |
* @param nbElements le nombre d'élements total |
* @return la nouvelle page encours |
* Deconnexion de l'utilisateur en cours |
*/ |
public int calculerPageCourante(int nbElements) |
{ |
// on calcule le nombre de page |
int nouvelNbPages = calculerNbPages(nbElements) ; |
// la nouvelle page en cours |
double nPageCourante = (1.0*pageEncours)/(1.0*pageMax) * (1.0*nouvelNbPages) ; |
public void deconnecterUtilisateur() { |
// on arrondit au supérieur |
double nPageRound = Math.ceil(nPageCourante) ; |
Double nPageInt = new Double(nPageRound) ; |
// on convertit en entier |
return Math.abs(nPageInt.intValue()) ; |
// carnetEnLigneMediateur.addListener(CarnetEnLigneMediateur.DECONNEXION,this); |
carnetEnLigneMediateur.deconnecterUtilisateur(); |
} |
/** |
* Appelle le modèle pour lui demander les données d'une page à afficher |
* @param pageCourante le numéro de page à affciher |
* Tentative de connexion utilisateur |
* @param login |
* @param password |
*/ |
public void changerNumeroPage(int pageCourante) { |
public void connecterUtilisateur(String login, String password) { |
pageEncours = pageCourante ; |
// On lance le chargerment des observations |
obtenirNombreObservation(); |
listeObservation.getToolBarVue().changerPageCourante(pageCourante); |
// carnetEnLigneMediateur.addListener(CarnetEnLigneMediateur.CONNEXION,this); |
carnetEnLigneMediateur.connecterUtilisateur(login, password); |
} |
/// OBSERVATION |
/** |
* Appelle le modèle pour qu'il change la taille de page utilisée |
* @param nouvelleTaillePage la nouvelle taille de page |
* Recherche nombre d'enregistrement pour l'utilisateur et la localite en cours |
* |
*/ |
public void changerTaillePage(int nouvelleTaillePage) |
{ |
taillePage = nouvelleTaillePage ; |
pageEncours = calculerPageCourante(nbElements) ; |
public void getNombreObservation (String identifiantLocalite, String localite, String annee, String mois, String jour, String lieudit, String rechercheLibre ) { |
// On lance le chargerment des observations |
obtenirNombreObservation(); |
observationModele.getNombreObservation( |
new iRetourObservation() { |
public void onRetour(Observation obs) { |
observation=obs; |
//fireEvent(NOMBRE_OBSERVATION); |
} |
}, carnetEnLigneMediateur.getUtilisateur().getIdentifiant(), identifiantLocalite, localite , annee, mois, jour, lieudit ,rechercheLibre |
); |
// et on met à jour la taille de page dans les barres d'outils |
listeObservation.getToolBarVue().selectionnerTaillePage(nouvelleTaillePage); |
} |
public void getListeObservation (String identifiantLocalite, String localite, String annee, String mois, String jour, String lieudit, String rechercheLibre, int debut, int longueur) { |
// Retourne le fournisseur de donnee en referentiel Commune. doit posseder la methode obtenirListeDonnees() |
public FournisseurListe obtenirFournisseurReferentielCommune() { |
return observationModele.obtenirFournisseurReferentielCommune() ; |
observationModele.getListeObservation( |
new iRetourObservation() { |
public void onRetour(Observation obs) { |
observation=obs; |
//fireEvent(LISTE_OBSERVATION); |
} |
}, carnetEnLigneMediateur.getUtilisateur().getIdentifiant(), identifiantLocalite, localite , annee, mois, jour, lieudit ,rechercheLibre, debut, longueur |
); |
} |
public Observation getObservation() { |
return observation; |
} |
/// EVENEMENTS |
/** |
* Evenements |
* |
*/ |
/* |
public void handleEvent(BaseEvent be) { |
switch (be.type) { |
case CarnetEnLigneMediateur.DECONNEXION: |
afficheEtatConnexion(); |
break; |
case CarnetEnLigneMediateur.CONNEXION: |
if (carnetEnLigneMediateur.getUtilisateur().isIdentifie()) { |
formulaireDeConnexionVue.hide(); |
afficheEtatConnexion(); |
} |
else { |
formulaireDeConnexionVue.afficherMessageAlerte(); // Erreur identification |
} |
break; |
} |
} |
*/ |
} |
/trunk/src/org/tela_botanica/public/config.js |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/src/org/tela_botanica/public/cel2.html |
---|
1,3 → 1,16 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
"http://www.w3.org/TR/html4/loose.dtd"> |
<!-- The HTML 4.01 Transitional DOCTYPE declaration--> |
<!-- above set at the top of the file will set --> |
<!-- the browser's rendering engine into --> |
<!-- "Standards Mode", which gives better cross --> |
<!-- browser compatibility to the application. --> |
<!-- Omitting this line leaves most browsers in --> |
<!-- "Quirks mode", emulating the bugs in older --> |
<!-- browser versions. --> |
<html> |
<head> |
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
11,11 → 24,7 |
<!-- If you add any GWT meta tags, they must --> |
<!-- be added before this line. --> |
<!-- --> |
<script type="text/javascript" language="javascript" src="config.js"></script> |
<script type="text/javascript" language="javascript" src="org.tela_botanica.cel2.nocache.js"></script> |
</head> |
<!-- --> |
/trunk/src/org/tela_botanica/cel2.gwt.xml |
---|
2,15 → 2,14 |
<!-- Inherit the core Web Toolkit stuff. --> |
<inherits name='com.google.gwt.user.User'/> |
<!-- Other module inherits --> |
<!-- Inherit the core Web Toolkit stuff. --> |
<inherits name='com.gwtext.GwtExt' /> |
<!-- Parsing JSON --> |
<inherits name='com.google.gwt.json.JSON' /> |
<!-- Encore des trucs pour les user extensions --> |
<inherits name='com.gwtextux.GwtExtUx'/> |
<!-- Passage de parametres --> |
<inherits name="com.google.gwt.i18n.I18N"/> |
<inherits name='com.gwtext.GwtExt' /> |
<!-- Parsing JSON --> |
<inherits name='com.google.gwt.json.JSON' /> |
<!-- Encore des trucs pour les user extensions --> |
<inherits name='com.gwtextux.GwtExtUx'/> |
<stylesheet src="js/ext/resources/css/ext-all.css" /> |