Subversion Repositories eFlore/Archives.cel-v1

Rev

Rev 2 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

/*
 * Copyright 2006 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.tela_botanica.client;


import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONNumber;
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.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.HasAlignment;


/**
 * A composite that displays a list of emails that can be selected.
 */
public class TaxonList extends Composite implements AutoCompleteAsyncTextBoxListener  {


          private class NavBar extends Composite implements ClickListener {
                  
            public final DockPanel bar = new DockPanel();
            public final Button gotoFirst = new Button("<<", this);
            public final Button gotoNext = new Button(">", this);
            public final Button gotoPrev = new Button("<", this);
            public final Button gotoEnd = new Button(">>", this);
            public final HTML status = new HTML();
  

            public NavBar() {
              initWidget(bar);
              bar.setStyleName("navbar");
              status.setStyleName("status");

              HorizontalPanel buttons = new HorizontalPanel();
              buttons.add(gotoFirst);
              buttons.add(gotoPrev);
              buttons.add(gotoNext);
              buttons.add(gotoEnd);
              bar.add(buttons, DockPanel.EAST);
              bar.setCellHorizontalAlignment(buttons, DockPanel.ALIGN_RIGHT);
              bar.add(status, DockPanel.CENTER);
              bar.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);
              bar.setCellHorizontalAlignment(status, HasAlignment.ALIGN_RIGHT);
              bar.setCellVerticalAlignment(status, HasAlignment.ALIGN_MIDDLE);
              bar.setCellWidth(status, "100%");

