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;

import com.google.gwt.http.client.URL;
import com.google.gwt.json.client.JSONArray;
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;

public class InventoryItem {

        // TODO : Singleton ?
        
        private String name=null;
        private String nomenclaturalNumber=null;
        private String location=null;
        private String location_id=null;
        private String date=null;
        private String lieudit=null;
        private String station=null;
        private String comment=null;
        private String ordre=null;

        private Mediator mediator = null;
        private String serviceBaseUrl = null;

        
        
//       Constructeur  
        
        
        // Constructeur sur saisie 
        
        public InventoryItem(Mediator med) {

                        mediator=med;
                        
                        serviceBaseUrl = mediator.getServiceBaseUrl();
                        
                
        }

        
        // Alimentation contenu depuis saisie
        
        public void setContent(String name,String nomenclaturalNumber, String location, String location_id, String date, String lieudit, String station, String comment,String ordre) {

                
                this.name=name;
                this.nomenclaturalNumber=nomenclaturalNumber;

         // Suppresion indication departementale (on pourrait faire mieux !!)
                int pos=location.indexOf(" (" );
            if (pos>=0) {
                this.location=location.substring(0,pos);
            }
                else {
                         this.location=location;
                }
                 
                this.location_id=location_id;
                if (location.compareTo("")==0) this.location_id="";
                if (location_id==null) this.location_id="";
                this.date=date;
                this.lieudit=lieudit;
                this.station=station;
                this.comment=comment;
                this.ordre=ordre;
                
        }

        
        public boolean isValid() {
                // TODO : controle date
                
            if (name.compareTo("")==0) {
                return false;
            }
            else {
                return true;
            }
                
        }

        /**
         *  Lancement de la creation d'une ligne d'inventaire (appele par Mediator.onAddInventoryItem())
         *
         */
        
        
        public void addelement() {
        
        
        if (isValid()) {
        
                
                                // Creation d'un nom faisant parti du referentiel : recherche du nom valide correspondant

                                if (nomenclaturalNumber !=null) {
                
                                        HTTPRequest.asyncGet(serviceBaseUrl + "/NameValid/" + nomenclaturalNumber,
                                                        new ResponseTextHandler() {
                
                                                                public void onCompletion(String strcomplete) {
                
                                                                        JSONValue jsonValue = JSONParser.parse(strcomplete);
                                                                        JSONArray jsonArray;
                
                                                                        if ((jsonArray = jsonValue.isArray()) != null) {
                                                                                // Nom retenu, Num Nomen nom retenu, Num Taxon,
                                                                                // Famille
                                                                                addElement(name, nomenclaturalNumber,
                                                                                                Util.toCelString(((JSONString) jsonArray.get(0))
                                                                                                                .toString()),
                                                                                                ((JSONString) jsonArray.get(1))
                                                                                                                .stringValue(),
                                                                                                ((JSONString) jsonArray.get(2))
                                                                                                                .stringValue(),
                                                                                                Util.toCelString(((JSONString) jsonArray.get(3))
                                                                                                                .toString()),
                                                                                                                location,location_id,date,lieudit,station,comment);
                                                                        }
                                                                }
                
                                                        });
                                }
                                // Saisie libre
                                else {
                                        addElement(name, " ", " ", " ", " ", " ",location,location_id,date,lieudit,station,comment);
                                }
                        
                }
        else {
                // TODO : message d'erreur
                return;
        }
        }
        
        
        
        /**
         * Ajoute effectif d'un element a l'inventaire (appel interne)
         * 
         * @param nom_sel :
         *            nom selectionne
         * @param num_nom_sel :
         *            numero nomenclatural nom selectionne
         * @param nom_ret :
         *            nom retenu
         * @param num_nom_ret :
         *            numero nomenclaturel nom retenu
         * @param num_taxon :
         *            numero taxonomique
         * @param famille :
         *            famille
         */

