Rev 82 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.observation;import java.io.Console;// TODO : systematiser les onQuelquechose, appelle depuis les vuesimport 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.Ext;import com.gwtext.client.core.ExtElement;import com.gwtext.client.core.RegionPosition;import com.gwtext.client.widgets.Component;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.event.ContainerListener;import com.gwtext.client.widgets.event.ContainerListenerAdapter;import com.gwtext.client.widgets.layout.BorderLayout;import com.gwtext.client.widgets.layout.BorderLayoutData;import com.gwtext.client.widgets.layout.RowLayout;import com.gwtext.client.widgets.layout.RowLayoutData;/*** 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;/*** 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.setHeight(panneauPrincipalObservation.getHeight()) ;centre.add(formulaireSaisieObservationVue, new RowLayoutData("30%")) ;centre.add(listeObservation, new RowLayoutData("70%"));// 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 ;}// ACTIONS a entreprendre lors d'un evenement particulier/*** Lors du raffraichissement de la liste d'observation*/public void onRafraichissementListeObservations() {cacheObservation = listeObservation.getCacheListeObservation() ;if(cacheObservation.size() == 0){formulaireSaisieObservationVue.viderChampsObservation() ;}carnetEnLigneMediateur.donneesRafraichies(cacheObservation) ;}/**** 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 onClicListeObservation(int rowIndex, String ordreObservation) {Observation obs = cacheObservation.get(ordreObservation) ;masquerChargementInfosObservations() ;// 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) ;}// ACCES au Modèle// C du CRUD/*** 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) ;}// R du CRUD/*** 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) ;}public void obtenirListeObservation() {obtenirListeObservation(listeObservation);}/*** Demande au modele le detail des Observations à afficher* TODO : grouper cette demande avec la demande d'affichage de liste ?*/public void obtenirListeObservation(Rafraichissable r) {listeObservation.masquerChargement() ;formulaireSaisieObservationVue.viderChampsObservation() ;observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;}public void obtenirCacheObservation(Rafraichissable r) {r.rafraichir(cacheObservation, false) ;}/*** 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());}// U du CRUDpublic void modifierObservation(Observation obs) {// On raffraichi la liste d'observationobservationModele.modifierObservation(listeObservation, obs) ;}// D du CRUD/*** TODO : afficher un message du type "observation modifie".* Lance la modification d'une observation* @param obs : l'observation a modifier*/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) ;}}}// Assistants de saisie/**** 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) ;}// Etat du syteme/*** 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(){if(filtres.getarbreEntiteGeographiqueObservationFiltreVue() != null){String[][] valeursFiltres = { filtres.getarbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() } ;//Window.alert(valeursFiltres[0][0]+" "+valeursFiltres[0][1]) ;return valeursFiltres ;}else{//Window.alert("le filtre est nul") ;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;}public void montrerContextMenu(EventObject e) {}public void doubleClicListeObservation(int rowIndex) {}// Getterspublic PanneauFiltresObservationVues getPanneauFiltres() {return filtres;}public void masquerChargementInfosObservations(){ExtElement masked = Ext.get(details.getId());if (masked != null && !masked.isMasked()) {informationRepartitionVue.raz() ;imageGeneriqueVue.raz() ;masked.mask("Chargement", true);}}public void deMasquerChargementInfosObservations(){ExtElement masked = Ext.get(details.getId());if (masked != null && masked.isMasked()) {masked.unmask() ;}}}