Subversion Repositories eFlore/Archives.cel-v1

Rev

Rev 29 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 David Delon david.delon@clapas.net 2007
 
 */

/*
 * EntryView.java  (Composite de Panel)
 * 
 * Cas d'utilisation :
 * Saisie assistee (completion nom et completion commune) de releves. 
 * L'identification n'est pas obligatoire
 *
 * 1 : L'utilisateur saisit a minima un nom de plante 
 *              1: Le nom de plante provient d'une application externe : il est deduit du nuremo nomenclatural transmis en historique
 * 2 : Le programme assiste la saisie de nom de plante ou de localite par interrogation du systeme distant
 * 3 : L'utilisateur choisi le type de mise (ajout ou modification)
 * 3 : L'utilisateur valide sa saisie
 * 4 : Le programme transmet au systeme distant la nouvelle saisie pour l'identifiant en cours
 * 5 : Le programme transmet au systeme local un evenement annoncant une nouvelle saisie
 * 
 * 
 * Affichage detail d'un observation
 * 1 : Le programme affiche les donnees d'inventaire pour l'identifiant enregistre et pour le numero d'ordre transmis
 *
 */


// TODO : onvalidate dans mediator


package org.tela_botanica.client;

import java.util.Date;

import net.mygwt.ui.client.Style;
import net.mygwt.ui.client.event.BaseEvent;
import net.mygwt.ui.client.event.SelectionListener;
import net.mygwt.ui.client.widget.Button;
import net.mygwt.ui.client.widget.ContentPanel;
import net.mygwt.ui.client.widget.WidgetContainer;
import net.mygwt.ui.client.widget.layout.BorderLayoutData;
import net.mygwt.ui.client.widget.layout.FlowLayout;

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.History;
import com.google.gwt.user.client.ResponseTextHandler;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;


public class EntryView  {
        
        
  private ContentPanel panel=null;
  private NameAssistant nameAssistant = null;
  private LocationAssistant locationAssistant = null;
  private TextBox date = new TextBox();
  private TextBox lieudit = new TextBox();
  private TextBox station = new TextBox();
  private TextBox milieu = new TextBox();
  private TextBox comment = new TextBox();
  private Button dateSelector = new Button("...");

  boolean visible=false;
  private Mediator mediator=null;
  
  
  private String user= null;
  private String ordre =null;
  
  private CalendarWidget calendar = null; // Lazy instantiation
  private PopupPanel choicesPopup = null; // Lazy instantiation
  

  public EntryView(final Mediator med) {
         
          
          
  Grid observation = new Grid(5,4);
  
  
  // Formatage affichage 
  
  for (int i=0; i<5;i++) {
        observation.getCellFormatter().setWidth(i, 0, "3%");
        observation.getCellFormatter().setWidth(i, 1, "47%");
        observation.getCellFormatter().setWidth(i, 2, "3%");
        observation.getCellFormatter().setWidth(i, 3, "47%");
  }  
  

   mediator=med;
   user=mediator.getUser();

   
   // Declaration des elements du dialogue de saisie aupres du mediator
   
   mediator.registerDate(date);
   mediator.registerComment(comment);
   mediator.registerStation(station);
   mediator.registerMilieu(milieu);
   mediator.registerLieudit(lieudit);
   
   panel= new ContentPanel(Style.HEADER);
   panel.setLayout(new FlowLayout());
   panel.setText("Nouvelle observation");

   VerticalPanel outer = new VerticalPanel();
 
// Name assistant et location assistant : widget auto-completion sur nom scientifique ou commune 

        nameAssistant = new NameAssistant(mediator);
        locationAssistant = new LocationAssistant(mediator);

        

         // Saisie Commune
         
     observation.setHTML(0,0,"Commune:&nbsp;");
     observation.setWidget(0,1,locationAssistant);
     
     locationAssistant.setWidth("100%");


         // Saisie lieu-dit
         
     observation.setHTML(0,2,"Lieu-dit:&nbsp;");
     observation.setWidget(0,3,lieudit);
     
     lieudit.setWidth("100%");


     
     lieudit.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          if(arg1 == KEY_ENTER)
                            {
                                 onValidateTextBox(lieudit);
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) { }

                  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
                  
                  }
     );


     
         // Saisie (station)
         
     observation.setHTML(1,0,"Station:&nbsp;");
     observation.setWidget(1,1,station);

     station.setWidth("100%");

     
     // Validation par entree sur cette zone de texte
     
     station.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          if(arg1 == KEY_ENTER)
                            {
                                 onValidateTextBox(station);
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) { }

                  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
                  
                  }
     );