        private void addElement(String nom_sel, String num_nom_sel, String nom_ret,
                        String num_nom_ret, String num_taxon, String famille,final String loc, String id_location,String dat, String lieu, String sta, String comment) {


                HTTPRequest.asyncPost(serviceBaseUrl + "/Inventory/", "identifiant="
                                + mediator.getUser() + "&nom_sel=" + URL.encodeComponent(nom_sel) + "&num_nom_sel=" + num_nom_sel
                                + "&nom_ret=" + URL.encodeComponent(nom_ret) + "&num_nom_ret=" + num_nom_ret
                                + "&num_taxon=" + num_taxon + "&famille=" + URL.encodeComponent(famille) + "&location=" + URL.encodeComponent(loc) + "&id_location=" + id_location + "&date_observation=" + dat
                                + "&lieudit="+ URL.encodeComponent(lieu) + "&station="+ URL.encodeComponent(sta) + "&commentaire="+ URL.encodeComponent(comment),

                new ResponseTextHandler() {

                        public void onCompletion(String str) {
                                        mediator.onInventoryUpdated(location_id,location,"all");
                        }
                });
        }

        

        /**
         *  Lancement de la mise a jour d'une ligne d'inventaire (appele par Mediator.onModifyInventoryItem())
         *
         */
          
        public void updateElement() {
        

        if (isValid()) {
        
        
                // Modification d'un nom faisant parti du referentiel : recherche du nom valide correspondant
                
                                if (nomenclaturalNumber !=null) {
                
                                        HTTPRequest.asyncGet(serviceBaseUrl + "/NameValid/" + nomenclaturalNumber,
                                                        new ResponseTextHandler() {
                
                                                                public void onCompletion(String strcomplete) {
                
                                                                        JSONValue jsonValue = JSONParser.parse(strcomplete);
                                                                        JSONArray jsonArray;
                
                                                                        if ((jsonArray = jsonValue.isArray()) != null) {
                                                                                // Nom retenu, Num Nomen nom retenu, Num Taxon,  Famille
                                                                                updateElement(ordre,name, nomenclaturalNumber,
                                                                                                Util.toCelString(((JSONString) jsonArray.get(0))
                                                                                                                .toString()),
                                                                                                ((JSONString) jsonArray.get(1))
                                                                                                                .stringValue(),
                                                                                                ((JSONString) jsonArray.get(2))
                                                                                                                .stringValue(),
                                                                                                Util.toCelString(((JSONString) jsonArray.get(3))
                                                                                                                .toString()),
                                                                                                                location,location_id,date,lieudit,station,comment);
                                                                        }
                                                                }
                
                                                        });
                                }
                                //  Modification d'un nom ne faisant pas parti du referentiel (saisie libre)
                                else {
                                        updateElement(ordre,name, " ", " ", " ", " ", " ",location,location_id,date,lieudit,station,comment);
                                }
                        
                }
        else {
                // TODO : message d'erreur
                return;
        }
        }

        

        

        /**
         * Modification effective d'un element de l'inventaire (appel interne)
         * 
         * @param ordre : numero d'ordre
         * @param nom_sel :
         *            nom selectionne
         * @param num_nom_sel :
         *            numero nomenclatural nom selectionne
         * @param nom_ret :
         *            nom retenu
         * @param num_nom_ret :
         *            numero nomenclaturel nom retenu
         * @param num_taxon :
         *            numero taxonomique
         * @param famille :
         *            famille
         */

        private void updateElement(String ordre, String nom_sel, String num_nom_sel, String nom_ret,
                        String num_nom_ret, String num_taxon, String famille,final String loc, String id_location,String dat, String lieu, String sta, String comment) {


                HTTPRequest.asyncPost(serviceBaseUrl + "/Inventory/" + mediator.getUser() + "/" +ordre + "/",
                                 "&nom_sel=" + URL.encodeComponent(nom_sel) + "&num_nom_sel=" + num_nom_sel
                                + "&nom_ret=" + URL.encodeComponent(nom_ret) + "&num_nom_ret=" + num_nom_ret
                                + "&num_taxon=" + num_taxon + "&famille=" + URL.encodeComponent(famille) + "&location=" + URL.encodeComponent(loc) + "&id_location=" + id_location + "&date_observation=" + dat
                                + "&lieudit="+ URL.encodeComponent(lieu) + "&station="+ URL.encodeComponent(sta) + "&commentaire="+ URL.encodeComponent(comment),

                new ResponseTextHandler() {

                        public void onCompletion(String str) {
                                mediator.onInventoryUpdated(location_id,location,"all");
                        }
                });
        }
        
        
}