Subversion Repositories eFlore/Archives.cel-v1

Rev

Rev 28 | Go to most recent revision | 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 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(),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(),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 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 entryView() {
                        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;
                }

        }