Rev 74 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.observation;import org.tela_botanica.client.CarnetEnLigneMediateur;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.ListeObservation;import org.tela_botanica.client.modeles.Observation;import org.tela_botanica.client.vues.ArbreEntiteGeographiqueObservationFiltreVue;import org.tela_botanica.client.vues.FormulaireSaisieObservationVue;import org.tela_botanica.client.vues.ImageGeneriqueVue;import org.tela_botanica.client.vues.InformationRepartitionVue;import org.tela_botanica.client.vues.ListeObservationVue;import org.tela_botanica.client.vues.PanneauFiltresObservationVues;import com.google.gwt.core.client.GWT;import com.google.gwt.user.client.Window;import com.gwtext.client.core.EventObject;import com.gwtext.client.core.RegionPosition;import com.gwtext.client.data.Record;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.layout.BorderLayout;import com.gwtext.client.widgets.layout.BorderLayoutData;import com.gwtext.client.widgets.layout.RowLayout;/*** Mediateur gérant les interactions entre vues et les echanges de données* C'est un singleton.* @author aurelien**/public class ObservationMediateur {/*** booleen qui verifie l'unicite de l'instance (donc static)*/private static boolean estInstancie = false ;/*** pointeur sur le médiateur (pour le pattern singleton)*/private static ObservationMediateur thisMediateur = null ;/** 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");/*** liste détaillée des Observations*/private ListeObservationVue listeObservation = null ;/*** Saisie des Observations*/private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;/*** booleen explicitant s'il y a une selection en cours*/private boolean selection = false ;/*** La liste des observations affichées en cours (verifier utilité)*/private ListeObservation cacheObservation = new ListeObservation(0) ;/**/*** panneau conteneur pour le panneau des informations lies à l'observation*/private Panel details = new Panel("Détails");/*** panneau conteneur pour le panneau des filtres*/private PanneauFiltresObservationVues filtres = null;/*** panneau d'information de repartition sur le nom selectionné**/private InformationRepartitionVue informationRepartitionVue=null;/*** panneau d'affichage d'une image generique associe au nom selectionne**/private ImageGeneriqueVue imageGeneriqueVue=null;private ArbreEntiteGeographiqueObservationFiltreVue arbreEntiteGeographiqueObservationFiltreVue=null;/*** constructeur privé (on accède a la classe par la méthode getInstance*/private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur ){this.carnetEnLigneMediateur=carnetEnLigneMediateur;// on crée un modèleobservationModele = ObservationModele.Instance(this);listeObservation = new ListeObservationVue(this);listeObservation.setTitle("Observations");// quelques variables de position pour les borderlayoutsfinal BorderLayoutData regionNord = new BorderLayoutData(RegionPosition.NORTH);final BorderLayoutData regionCentre = new BorderLayoutData(RegionPosition.CENTER);final BorderLayoutData regionEst = new BorderLayoutData(RegionPosition.EAST);if (GWT.isScript()) { // FIXME : ne fonctionne pas en mode hostedregionEst.setSplit(true);}final BorderLayoutData regionOuest = new BorderLayoutData(RegionPosition.WEST);if (GWT.isScript()) { // FIXME : ne fonctionne pas en mode hostedregionOuest.setSplit(true);}panneauPrincipalObservation.setLayout(new BorderLayout()) ;// Le formulaire de saisie / modification d'observationformulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);formulaireSaisieObservationVue.setTitle("Saisie");formulaireSaisieObservationVue.setTitleCollapse(true);formulaireSaisieObservationVue.setCollapsible(true) ;Panel centre = new Panel();centre.setLayout(new RowLayout()) ;centre.add(formulaireSaisieObservationVue) ;centre.add(listeObservation);formulaireSaisieObservationVue.setHeight("30%") ;listeObservation.setHeight("82%") ;// on initialise le volet qui contient les detailsdetails.setWidth("15%");details.setTitleCollapse(true);details.setCollapsible(true);details.setLayout(new RowLayout());// Information de repartitioninformationRepartitionVue=new InformationRepartitionVue(this);// TODO : calcul de la hauteur automatique par le panel ?informationRepartitionVue.setHeight(160);details.add(informationRepartitionVue);// Image generiqueimageGeneriqueVue=new ImageGeneriqueVue(this);// TODO : calcul de la hauteur automatique par le panel ?imageGeneriqueVue.setHeight(160);details.add(imageGeneriqueVue);// on crée le panneau des filtresfiltres = new PanneauFiltresObservationVues(this);// on initialise le volet qui contient les filtresfiltres.setWidth("15%");filtres.setTitleCollapse(true);filtres.setCollapsible(true);panneauPrincipalObservation.add(details,regionEst);panneauPrincipalObservation.add(filtres,regionOuest);panneauPrincipalObservation.add(centre,regionCentre);}/*** Retourne une instance de manière unique* @return l'instance unique du médiateur*/public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur){if(!estInstancie || thisMediateur == null){estInstancie = true ;thisMediateur = new ObservationMediateur(carnetEnLigneMediateur) ;}return thisMediateur ;}/*** Demande au modele le nombre d'Observation à afficher* TODO : grouper cette demande avec la demande d'affichage de liste ?*/public void obtenirNombreObservation() {observationModele.obtenirNombreObservation(listeObservation) ;}/*** Demande au modele le detail dess Observations à afficher* TODO : grouper cette demande avec la demande d'affichage de liste ?* @param r : la vue demandeuse de donnee*/public void obtenirListeObservation() {listeObservation.masquerChargement() ;formulaireSaisieObservationVue.viderChampsObservation() ;observationModele.obtenirListeObservation(listeObservation,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;}public void obtenirListeObservation(Rafraichissable r) {listeObservation.masquerChargement() ;formulaireSaisieObservationVue.viderChampsObservation() ;observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;}/*** 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*/public String[][] renvoyerFiltres(){String[][] valeursFiltres = { {"",""} } ;return valeursFiltres ;}/*** Retourne l'identifiant de l'utilisateur connecte* @return : identifiant de l'utilisateur connecte*/public String getIdentifiant() {return carnetEnLigneMediateur.getUtilisateur().getIdentifiant();}/**** @return**/public Panel getPanneauPrincipalObservation() {return panneauPrincipalObservation;}/**** Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne* @param r : la vue demandeuse de donnee* @param critere : les criteres de selection*/public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {observationModele.obtenirListeReferentielCommune(r,critere) ;}/**** Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne* @param r : la vue demandeuse de donnee* @param critere : les criteres de selection*/public void obtenirListeReferentielNom(Rafraichissable r, String critere) {observationModele.obtenirListeReferentielNom(r,critere) ;}/*** TODO : afficher un message du type "observation ajouté".* Lance la creation d'une observation* @param obs : l'observation saisie*/public void ajouterObservation(Observation obs) {// On raffraichi la liste d'observationobservationModele.ajouterObservation(listeObservation, obs) ;}/*** TODO : afficher un message du type "observation modifie".* Lance la modification d'une observation* @param obs : l'observation a modifier*/public void modifierObservation(Observation obs, String numeroOrdre) {// On raffraichi la liste d'observationobservationModele.modifierObservation(listeObservation, obs, numeroOrdre) ;}public void supprimerObservation(Rafraichissable r, String numeroOrdre) {if(listeObservation.getSelectionModel().getCount() > 0){if(Window.confirm("Êtes vous sur de vouloir supprimer cette observation ?")) {observationModele.supprimerObservation(r,numeroOrdre) ;}}}/**** TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation* est appelé lors d'un clic de souris sur un enregistrement de la liste le* médiateur gère alors les conséquences** @param rowIndex* le numéro de ligne selectionné*/public void clicListeObservation(int rowIndex, String ordreObservation) {Observation obs = cacheObservation.get(ordreObservation) ;// Affichage de la carte de repartition correspondanteString numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalSaisi() ;observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;// affichage des détails dans le formulaire d'observationformulaireSaisieObservationVue.rafraichir(obs, false) ;// Affichage de l'image correspondanteobservationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;}public void montrerContextMenu(EventObject e) {}public void doubleClicListeObservation(int rowIndex) {}public PanneauFiltresObservationVues getPanneauFiltres() {return filtres;}/*** Envoie au modèle une demande pour obtenir l'arbre des localites** @param r* le raffraichissable qui a demandé la mise à jour*/public void obtenirListeEntiteGeographique() {observationModele.obtenirListeEntiteGeographique(filtres.getarbreEntiteGeographiqueObservationFiltreVue());}public void donneesRafraichies(Object nouvelleDonnees) {carnetEnLigneMediateur.donneesRafraichies(nouvelleDonnees) ;}public void rafraichirCacheObservation(Object nouvelleDonnees) {if(nouvelleDonnees instanceof ListeObservation) {cacheObservation = (ListeObservation)nouvelleDonnees ;if(cacheObservation.size() == 0){formulaireSaisieObservationVue.viderChampsObservation() ;}donneesRafraichies(nouvelleDonnees) ;}}}