New file |
0,0 → 1,1239 |
package org.tela_botanica.client.observation; |
|
|
|
// TODO : systematiser les onQuelquechose, appelle depuis les vues |
|
|
import org.tela_botanica.client.CarnetEnLigneMediateur; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation; |
import org.tela_botanica.client.modeles.ListeObservation; |
import org.tela_botanica.client.modeles.Observation; |
import org.tela_botanica.client.vues.observation.CartographieObservationVue; |
import org.tela_botanica.client.vues.observation.FormulaireImportObservationVue; |
import org.tela_botanica.client.vues.observation.FormulaireSaisieObservationVue; |
import org.tela_botanica.client.vues.observation.ListeObservationVue; |
import org.tela_botanica.client.vues.observation.MenuObservationVue; |
import org.tela_botanica.client.vues.observation.PanneauFiltresObservationVues; |
import org.tela_botanica.client.vues.observation.indicateurs.ImageGeneriqueVue; |
import org.tela_botanica.client.vues.observation.indicateurs.InformationRepartitionVue; |
import org.tela_botanica.client.vues.observation.indicateurs.LienExterneVue; |
import org.tela_botanica.client.vues.observation.indicateurs.MiniZoomImageVue; |
import org.tela_botanica.client.vues.observation.indicateurs.NuageMotsClesVue; |
|
import com.google.gwt.core.client.GWT; |
import com.google.gwt.core.client.JavaScriptObject; |
import com.google.gwt.dev.util.Util; |
import com.google.gwt.dom.client.Node; |
import com.google.gwt.http.client.Request; |
import com.google.gwt.http.client.RequestBuilder; |
import com.google.gwt.http.client.RequestCallback; |
import com.google.gwt.http.client.RequestException; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.http.client.URL; |
import com.google.gwt.maps.client.geom.LatLng; |
import com.google.gwt.user.client.Element; |
import com.google.gwt.user.client.History; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.server.Base64Utils; |
import com.gwtext.client.core.DomConfig; |
import com.gwtext.client.core.DomHelper; |
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.data.Record; |
import com.gwtext.client.data.Tree; |
import com.gwtext.client.dd.DragData; |
import com.gwtext.client.widgets.BoxComponent; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.Container; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.TabPanel; |
import com.gwtext.client.widgets.event.ContainerListenerAdapter; |
import com.gwtext.client.widgets.event.PanelListenerAdapter; |
import com.gwtext.client.widgets.event.TabPanelListenerAdapter; |
import com.gwtext.client.widgets.grid.GridDragData; |
import com.gwtext.client.widgets.layout.BorderLayout; |
import com.gwtext.client.widgets.layout.BorderLayoutData; |
import com.gwtext.client.widgets.layout.FitLayout; |
import com.gwtext.client.widgets.layout.RowLayout; |
import com.gwtext.client.widgets.layout.RowLayoutData; |
import com.gwtext.client.widgets.tree.TreeNode; |
|
|
/** |
* 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("Observations"); |
|
|
/** |
* liste détaillée des Observations |
*/ |
public ListeObservationVue listeObservation = null ; |
|
/** |
* Saisie des Observations |
*/ |
|
private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null; |
|
/** |
* Cartographie |
*/ |
private CartographieObservationVue cartoObservationVue = null; |
|
|
|
/** |
* booleen explicitant s'il y a une selection en cours |
*/ |
private boolean selection = false ; |
/** |
* panneau conteneur pour le panneau des informations lies à l'observation |
*/ |
|
private Panel details = new Panel("Details"); |
|
private LienExterneVue liExtVue = null; |
|
/** |
* 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 MiniZoomImageVue mvz = null ; |
|
private NuageMotsClesVue nuaMC = null; |
|
private Panel conteneurFormulaire = null ; |
|
private boolean importerObservations = false ; |
|
private TabPanel ongletsSaisieCarto; |
|
private Panel centre; |
|
/** |
* 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èle |
observationModele = ObservationModele.Instance(this); |
|
|
listeObservation = new ListeObservationVue(this); |
listeObservation.setTitle("Observations"); |
|
// quelques variables de position pour les borderlayouts |
final BorderLayoutData regionNord = new BorderLayoutData( |
RegionPosition.NORTH); |
|
final BorderLayoutData regionCentre = new BorderLayoutData( |
RegionPosition.CENTER); |
regionCentre.setSplit(true); |
|
|
final BorderLayoutData regionEst = new BorderLayoutData( |
RegionPosition.EAST); |
regionEst.setSplit(true); |
|
|
final BorderLayoutData regionOuest = new BorderLayoutData( |
RegionPosition.WEST); |
regionOuest.setSplit(true); |
|
|
panneauPrincipalObservation.setLayout(new BorderLayout()) ; |
|
// on ajoute un panneau supplémentaire pour contenir le formulaire, pour éviter un bug de taille |
// des panneaux |
conteneurFormulaire = new Panel(); |
cartoObservationVue = new CartographieObservationVue(this); |
cartoObservationVue.setLayout(new FitLayout()); |
|
// Le formulaire de saisie / modification d'observation |
formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this); |
formulaireSaisieObservationVue.setHeader(false); |
conteneurFormulaire.setTitle("Saisie"); |
conteneurFormulaire.setTitleCollapse(true); |
conteneurFormulaire.setCollapsible(true) ; |
conteneurFormulaire.setAutoScroll(true) ; |
// Redimensionnement global sur collapse/expand |
|
|
ongletsSaisieCarto = new TabPanel(); |
|
conteneurFormulaire.addListener( |
new PanelListenerAdapter() { |
public void onCollapse(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
public void onExpand(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
}); |
|
ongletsSaisieCarto.addListener(new TabPanelListenerAdapter() { |
|
public void onActivate(Panel panel) { |
|
if (panel.equals(conteneurFormulaire)) { |
if (!cartoObservationVue.isCarteAjoutee()) { |
|
if(formulaireSaisieObservationVue.communeInitialisee()) { |
String nomCommune = formulaireSaisieObservationVue.getCommune(); |
String codePostal = formulaireSaisieObservationVue.getDepartement(); |
obtenirInformationCommune(nomCommune, codePostal); |
} |
cartoObservationVue.initialiserCarte(formulaireSaisieObservationVue.communeInitialisee()); |
} |
} else { |
cartoObservationVue.recentrerCarte(); |
} |
} |
|
public boolean doBeforeTabChange(TabPanel source, Panel newPanel, |
Panel oldPanel) { |
if (newPanel.equals(cartoObservationVue)) { |
if (!cartoObservationVue.isCarteAjoutee()) { |
cartoObservationVue.initialiserCarte(formulaireSaisieObservationVue.communeInitialisee()); |
} |
listeObservation.collapse(false); |
} else { |
listeObservation.expand(false); |
} |
return true; |
} |
}); |
|
centre = new Panel(); |
centre.setLayout(new BorderLayout()); |
centre.setAutoScroll(true); |
centre.setBorder(false); |
|
centre.addListener( |
new PanelListenerAdapter() { |
public void onCollapse(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
public void onExpand(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
|
public void onResize(BoxComponent component, int adjWidth, |
int adjHeight, int rawWidth, int rawHeight) { |
ongletsSaisieCarto.doLayout(); |
listeObservation.doLayout(); |
} |
|
public void onAfterLayout(Container self) { |
|
} |
}); |
|
formulaireSaisieObservationVue.setBorder(false); |
conteneurFormulaire.add(formulaireSaisieObservationVue); |
|
ongletsSaisieCarto.add(conteneurFormulaire); |
ongletsSaisieCarto.add(cartoObservationVue); |
|
BorderLayoutData listeLayoutData = new BorderLayoutData(RegionPosition.SOUTH); |
listeLayoutData.setSplit(true); |
|
BorderLayoutData formLayoutData = new BorderLayoutData(RegionPosition.CENTER); |
listeLayoutData.setSplit(true); |
|
centre.add(listeObservation, listeLayoutData); |
centre.add(ongletsSaisieCarto, formLayoutData); |
|
// Redimensionnement global sur collapse/expand |
details.addListener( |
new PanelListenerAdapter() { |
public void onCollapse(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
public void onExpand(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
}); |
|
// on initialise le volet qui contient les details |
details.setWidth("10%"); |
details.setTitleCollapse(true); |
details.setCollapsible(true); |
|
details.setAutoScroll(true); |
details.setLayout(new RowLayout()); |
|
// Lien vers eflore |
liExtVue = new LienExterneVue(this); |
liExtVue.setHeight("20px"); |
details.add(liExtVue); |
|
// Information de repartition |
informationRepartitionVue=new InformationRepartitionVue(this); |
details.add(informationRepartitionVue, new RowLayoutData("30%")); |
|
// Image generique |
imageGeneriqueVue=new ImageGeneriqueVue(this); |
details.add(imageGeneriqueVue, new RowLayoutData("30%")); |
|
mvz = new MiniZoomImageVue(this) ; |
|
details.add(mvz, new RowLayoutData("34%")) ; |
|
// on crée le panneau des filtres |
filtres = new PanneauFiltresObservationVues(this); |
|
// on initialise le volet qui contient les filtres |
filtres.setWidth("10%"); |
filtres.setTitleCollapse(true); |
filtres.setCollapsible(true); |
|
|
filtres.addListener( |
new PanelListenerAdapter() { |
public void onCollapse(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
public void onExpand(Panel panel) { |
CarnetEnLigneMediateur.fireResize(); |
} |
}); |
|
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 ; |
} |
|
|
public void connecterUtilisateur() { |
|
if(importerObservations) { |
|
observationModele.importerObservations(); |
} |
|
if(panneauPrincipalObservation == null || !panneauPrincipalObservation.isCreated()) |
{ |
panneauPrincipalObservation.addListener(new ContainerListenerAdapter() |
{ |
public void onRender(Component c) |
{ |
panneauPrincipalObservation.purgeListeners() ; |
initialiserArbres(); |
filtres.getRechercheLibreVue().raz(); |
obtenirNombreObservation(); |
analyserHistorique(); |
} |
}) ; |
} |
else |
{ |
initialiserArbres(); |
filtres.getRechercheLibreVue().raz(); |
obtenirNombreObservation(); |
analyserHistorique(); |
} |
} |
|
private void initialiserArbres() { |
getPanneauFiltres().getArbreDateObservationFiltreVue().initialiser(); |
getPanneauFiltres().getArbreEntiteGeographiqueObservationFiltreVue().initialiser(); |
getPanneauFiltres().getArbreMotsClesObservationVue().initialiser(); |
} |
|
|
|
// ACTIONS a entreprendre lors d'un evenement particulier |
|
|
/** |
* Lors du raffraichissement de la liste d'observation |
*/ |
|
|
public void onRafraichissementListeObservations() { |
|
carnetEnLigneMediateur.donneesObsVersImages(listeObservation.getCacheListeObservation()); |
observationModele.rafraichirCacheObservation(listeObservation.getCacheListeObservation()); |
|
filtres.getArbreMotsClesObservationVue().cocherMotsCles(new String[0]); |
} |
|
/** |
* |
* 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 = obtenirCacheObservation().get(ordreObservation) ; |
|
if(GWT.isScript()) { |
masquerChargementInfosObservations() ; |
} |
|
// Affichage de la carte de repartition correspondante |
String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalSaisi() ; |
|
observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ; |
|
if(formulaireSaisieObservationVue.getModification()) { |
String[] ids = listeObservation.getIdSelectionnees(); |
if(ids.length > 1) { |
formulaireSaisieObservationVue.setMasseModification(true); |
ListeObservation listeObs = new ListeObservation(); |
for(int i=0; i < ids.length;i++) { |
Observation obsAjout = observationModele.getCacheObservation().get(ids[i]); |
listeObs.ajouterObservation(obsAjout); |
} |
formulaireSaisieObservationVue.rafraichir(listeObs, false); |
} else { |
formulaireSaisieObservationVue.setMasseModification(false); |
// affichage des détails dans le formulaire d'observation |
formulaireSaisieObservationVue.rafraichir(obs, false) ; |
} |
} else { |
formulaireSaisieObservationVue.rafraichir(obs, false) ; |
} |
// Affichage de l'image correspondante |
|
liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false); |
|
observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ; |
|
observationModele.obtenirLiaisonImage(mvz, ordreObservation) ; |
|
filtres.getArbreMotsClesObservationVue().rafraichir(obs.getMotsCles(), false); |
|
// si on a des coordonnées valides dans le formulaire alors localise directement avec |
if(formulaireSaisieObservationVue.coordonneesValides() != null) { |
EntiteGeographiqueObservation infos = new EntiteGeographiqueObservation(obs.getIdentifiantLocalite(), obs.getLocalite(), null, null); |
infos.setLat(""+obs.getCoordonneeX()); |
infos.setLon(""+obs.getCoordonneeY()); |
cartoObservationVue.rafraichir(infos, false); |
} else { |
// sinon appel à géonames pour obtenir des coordonnées du centre de la commune |
observationModele.obtenirInformationCommune(cartoObservationVue, obs.getLocalite(), obs.getIdentifiantLocalite()); |
} |
} |
|
public void obtenirImageInformationExternes(String numeroNomenclaturalSaisiObservation) { |
if(GWT.isScript()) { |
masquerChargementInfosObservations() ; |
} |
liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false); |
observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ; |
observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ; |
} |
|
public int getTaillePage() { |
return listeObservation.getTaillePage(); |
} |
|
public int getPageEnCours() { |
return listeObservation.getPageEncours(); |
} |
|
|
// 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'observation |
observationModele.ajouterObservation(listeObservation, obs) ; |
filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ; |
filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ; |
|
} |
|
|
|
// 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() { |
|
listeObservation.masquerChargement() ; |
mvz.raz() ; |
imageGeneriqueVue.raz() ; |
informationRepartitionVue.raz() ; |
|
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() ; |
|
observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ; |
} |
|
public void obtenirCacheObservation(Rafraichissable r) { |
|
r.rafraichir(observationModele.getCacheObservation(), 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 CRUD |
public void modifierObservation(Observation obs) { |
|
// On prend soin de récupérer les mots clés de l'observation |
Observation obsMod = obtenirCacheObservation().get(obs.getNumeroOrdre()); |
obs.setMotsCles(obsMod.getMotsCles()); |
|
// On rafraichit la liste d'observation |
observationModele.modifierObservation(listeObservation, obs) ; |
filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ; |
filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ; |
|
} |
|
public void modifierObservationEnMasse(Observation obs) { |
// On rafraichit la liste d'observation |
listeObservation.masquerChargement(); |
observationModele.modifierObservationEnMasse(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() |
{ |
int longueur = 0; |
|
String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ; |
String chaineNomsFiltresGeo = filtresEntitesGeo[0] ; |
String chaineValFiltresGeo = filtresEntitesGeo[1] ; |
|
String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ; |
String chaineNomsFiltresDate = filtresDate[0] ; |
String chaineValFiltresDate = filtresDate[1] ; |
|
String[] filtresTaxon = filtres.getRechercheLibreVue().renvoyerValeursAFiltrer(); |
|
String[] filtresMotsCles = filtres.getArbreMotsClesObservationVue().renvoyerValeursAFiltrer(); |
|
String chaineNomsFiltres = "" ; |
String chaineValFiltres = "" ; |
|
if(!chaineNomsFiltresGeo.trim().equals("") && !chaineValFiltresGeo.trim().equals("")) { |
chaineNomsFiltres += chaineNomsFiltresGeo+","; |
chaineValFiltres += chaineValFiltresGeo+","; |
} |
|
if(!chaineNomsFiltresDate.trim().equals("") && !chaineValFiltresDate.trim().equals("")) { |
chaineNomsFiltres += chaineNomsFiltresDate+","; |
chaineValFiltres += chaineValFiltresDate+","; |
} |
|
if(!filtresTaxon[0].trim().equals("") && !filtresTaxon[1].trim().equals("")) { |
chaineNomsFiltres += filtresTaxon[0]; |
chaineValFiltres += filtresTaxon[1]; |
} |
|
if(!filtresMotsCles[0].trim().equals("") && !filtresMotsCles[1].trim().equals("")) { |
chaineNomsFiltres += filtresMotsCles[0]; |
chaineValFiltres += filtresMotsCles[1]; |
} |
|
String[] nomsFiltres = chaineNomsFiltres.split(",") ; |
String[] valsFiltres = chaineValFiltres.split(",") ; |
|
longueur += nomsFiltres.length; |
|
String [][] valeursFiltres = new String[longueur][2] ; |
|
listeObservation.afficherFiltres(chaineValFiltresGeo, chaineValFiltresDate, filtresTaxon[1]) ; |
|
int i = 0; |
|
if(valsFiltres.length > 0) |
{ |
for(i = 0 ; i < nomsFiltres.length ; i++) |
{ |
valeursFiltres[i][0] = nomsFiltres[i] ; |
if(valsFiltres[i].equals("Inconnue")) |
{ |
valeursFiltres[i][1] = "000null" ; |
} |
else |
{ |
valeursFiltres[i][1] = valsFiltres[i] ; |
} |
} |
} |
|
return valeursFiltres ; |
} |
|
|
/** |
* Retourne l'identifiant de l'utilisateur connecte |
* @return : identifiant de l'utilisateur connecte |
*/ |
public String getIdentifiant() { |
|
return carnetEnLigneMediateur.getUtilisateur().getIdentite(); |
|
} |
|
|
/** |
* |
* @return |
* |
*/ |
|
public Panel getPanneauPrincipalObservation() { |
return panneauPrincipalObservation; |
} |
|
|
public void montrerContextMenu(EventObject e) { |
|
MenuObservationVue mvo = new MenuObservationVue(this) ; |
mvo.showAt(e.getXY()) ; |
|
} |
|
public void doubleClicListeObservation(int rowIndex) { |
|
|
} |
|
// Getters |
|
public PanneauFiltresObservationVues getPanneauFiltres() { |
|
return filtres; |
|
} |
|
public void masquerChargementInfosObservations() |
{ |
ExtElement masked = Ext.get(details.getId()); |
|
if (details.isVisible() && masked != null) { |
informationRepartitionVue.raz() ; |
imageGeneriqueVue.raz() ; |
masked.mask("Chargement", true); |
} |
|
cartoObservationVue.masquerChargement(true); |
} |
|
public void deMasquerChargementInfosObservations() |
{ |
ExtElement masked = Ext.get(details.getId()); |
|
if (details.isVisible() && masked != null) { |
masked.unmask() ; |
} |
} |
|
|
public void obtenirDatesObservation() { |
|
observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ; |
} |
|
|
public void exporterObservations() { |
|
observationModele.exporterObservations() ; |
} |
|
|
public void deconnecterUtilisateur() { |
|
if(panneauPrincipalObservation == null || panneauPrincipalObservation.isCreated() || !panneauPrincipalObservation.isVisible()) |
{ |
panneauPrincipalObservation.addListener(new ContainerListenerAdapter() |
{ |
public void onShow(Component component) |
{ |
deconnecterUtilisateur(); |
panneauPrincipalObservation.purgeListeners(); |
} |
}); |
} |
else |
{ |
listeObservation.raz() ; |
formulaireSaisieObservationVue.raz() ; |
razFiltres(); |
informationRepartitionVue.raz() ; |
imageGeneriqueVue.raz() ; |
mvz.raz() ; |
} |
} |
|
|
public void supprimerLiaisonObsImage() { |
|
String idObs = listeObservation.getIdSelectionnees()[0] ; |
String idImg = mvz.getIdImage() ; |
|
if(Window.confirm("Supprimer le lien entre l'image "+idImg+" et l'observations "+idObs+" ?")) |
{ |
mvz.supprimerLiaisonImage() ; |
observationModele.supprimerLiaisonImages(idImg,idObs) ; |
} |
|
} |
|
public void supprimerObservations() { |
|
if(listeObservation.getIdSelectionnees().length > 0) { |
if(Window.confirm("Êtes vous sur de vouloir supprimer les observations sélectionnées ?")) { |
String[] numObs = listeObservation.getIdSelectionnees(); |
String numObsapl = "" ; |
for(int i = 0 ; i < numObs.length ; i++) { |
numObsapl += numObs[i]+"," ; |
} |
|
observationModele.supprimerListeObservation(listeObservation,numObsapl) ; |
} |
} |
else |
{ |
Window.alert("Aucune observation sélectionnée"); |
} |
} |
|
|
public void transmettreObservations(boolean publier) { |
|
if(carnetEnLigneMediateur.getUtilisateur().isIdentifie()) { |
if(listeObservation.getIdSelectionnees().length > 0) { |
|
String action = "" ; |
|
if(publier) { |
action = "rendre publiques" ; |
} |
else { |
action = "rendre privées" ; |
} |
|
if(Window.confirm("Êtes vous sur de vouloir "+action+" les observations sélectionnées ?")) { |
String[] numObs = listeObservation.getIdSelectionnees(); |
String numObsApl = "" ; |
for(int i = 0 ; i < numObs.length ; i++) { |
numObsApl += numObs[i] ; |
if(i != numObs.length - 1) { |
numObsApl +="," ; |
} |
} |
|
observationModele.transmettreListeObservation(listeObservation,numObsApl, publier) ; |
} |
} |
else |
{ |
Window.alert("Aucune observation sélectionnée"); |
} |
} |
else |
{ |
if(publier) { |
if(Window.confirm("La publication des observations nécessite d'être identifié, voulez-vous vous identifier ? (toutes vos observations saisies seront conservées)")) { |
importerObservations = true ; |
carnetEnLigneMediateur.afficherDialogueConnexion(); |
} |
} |
} |
|
} |
|
public void analyserHistorique() { |
|
if (History.getToken().length()>0) { |
|
final String anum=History.getToken(); |
observationModele.analyserHistorique(formulaireSaisieObservationVue,anum); |
} |
} |
|
/** |
* Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du |
* mot clé |
* |
* @param text |
* le texte du mot clé |
* @param id |
* l'identifiant du mot clé |
*/ |
public void mettreAjourMotsClesId(String text, String id) { |
|
observationModele.mettreAjourMotsClesId(text, id); |
|
} |
|
public boolean gererDDObsSurMotCle(TreeNode NoeudMotCle, DragData dragData) { |
|
if(dragData instanceof GridDragData) { |
|
GridDragData gdd = ((GridDragData)dragData); |
|
String idMotCle = ((String[])NoeudMotCle.getUserObject())[1]; |
|
Record[] obsALier = gdd.getSelections(); |
|
String idObsALier[] = new String[obsALier.length]; |
String idObsALierString = ""; |
|
for(int i = 0; i < obsALier.length; i++) { |
if(i != 0) { |
idObsALierString += ", "; |
} |
idObsALierString += obsALier[i].getAsString("ordre_observation"); |
|
if(!observationAvoirMotCle(idMotCle, obsALier[i].getAsString("ordre_observation"))) { |
idObsALier[i] = obsALier[i].getAsString("ordre_observation"); |
} else { |
idObsALier[i] = ""; |
} |
} |
|
String message = "Lier les observations "; |
|
if(idObsALier.length == 1) { |
message = "Lier l'observation "; |
} |
|
if(Window.confirm(message+idObsALierString+" au projet "+NoeudMotCle.getText()+" ?")) { |
mettreAjourMotsCles(idMotCle, idObsALier); |
|
return true; |
} else { |
return false; |
} |
} else { |
return false; |
} |
} |
|
public void gererDDMotCleSurObs(String idObs, String idMC) { |
|
Observation obs = obtenirCacheObservation().get(idObs); |
|
if(obs == null) { |
return; |
} |
|
if(observationAvoirMotCle(idMC, idObs)) { |
if(Window.confirm("Voulez vous supprimer la liaison entre l'observation et le mot clé ?")) { |
String nouveauMotsCles = obs.getMotsCles().replace(idMC, ""); |
nouveauMotsCles = nouveauMotsCles.replace(";;", ";"); |
|
obs.setMotsCles(nouveauMotsCles); |
|
observationModele.supprimerLiaisonMotCleObservations(listeObservation, idObs, idMC); |
} |
} |
} |
|
public String gererOverDDMotCleSurObs(String idObs, String IdMC) { |
|
if(observationAvoirMotCle(IdMC, idObs)) { |
return "x-dd-drop-unlink"; |
} else { |
return "x-dd-drop-nodrop"; |
} |
} |
/** |
* Récupère les identifiants des obs selectionnézs et appelle le modèle |
* pour qu'il mette à jour les associations mots clés/obs |
* |
* @param motsClesEnCours |
* les mots clés à associer aux images selectionnés séparés par |
* un ';' |
* @param arbreMC |
* l'arbre des mots clés à mettre à jour |
*/ |
public void mettreAjourMotsCles(String motsClesEnCours, String[] idsObsALier) { |
|
String[] ids = listeObservation.getIdSelectionnees(); |
observationModele.mettreAjourMotsCles(motsClesEnCours, idsObsALier); |
|
} |
|
/** |
* Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots |
* clés |
* |
* @param n |
* le noeud à ajouter à l'arbre |
* @param arbreMC |
* le nouvel arbre de mots clés à mettre à jour |
*/ |
public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) { |
observationModele.ajouterMotCleDansArbre(n, arbreMC); |
getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n, false); |
|
} |
|
/** |
* Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre |
* dans l'arbre des mots clés |
* |
* @param n |
* le noeud à supprimer |
* @param arbreMC |
* le nouvel arbre de mots clés à mettre à jour |
*/ |
public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) { |
|
observationModele.supprimerMotCleDansArbre(n, arbreMC); |
getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n.getId(), false); |
|
} |
|
/** |
* Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots |
* clés |
* |
* @param n |
* le noeud à modifier |
* @param arbreMC |
* le nouvel arbre de mots clés à mettre à jour |
*/ |
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) { |
|
observationModele.modifierMotCleDansArbre(n, arbreMC); |
getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n, false); |
|
} |
|
/** |
* Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans |
* l'arbre des mots clés |
* |
* @param n |
* le noeud à déplacer |
* @param arbreMC |
* le nouvel arbre de mots clés à mettre à jour |
*/ |
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) { |
|
observationModele.deplacerMotCleDansArbre(n, arbreMC); |
} |
|
|
public void rafraichirArbreMotsCles(Tree arbreMotsCles) { |
|
getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(arbreMotsCles, false); |
|
} |
|
public boolean observationAvoirMotCle(String idMotCle, String idObs) { |
Observation obs = obtenirCacheObservation().get(idObs); |
if(obs == null) { |
return false; |
} |
|
if(obs.getMotsCles().contains(idMotCle)) { |
return true; |
} |
|
return false; |
} |
|
|
public void obtenirArbreMotsCles(Rafraichissable r) { |
|
observationModele.obtenirArbreMotsCles(r); |
} |
|
public ListeObservation obtenirCacheObservation() { |
return observationModele.getCacheObservation(); |
} |
|
public void donneesExterieures(Object nouvelleDonnees) { |
if(nouvelleDonnees instanceof Tree) { |
|
Tree arbreMotsCles = (Tree)nouvelleDonnees ; |
observationModele.rafraichirArbreMotsCles(nouvelleDonnees); |
rafraichirArbreMotsCles(arbreMotsCles); |
} |
} |
|
public void transmettreDonnees(Object o) { |
carnetEnLigneMediateur.donneesObsVersImages(o); |
} |
|
public void onModeModification() { |
|
String[] ids = listeObservation.getIdSelectionnees(); |
Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length - 1]); |
|
if(ids.length > 1) { |
formulaireSaisieObservationVue.setMasseModification(true); |
ListeObservation listeObs = new ListeObservation(); |
for(int i=0; i < ids.length;i++) { |
Observation obsAjout = observationModele.getCacheObservation().get(ids[i]); |
listeObs.ajouterObservation(obsAjout); |
} |
formulaireSaisieObservationVue.rafraichir(listeObs, false); |
} else { |
formulaireSaisieObservationVue.setMasseModification(false); |
// affichage des détails dans le formulaire d'observation |
formulaireSaisieObservationVue.rafraichir(obs, false) ; |
} |
|
conteneurFormulaire.setTitle("Modification"); |
} |
|
public void onModeCreation() { |
|
conteneurFormulaire.setTitle("Création"); |
String[] ids = listeObservation.getIdSelectionnees(); |
|
if(ids.length > 1) { |
Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length - 1]); |
// affichage des détails dans le formulaire d'observation |
formulaireSaisieObservationVue.rafraichir(obs, false) ; |
} |
} |
|
public void obtenirInformationCoord(Rafraichissable r, LatLng coord) { |
observationModele.obtenirInformationCoord(r,coord); |
} |
|
public void obtenirInformationCommune(Rafraichissable r, String nomCommune, String codePostal) { |
observationModele.obtenirInformationCommune(r,nomCommune, codePostal); |
} |
|
public void obtenirInformationCoord(LatLng coord) { |
observationModele.obtenirInformationCoord(cartoObservationVue,coord); |
if(!cartoObservationVue.isVisible()){ |
cartoObservationVue.masquerChargement(true); |
ongletsSaisieCarto.activate(1); |
} |
} |
|
public void obtenirInformationCommune(String nomCommune, |
String codePostal) { |
observationModele.obtenirInformationCommune(cartoObservationVue,nomCommune, codePostal); |
if(!cartoObservationVue.isVisible()){ |
cartoObservationVue.masquerChargement(true); |
ongletsSaisieCarto.activate(1); |
cartoObservationVue.recentrerCarte(); |
} |
} |
|
public void rafraichirSaisieCommuneObservation(EntiteGeographiqueObservation infosCommune) { |
formulaireSaisieObservationVue.rafraichir(infosCommune, false); |
ongletsSaisieCarto.activate(0); |
} |
|
|
private void razFiltres() { |
|
filtres.getArbreDateObservationFiltreVue().raz() ; |
filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ; |
filtres.getArbreMotsClesObservationVue().raz(); |
filtres.getRechercheLibreVue().raz(); |
} |
|
public Component getListeObservation() { |
|
return listeObservation; |
} |
|
public void redimensionnerPanneaux(int adjHeight, int adjWidth) { |
|
formulaireSaisieObservationVue.setHeight(300); |
|
//if(listeObservation.getHeight() > centre.getHeight()) { |
listeObservation.setHeight(adjHeight/2); |
//} |
centre.doLayout(); |
|
} |
|
public void afficherFormulaireImportObservation() { |
FormulaireImportObservationVue formImportObs = new FormulaireImportObservationVue(this); |
} |
|
} |