              // Initialize prev & first button to disabled.
              //
            }

            
            public void onClick(Widget sender) {
                    if (sender == gotoNext) {
                      // Move forward a page.
                      startIndex += VISIBLE_TAXON_COUNT;
                      if (startIndex >= count)
                          startIndex -= VISIBLE_TAXON_COUNT;
                    } 
                    else {
                     if (sender == gotoPrev) {
                      // Move back a page.
                      startIndex -= VISIBLE_TAXON_COUNT;
                      if (startIndex < 0)
                        startIndex = 0;
                      }
                     else {
                         if (sender==gotoEnd) {
                                if ((count%VISIBLE_TAXON_COUNT)>0) {
                                startIndex=count-(count%VISIBLE_TAXON_COUNT); 
                        }
                        else {
                                startIndex=count-VISIBLE_TAXON_COUNT; 
                        }
                         }
                         else {
                                 if (sender== gotoFirst) {
                                         startIndex = 0;
                                 }
                         }
                     }
                   }
                   update();
            }

          }

  public void setStatusText(String text) {
            navBar.status.setText(text);
  }

  public void clearStatusText() {
            navBar.status.setHTML("&nbsp;");
  }

        

  private static final int VISIBLE_TAXON_COUNT = 15;
        
  private Grid header = new Grid(1,3);
  private FlexTable table = new FlexTable();
  private CellFormatter cellFormater = table.getCellFormatter();
  private VerticalPanel panel = new VerticalPanel();
  
  private int startIndex=0;
  private int count=65000;
  
  private NavBar navBar = new NavBar();
  
  public TaxonList() {

          
          
    // Setup the header
          
    header.setCellSpacing(0);
    header.setCellPadding(2);
    header.setWidth("100%");

    header.setStyleName("taxon-ListHeader");
    
    header.setText(0, 0, "Action");
    header.setText(0, 1, "Nom");
    header.setText(0, 2, "Famille");
    
    
   
    // Setup the table.
          
    table.setCellSpacing(0);
    table.setCellPadding(2);
    table.setWidth("100%");


    navBar.setWidth("100%");

    
   
    table.setStyleName("taxon-List");

    panel.add(navBar);
    panel.add(header);
    panel.add(table);
    
    initWidget(panel);
    
    // Recherche derniere ligne ... (il y a une autre stratégie pour la calculer si le resultat n'arrive pas assez vite)

    
         HTTPRequest.asyncGet("http://localhost/david/jrest/InventoryList/dd/", 
                    new ResponseTextHandler(){

                        public void onCompletion(String str) {

// On se positionne sur la dernière page ...
                                
                                JSONValue jsonValue= JSONParser.parse(str);
                                JSONNumber jsonNumber;
                                    if ((jsonNumber = jsonValue.isNumber()) != null) {
                                        count=(int) jsonNumber.getValue();
                                        if ((count%VISIBLE_TAXON_COUNT)>0) {
                                                startIndex=count-(count%VISIBLE_TAXON_COUNT); 
                                        }
                                        else {
                                                startIndex=count-VISIBLE_TAXON_COUNT; 
                                        }
                                        
                                        update();
                                    }
                        }
                });
    

  }
 
  public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender, String str) {
                
// Ajout ligne 
         

            count++;
          
            HTTPRequest.asyncPost("http://localhost/david/jrest/Inventory/", "identifiant=dd&nom="+str, 
            new ResponseTextHandler(){

                public void onCompletion(String str) {
                        if ((count%VISIBLE_TAXON_COUNT)>0) {
                                startIndex=count-(count%VISIBLE_TAXON_COUNT); 
                        }
                        else {
                                startIndex=count-VISIBLE_TAXON_COUNT; 
                        }
                        update();
                }
            });
            

  }
  

  public void deleteElement() {

            // Lifo ...
      for (int i=table.getRowCount()-1; i>=0;i--){
                 if (((CheckBox) table.getWidget(i,0)).isChecked())  {
                        String str=table.getText(i,2);
                        count--;
                         HTTPRequest.asyncPost("http://localhost/david/jrest/Inventory/dd/"+str, "action=DELETE", 
                           new ResponseTextHandler(){

                                public void onCompletion(String str) {
                                        if ((count%VISIBLE_TAXON_COUNT)>0) {
                                        startIndex=count-(count%VISIBLE_TAXON_COUNT); 
                                }
                                else {
                                        startIndex=count-VISIBLE_TAXON_COUNT; 
                                }
                                update();
                                }
                          });

                 }
          }
  }
  
  
  private void update() {

         navBar.gotoFirst.setEnabled(false);
         navBar.gotoPrev.setEnabled(false);
     navBar.gotoNext.setEnabled(false);
     navBar.gotoEnd.setEnabled(false);
 
     setStatusText("Patientez ...");

         HTTPRequest.asyncGet("http://localhost/david/jrest/InventoryList/dd/"+startIndex+"/"+VISIBLE_TAXON_COUNT, 
                    new ResponseTextHandler(){

                        public void onCompletion(String str) {

                                    JSONValue jsonValue= JSONParser.parse(str);
                                    JSONArray jsonArray;
                                    JSONArray jsonArrayNested;
                                 
                                    // Lifo ...
                                for (int i=table.getRowCount()-1; i>=0;i--){
                                        table.removeRow(i);
                                }


                                    if ((jsonArray = jsonValue.isArray()) != null) {
                                      int i;    
                                      for (i = 0; i < jsonArray.size(); ++i) {
                                          if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) {
                                                  int row=table.insertRow(table.getRowCount());
                                                  table.setWidget(row,0,new CheckBox());
                                                  table.setText(row,1,((JSONString) jsonArrayNested.get(0)).stringValue());
                                                  table.setText(row,2,((JSONString) jsonArrayNested.get(1)).stringValue());
                                                  cellFormater.setVisible(row,2,false);
                                          }
                                      }
                                      // Calcul nombre d'enregistrement total
                                      if (i<VISIBLE_TAXON_COUNT) {
                                          count = startIndex+i;
                                      }
                                      
                                      // Navigation 
                                      
                                      setStatusText((startIndex + 1) + " - " + (startIndex + VISIBLE_TAXON_COUNT));

                                      // Premiere page 
                                      if (startIndex<VISIBLE_TAXON_COUNT) {
                                                navBar.gotoPrev.setEnabled(false);
                                                navBar.gotoFirst.setEnabled(false);
                                                navBar.gotoNext.setEnabled(true);
                                                navBar.gotoEnd.setEnabled(true);
                                                
                                      }
                                      // Derniere page
                                      else {
                                          if (startIndex>=(count-VISIBLE_TAXON_COUNT)) {
                                                navBar.gotoPrev.setEnabled(true);
                                                navBar.gotoFirst.setEnabled(true);
                                                navBar.gotoNext.setEnabled(false);
                                                navBar.gotoEnd.setEnabled(false);
                                                setStatusText((startIndex + 1) + " - " + count);
                                          }
                                          else {
                                                      navBar.gotoPrev.setEnabled(true);
                                                      navBar.gotoFirst.setEnabled(true);
                                                      navBar.gotoNext.setEnabled(true);
                                                      navBar.gotoEnd.setEnabled(true);
                                          }
                                      }
                                    }
                        }
                    });

  }
 
  
  
  

}