// Saisie (station)
         
     observation.setHTML(1,2,"Milieu:&nbsp;");
     observation.setWidget(1,3,milieu);

     milieu.setWidth("100%");

     
     // Validation par entree sur cette zone de texte
     
     milieu.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          if(arg1 == KEY_ENTER)
                            {
                                 onValidateTextBox(milieu);
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) { }

                  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
                  
                  }
     );


     
     // Selecteur de Date 
     // Releve 

     
     dateSelector.addSelectionListener(
         
         new SelectionListener() {
                                public void widgetSelected(BaseEvent be) { 
    
           if (visible) {
                  visible=false; 
                  choicesPopup.hide();
           }
           else {
                visible=true; 
                if (calendar==null) {  // Lazy instantiation
                  calendar = new CalendarWidget();
                  choicesPopup = new PopupPanel(true);
                  choicesPopup.add(calendar);
                  calendar.addChangeListener(new ChangeListener() {

                             public void onChange(Widget sender) {
                                 
                               Date dateSelected=calendar.getDate();
                               date.setText(dateSelected.getDate()+"/"+(dateSelected.getMonth()+1)+"/"+(dateSelected.getYear()+1900));
                               visible=false; 
                               choicesPopup.hide();
                             }
                             });
                  
                }

            choicesPopup.show();
                choicesPopup.setPopupPosition(dateSelector.getAbsoluteLeft(),
                dateSelector.getAbsoluteTop()  - dateSelector.getOffsetHeight() - choicesPopup.getOffsetHeight());
                choicesPopup.setWidth(dateSelector.getOffsetWidth() + "px");
           }
       }
     
     });

     
        // Saisie Espece 
        
   observation.setHTML(3,0,"Esp&egrave;ce:&nbsp;");
   observation.setWidget(3,1,nameAssistant);
  
   nameAssistant.setWidth("100%");

   observation.setHTML(2,0,"Date:&nbsp;");
    
    HorizontalPanel datePanel = new HorizontalPanel();
    datePanel.add(date);
    datePanel.add(dateSelector);
    observation.setWidget(2,1,datePanel);
    
    // Saisie date   
    // Validation par entree sur cette zone de texte

   
    date.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          if(arg1 == KEY_ENTER)
                            {
                                  onValidateTextBox(date);
                            }
                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
                  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
                  
                  }
    );
    
  

    
         // Saisie Commentaire
         
    observation.setHTML(4,0,"Notes:&nbsp;");
    observation.setWidget(4,1,comment);

    comment.setWidth("100%");


    // Validation par entree sur cette zone de texte

    comment.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          if(arg1 == KEY_ENTER)
                            {
                                  onValidateTextBox(comment);
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
                  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
                  
                  }
  );

    
    Button validButton=new Button("OK",
                   
                new SelectionListener() {
                                        public void widgetSelected(BaseEvent be) {  
                                                  // Numero ordre vide : ajout d'une observation
                                                if (ordre==null) {
                                             mediator.onAddInventoryItem(); 
                                             panel.setText("Nouvelle observation");
                                                }
                                                else {
                                             mediator.onModifyInventoryItem(ordre); 
                                             panel.setText("Modification de l'observation n°: "+ordre);
                                                }
                                }
                        }
            );
            

         
    observation.setWidget(4,3,validButton);



    HorizontalPanel actionPanel= new HorizontalPanel();
   
 //   actionPanel.add(validButton);
    

        observation.setWidth("100%");

        outer.add(observation);
        outer.setCellWidth(observation, "100%");
        outer.setSpacing(10);
         
        outer.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
    outer.add(actionPanel);
    
    outer.setWidth("100%");

           
    panel.add(outer);
    
    HorizontalPanel inner=new HorizontalPanel();
    
    Button newButton=new Button("Clear",
   
    // Init
        new SelectionListener() {
                                public void widgetSelected(BaseEvent be) {  

                                        clear();

                        }
                }
    );
    
    inner.add(newButton);

    
    inner.setWidth("100%");
    panel.getHeader().addWidget(inner);
    
        WidgetContainer center=mediator.getCenterContainer();
        BorderLayoutData centerData = new BorderLayoutData(Style.NORTH, .27f, 150, 300);
        center.add(panel,centerData);


    // Initialisation si provenance d'un lien
    
    if (History.getToken().length()>0) {

        final String anum=History.getToken();

                HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Name/" + anum,
                                new ResponseTextHandler() {

                                        public void onCompletion(String strcomplete) {

                                                JSONValue jsonValue = JSONParser.parse(strcomplete);
                                                JSONArray jsonArray;

                                                if ((jsonArray = jsonValue.isArray()) != null) {
                
                                                                String aname = Util.toCelString(((JSONString) jsonArray.get(0)).toString());
                                                                
                                                                // Nom  
                                                                if (aname.compareTo("null")!=0) {
                                                                        nameAssistant.setText(aname);
                                                                        // Numero nomenclatural 
                                                                        nameAssistant.setValue(anum);
                                                                }
                                                        
                                                }
                                        }

                                });

        
    }

         
  }

  void clear() {
  nameAssistant.setText("");
        nameAssistant.setValue(null);
        locationAssistant.setText("");
        locationAssistant.setValue(null); // Null ?
        date.setText(""); 
        lieudit.setText(""); 
        station.setText(""); 
        milieu.setText(""); 
        comment.setText(""); 
        ordre=null;
        panel.setText("Nouvelle observation");

}
  
        /*
         * Numero d'ordre du releve affiche + mise à jour bouton
         * 
         */
        
        public void setOrdre(String ordre) {
                this.ordre = ordre;
                if (ordre==null) {
                        panel.setText("Nouvelle observation");
                }
                else {
                        panel.setText("Modification de l'observation n°: "+ordre);
                }
        }


        /*
         * Numero d'ordre du releve affiche
         * 
         */
        
        public String getOrdre() {
                return this.ordre;
        }


    // Validation par entree sur cette zone de texte
    
    private void onValidateTextBox(TextBox textbox) {
        
                        if (ordre==null) {
                          // Numero ordre vide : ajout d'une observation
                             mediator.onAddInventoryItem(); 
                             textbox.setText("");
                             panel.setText("Nouvelle observation");
                        }
                        else {
                          // Modification  d'une observation
                             mediator.onModifyInventoryItem(ordre); 
                                 panel.setText("Modification de l'observation n°: "+ordre);
                        }
    }

        
  
  /**
         * Mise a jour de l'affichage a partir de donnees deja saisie
         * 
         */

        public void update() {

                HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Inventory/" + user + "/" + ordre, 

                new ResponseTextHandler() {

                        public void onCompletion(String str) {

                                JSONValue jsonValue = JSONParser.parse(str);
                                JSONArray jsonArray;
                                
                                
                                if ((jsonArray = jsonValue.isArray()) != null) {
                                        
                                                        // Nom saisi
                                                        nameAssistant.setText(Util.toCelString(((JSONString) jsonArray.get(0)).toString()));
                                                        
                                                        
                                                        // Numero nomenclatural
                                                
                                                        String ann=((JSONString) jsonArray .get(3)).stringValue();
                                                        
                                                        if (ann.compareTo("0")!=0) {
                                                                nameAssistant.setValue(ann);
                                                                mediator.getInfoPopup().setImageUrl(ann);
                                                        }
                                                        else {
                                                                nameAssistant.setValue(null);
                                                        }
                                                        
                                                        // Commune
                                                        String aloc=Util.toCelString(((JSONString) jsonArray .get(6)).toString());
                                                        
                                                        if (aloc.compareTo("000null")!=0) {
                                                                locationAssistant.setText(aloc);
                                                        }
                                                        else { 
                                                                locationAssistant.setText("");
                                                        }
                                                        
//                                                       Departement
                                                        String adep=Util.toCelString(((JSONString) jsonArray .get(7)).toString());
                                                        
                                                        if (adep.compareTo("000null")!=0) {
                                                                locationAssistant.setValue(adep);
                                                        }
                                                        else { 
                                                                locationAssistant.setValue(null);
                                                        }
                                                        
                                                        String adate=((JSONString) jsonArray .get(9)).stringValue();
                                                        
//                                                      Date 
                                                        if (adate.compareTo("0000-00-00 00:00:00")!=0) {
                                                                date.setText(adate); 
                                                        }
                                                        else {
                                                                date.setText(""); 
                                                        }


                                                        String alieudit=Util.toCelString(((JSONString) jsonArray .get(10)).toString());
                                                        
//                                                      Lieudit 
                                                        if (alieudit.compareTo("000null")!=0) {
                                                                lieudit.setText(alieudit); 
                                                        }
                                                        else {
                                                                lieudit.setText(""); 
                                                        }
                                                        
                                                        String astation=Util.toCelString(((JSONString) jsonArray .get(11)).toString());
                                                        
//                                                      Station 
                                                        if (astation.compareTo("000null")!=0) {
                                                                station.setText(astation); 
                                                        }
                                                        else {
                                                                station.setText(""); 
                                                        }
                                                        
                                                        
                                                        String amilieu=Util.toCelString(((JSONString) jsonArray .get(12)).toString());
                                                        
//                                                      Milieu
                                                        if (amilieu.compareTo("000null")!=0) {
                                                                milieu.setText(amilieu); 
                                                        }
                                                        else {
                                                                milieu.setText(""); 
                                                        }

                                                        String acomment=Util.toCelString(((JSONString) jsonArray .get(13)).toString());
//                                                      Notes
                                                        if (acomment.compareTo("null")!=0) {
                                                                comment.setText(acomment); 
                                                        }
                                                        else {
                                                                comment.setText(""); 
                                                        }
                                                        
                                }

                                
                        }
                });

        }

        public void setUser(String user) {
                this.user = user;
        }
        

}

/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.2  2008-01-30 08:55:40  ddelon
* fin mise en place mygwt
*
* Revision 1.1  2008-01-02 21:26:04  ddelon
* mise en place mygwt
*
* Revision 1.8  2007-12-22 14:48:53  ddelon
* Documentation et refactorisation
*
* Revision 1.7  2007-09-17 19:25:34  ddelon
* Documentation
*
* Revision 1.6  2007-06-06 13:29:30  ddelon
* v0.09
*
* Revision 1.5  2007-05-22 14:27:08  ddelon
* reglage modification
*
* Revision 1.4  2007-05-21 21:01:35  ddelon
* Modification comportement boutons
*
* 
*/