Rev 29 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client;
// TODO : sortie User vers une classe ...
// TODO : sortie les boutons supprimer et exporter et inclure ici : vraiment ?
// TODO : optimisation, ne pas rechercher stations ou date si non affichés
import net.mygwt.ui.client.Style;
import net.mygwt.ui.client.widget.Viewport;
import net.mygwt.ui.client.widget.WidgetContainer;
import net.mygwt.ui.client.widget.layout.BorderLayout;
import net.mygwt.ui.client.widget.layout.BorderLayoutData;
import net.mygwt.ui.client.widget.layout.FillLayout;
import com.google.gwt.i18n.client.Dictionary;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONBoolean;
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;
import com.google.gwt.user.client.ui.TextBox;
public class Mediator implements AutoCompleteAsyncTextBoxListener {
// General
private WidgetContainer west = null;
private WidgetContainer south = null;
private WidgetContainer center = null;
private WidgetContainer north = null;
private String serviceBaseUrl = getServiceBaseUrlFromDictionnary(); // Recherche url de base des services distants
// Utilisateur
private ConnexionView connexionView=null; // Information de connexion
private String user = null; // Identifiant utilisateur connecte ou bien identifiant de session en cours
private boolean connected=false; // Positionne a vrai si identification reussie
// Filtres sur les releves
private InventoryFilterView inventoryFilterView=null; // Containeur filtre date, lieu, lieu-dit ...
private LocationFilterView locationFilterView=null; // Filtre sur lieu de releve
private DateFilterView dateFilterView = null; // Filtre sur date d'observation
// Saisie d'une observation
private EntryView entryView=null; // Formulaire de saisie observation
private NameAssistant nameAssistant=null; // Assistant de saisie nom scientifique
private LocationAssistant locationAssistant=null; // Assistant de saisie nom de commune
private TextBox date = null; // date observation
private TextBox station = null; // station observation
private TextBox milieu = null; // milieu observation
private TextBox lieudit = null; // lieu dit observation
private TextBox comment = null; // commentaire observation
private InventoryItem inventoryItem=null; // Une observation saisie
// Liste de releves saisis
private InventoryListView inventoryListView = null; // Liste de releves
// Actions sur les releves
private ActionView actionView=null; // Action sur les observations
private SearchPanel searchPanel = null; // Recherche dans les relevés saisis
// Informations
private InfoPopup infoPopup=null; // Information complementaire sur un taxon (photo, repartition)
Mediator() {
// Recherche identifiant utilisateur connecte
HTTPRequest.asyncGet(serviceBaseUrl + "/User/",
new ResponseTextHandler() {
public void onCompletion(String str) {
JSONValue jsonValue = JSONParser.parse(str);
JSONArray jsonArray;
if ((jsonArray = jsonValue.isArray()) != null) {
user = ((JSONString) jsonArray.get(0)).stringValue(); // Identifiant utilisateur ou identifiant de session si non connecte
connected = ((JSONBoolean) jsonArray.get(1)).booleanValue(); // Drapeau leve si utilisateur identifie
}
_Mediator();
}
});
}
// Fin initialisation
private void _Mediator() {
// Navigateur
Viewport viewport = new Viewport();
// viewport.setStyleName("my-border-layout");
// viewport.setBorders(true);
viewport.setLayout(new BorderLayout());
center = new WidgetContainer();
center.setLayout(new BorderLayout());
// center.setBorders(true);
west = new WidgetContainer();
west.setLayout(new FillLayout());
// west.setBorders(true);
south = new WidgetContainer();
south.setLayout(new FillLayout());
// south.setBorders(true);
north = new WidgetContainer();
north.setLayout(new FillLayout());
// north.setBorders(true);
inventoryListView = new InventoryListView(this); // Liste de releves
connexionView = new ConnexionView(this); // Identifiant de connection
inventoryFilterView = new InventoryFilterView(this); // Ensemble de filtres sur liste de releves
entryView = new EntryView(this); // Formulaire de saisie
actionView = new ActionView(this); // Action sur releves saisis
// searchPanel = new SearchPanel(this); // Recherche dans releves
//applicationPanel.add(searchPanel);
BorderLayoutData westData = new BorderLayoutData(Style.WEST, 200, 150, 300);
westData.resizeable = true;
viewport.add(west, westData);
BorderLayoutData centerData = new BorderLayoutData(Style.CENTER, 400, 400, 800);
viewport.add(center, centerData);
BorderLayoutData northData = new BorderLayoutData(Style.NORTH, 20, 20, 20);
viewport.add(north, northData);
BorderLayoutData southData = new BorderLayoutData(Style.SOUTH, 400, 400, 800);
// viewport.add(south, southData);
viewport.layout();
onInit();
// Methodes Private
}
/**
* Recuperation du prefixe d'appel des services
* @return prefix appel des service
*/
private String getServiceBaseUrlFromDictionnary() {
Dictionary theme = Dictionary.getDictionary("Parameters");
return theme.get("serviceBaseUrl");
}
// Methodes Public
// Actions declanchee par le systeme
/**
* Action initialisation premier affichage
*/
public void onInit() {
locationFilterView.setIDLocation("all"); // Mise a jour filtre localite
locationFilterView.setLocation("all"); // Mise a jour filtre localite
locationFilterView.setLieudit("all"); // Mise a jour filtre localite
locationFilterView.update(); // Mise a jour affichage
dateFilterView.setYear("all");
dateFilterView.setMonth("all");
dateFilterView.setDay("all");
dateFilterView.update();
this.onLocationSelected("all","all","all");
}
// Actions sur formulaire de saisie
/**
* Action lancee par la completion d'un nom dans un assistant de saisie
* Recherche d'information complementaires ....
*
* @return void
*/
public void onComplete(ResponseTextHandler sender, String str, String value) {
if (sender instanceof NameAssistant) {
onNameCompleted(value);
}
}
/**
* Action suivant la completion d'un nom : affichage popup information
*
*/
public void onNameCompleted(String value) {
if (infoPopup==null) {
infoPopup = new InfoPopup(this);
}
infoPopup.setImageUrl(value);
}
/**
* Action prealable a l'ajout d'une observation : controle presence champs requis et lancement mise a jour
*
*/
public void onAddInventoryItem() {
// Lazy instantiation
if (inventoryItem==null) {
inventoryItem=new InventoryItem(this);
}
inventoryItem.setContent(nameAssistant.getText(),nameAssistant.getValue(),locationAssistant.getText(),locationAssistant.getValue(),date.getText(),lieudit.getText(),station.getText(), milieu.getText(), comment.getText(),"null");
inventoryItem.addelement();
}
/**
* Action prealable a la modification d'une observation : controle presence champs requis et lancement mise a jour
*
*/
public void onModifyInventoryItem(String ordre) {
// Lazy instantiation
if (inventoryItem==null) {
inventoryItem=new InventoryItem(this);
}
inventoryItem.setContent(nameAssistant.getText(),nameAssistant.getValue(),locationAssistant.getText(),locationAssistant.getValue(),date.getText(),lieudit.getText(),station.getText(), milieu.getText(), comment.getText(),ordre);
inventoryItem.updateElement();
}
/**
* Action lancee par la selection d'un nom dans un assistant de saisie. Lance
* la recherche d'informations complementaires (famille, numero
* nomenclaturaux etc) et met a jour l'inventaire (addelement())
*
* @return void
*/
public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender,
String str, String value) {
if (entryView.getOrdre()==null) { // Nouvelle observation
onAddInventoryItem();
}
else {
onModifyInventoryItem(entryView.getOrdre()); // Modification d'une observation
entryView.setOrdre(null);
}
}
// Action portant sur la liste des observations
/**
* Action suite ajout, modification, suppression d'un element inventaire
*/
public void onInventoryUpdated(String id_location,String loc, String lieu) {
if (id_location.compareTo("")==0) {
id_location="000null";
}
if (loc.compareTo("")==0) {
loc="000null";
}
if (lieu.compareTo("")==0) {
lieu="000null";
}
locationFilterView.setIDLocation(id_location); // Mise a jour filtre localite
locationFilterView.setLocation(loc); // Mise a jour filtre localite
locationFilterView.setLieudit(lieu); // Mise a jour filtre localite
locationFilterView.update(); // Mise a jour affichage
dateFilterView.setYear("all");
dateFilterView.setMonth("all");
dateFilterView.setDay("all");
dateFilterView.update();
this.onLocationSelected(id_location,loc,lieu); // Selection localite
}
/**
* Action sur selection d'une observation : affichage du detail
*/
public void onInventoryItemSelected(String ordre) {
entryView.setOrdre(ordre); // Mise a jour du formulaire de saisie avec l'element selectionne
entryView.update();
}
/**
* Action sur deselection d'une observation : remise a zero
*/
public void onInventoryItemUnselected() {
entryView.setOrdre(null); // Mise a jour du formulaire de saisie avec l'element selectionne
}
// Action sur Filtrage
// Filtre identification
/**
* Action sur login : initialisation filtres pour cette utilisateur
* @param user
*/
public void onLogin(String user) {
this.user=user;
connexionView.getSignLabel().setText(user+ " (deconnexion)");
inventoryListView.setUser(user);
dateFilterView.setUser(user);
entryView.setUser(user);
locationFilterView.setUser(user);
this.onInit();
}
/**
* Action sur logoff
* @param user
*/
public void onLogoff(String user) {
this.user=user;
connexionView.getSignLabel().setText("Connexion");
inventoryListView.setUser(user);
dateFilterView.setUser(user);
entryView.setUser(user);
locationFilterView.setUser(user);
this.onInit();
}
// Filtre recherche contenu
/**
* Action sur recherche : affichage de la liste des taxons correspondants
*/
public void onSearch(String search) {
if (search.trim().compareTo("")==0) {
search="all";
}
inventoryListView.setSearch(search);
inventoryListView.updateCount();
}
// Filtre selection lieu
/**
* Action sur selection d'un lieu : affichage de la liste des taxons correspondants au filtrage
*/
public void onLocationSelected(String id_loc, String loc,String lieu) {
// Positionnement Filtre affichage
inventoryListView.setIdLocation(id_loc);
inventoryListView.setLocation(loc);
inventoryListView.setLieudit(lieu);
inventoryListView.updateCount();
// Affichage des filtres
inventoryListView.displayFilter();
}
// Filtre date d'observation
/**
* Action sur selection d'une date : affichage de la liste des taxons correspondants
*/
public void onDateSelected(String year,String month,String day) {
inventoryListView.setYear(year);
inventoryListView.setMonth(month);
inventoryListView.setDay(day);
inventoryListView.updateCount();
inventoryListView.displayFilter();
}
// Declaration, enregistrement
/**
* Declaration date : date observation
* @param date
*/
public void registerDate(TextBox date) {
this.date=date;
}
/**
* Declaration lieu dit : lieu dit d'observation
*
* @param lieudit
*/
public void registerLieudit(TextBox lieudit) {
this.lieudit=lieudit;
}
/**
* Declaration station : station d'observation
*
* @param station
*/
public void registerStation(TextBox station) {
this.station=station;
}
/**
* Declaration milieu : milieu d'observation
*
* @param milieu
*/
public void registerMilieu(TextBox milieu) {
this.milieu=milieu;
}
/**
* Declaration commentaire b
* @param commentaire
*/
public void registerComment(TextBox comment) {
this.comment=comment;
}
/**
* Declaration NameAssistant : completion nom scientifique
* @param nameassistant
*/
public void registerNameAssistant(NameAssistant nameAssistant) {
this.nameAssistant=nameAssistant;
}
/**
* Declaration DateFilterView : filtre date observation
* @param locationList
*/
public void registerDateFilterView(DateFilterView dateFilterView) {
this.dateFilterView=dateFilterView;
}
/**
* Declaration LocationAssistant : completion commune
* @param locationassistant
*/
public void registerLocationAssistant(LocationAssistant locationAssistant) {
this.locationAssistant=locationAssistant;
}
/**
* Declaration LocationFilterView : filtre lieu observation
* @param locationList
*/
public void registerLocationFilterView(LocationFilterView locationFilterView) {
this.locationFilterView=locationFilterView;
}
// Accesseurs et setteurs
/**
* Accesseur Url de base
* @return Url de base
*/
public String getServiceBaseUrl() {
return serviceBaseUrl;
}
/**
* Accesseur Utilisateur
* @return utilisateur connecte ou identifiant de session
*/
public String getUser() {
return user;
}
public void setUser(String user) {
this.user=user;
}
public WidgetContainer getCenterContainer() {
return center;
}
public WidgetContainer getNorthContainer() {
return north;
}
public WidgetContainer getWestContainer() {
return west;
}
public WidgetContainer getSouthContainer() {
return south;
}
public InventoryListView getInventoryListView() {
return inventoryListView;
}
public LocationFilterView getLocationFilterView() {
return locationFilterView;
}
public NameAssistant getNameAssistant() {
return nameAssistant;
}
public LocationAssistant getLocationAssistant() {
return locationAssistant;
}
public InventoryItem getInventoryItem() {
return inventoryItem;
}
public EntryView getEntryView() {
return entryView;
}
public InventoryFilterView getInventoryFilterView() {
return inventoryFilterView;
}
public InfoPopup getInfoPopup() {
if (infoPopup==null) {
infoPopup = new InfoPopup(this);
}
return infoPopup;
}
public void setConnected(boolean connected) {
this.connected=connected;
}
public boolean getConnected() {
return this.connected;
}
public ActionView getActionView() {
return this.actionView;
}
}