Rev 3 | 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.i18n.client.Dictionary;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.ClickListener;import com.google.gwt.user.client.ui.HasHorizontalAlignment;import com.google.gwt.user.client.ui.HasVerticalAlignment;import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;import java.util.Vector;/* Le retour de getUser appelle getCount qui appelle update pour veiller à une initialisation correcte/*** 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, HasHorizontalAlignment.ALIGN_RIGHT);bar.setCellVerticalAlignment(status, HasVerticalAlignment.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(" ");}private static final int VISIBLE_TAXON_COUNT = 15;private Grid header = new Grid(1,6);private FlexTable table = new FlexTable();private VerticalPanel panel = new VerticalPanel();private int startIndex=0;private String serviceBaseUrl=getServiceBaseUrl();private int count=65000;private Vector complements=null;private String element=null;private String complement=null;private String user;private NavBar navBar = new NavBar();public TaxonList(Vector comps) {getUser();// Information complementairecomplements=comps;// Setup the headerheader.setCellSpacing(0);header.setCellPadding(2);header.setWidth("100%");header.setStyleName("taxon-ListHeader");header.setText(0, 0, "");header.setText(0, 1, "Nom saisi");header.setText(0, 2, "Nom retenu");header.setHTML(0, 3, "Code<br>Nomenclatural");header.setHTML(0, 4, "Code<br>Taxonomique");header.setText(0, 5, "");header.getCellFormatter().setWidth(0,0,"2%");header.getCellFormatter().setWidth(0,1,"31%");header.getCellFormatter().setWidth(0,2,"31%");header.getCellFormatter().setWidth(0,3,"9%");header.getCellFormatter().setWidth(0,4,"9%");header.getCellFormatter().setWidth(0,5,"18%");header.setCellSpacing(0);header.setCellPadding(2);// Setup the table.table.setCellSpacing(0);table.setBorderWidth(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);}public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender,int pos, String str) {// Recherche informations complementaires :// et Ajout ligneif (pos>=0) {complement=(String) complements.get(pos);element=str;HTTPRequest.asyncGet(serviceBaseUrl+"/NameValid/"+complement,new ResponseTextHandler(){public void onCompletion(String str) {JSONValue jsonValue= JSONParser.parse(str);JSONArray jsonArray;complements.clear();if ((jsonArray = jsonValue.isArray()) != null) {// Nom retenu, Num Nomen nom retenu, Num Taxon, FamilleaddElement(element,complement,((JSONString) jsonArray.get(0)).stringValue(),((JSONString) jsonArray.get(1)).stringValue(),((JSONString) jsonArray.get(2)).stringValue(),((JSONString) jsonArray.get(3)).stringValue());}}});}else {complements.clear();addElement(str," "," "," "," "," ");}}public void addElement(String nom_sel, String num_nom_sel, String nom_ret, String num_nom_ret, String num_taxon, String famille) {int lastOrdre=1;if (table.getRowCount()>0) {lastOrdre=new Integer(table.getText(table.getRowCount()-1,6)).intValue()+1;}count++;HTTPRequest.asyncPost(serviceBaseUrl+"/Inventory/", "identifiant="+user+"&nom_sel="+nom_sel+"&num_nom_sel="+num_nom_sel+"&nom_ret="+nom_ret+"&num_nom_ret="+num_nom_ret+"&num_taxon="+num_taxon+"&famille="+famille+"&ordre="+lastOrdre,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;}if (startIndex < 0) {startIndex = 0;}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,6);count--;HTTPRequest.asyncPost(serviceBaseUrl+"/Inventory/"+user+"/"+str, "action=DELETE",new ResponseTextHandler(){public void onCompletion(String str) {if ((count%VISIBLE_TAXON_COUNT)==0) {startIndex=count-VISIBLE_TAXON_COUNT;}if (startIndex < 0) {startIndex = 0;}update();}});}}}private void getUser() {HTTPRequest.asyncGet(serviceBaseUrl+"/User/",new ResponseTextHandler(){public void onCompletion(String str) {JSONValue jsonValue= JSONParser.parse(str);JSONString jsonString;if ((jsonString = jsonValue.isString()) != null) {user = jsonString.stringValue();}getCount();}});}private void getCount() {// Recherche derniere ligne ... (il y a une autre stratégie pour la calculer si le resultat n'arrive pas assez vite)HTTPRequest.asyncGet(serviceBaseUrl+"/InventoryList/"+user+"/",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;}if (startIndex < 0) {startIndex = 0;}update();}}});}private void update() {// TODO : optimisation : ne supprimer que les lignes qui ne seront pas alimentes .navBar.gotoFirst.setEnabled(false);navBar.gotoPrev.setEnabled(false);navBar.gotoNext.setEnabled(false);navBar.gotoEnd.setEnabled(false);setStatusText("Patientez ...");HTTPRequest.asyncGet(serviceBaseUrl+"/InventoryList/"+user+"/"+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);}int j=0;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());// Case a cochertable.setWidget(row,0,new CheckBox());// Nom saisitable.setText(row,1,((JSONString) jsonArrayNested.get(0)).stringValue());// Nom retenutable.setText(row,2,((JSONString) jsonArrayNested.get(2)).stringValue());// Num nomenclaturaltable.setText(row,3,((JSONString) jsonArrayNested.get(1)).stringValue());// Num Taxonomiquetable.setText(row,4,((JSONString) jsonArrayNested.get(4)).stringValue());// Familletable.setText(row,5,((JSONString) jsonArrayNested.get(5)).stringValue());// Numero d'ordretable.setText(row,6,((JSONString) jsonArrayNested.get(6)).stringValue());table.getCellFormatter().setVisible(row,6,true);table.getFlexCellFormatter().setWidth(row,0,"2%");table.getFlexCellFormatter().setWidth(row,1,"31%");table.getFlexCellFormatter().setWidth(row,2,"31%");table.getFlexCellFormatter().setWidth(row,3,"9%");table.getFlexCellFormatter().setWidth(row,4,"9%");table.getFlexCellFormatter().setWidth(row,5,"18%");j++;}}// Calcul nombre d'enregistrement total (c'est un doublon, c'est normal ...)if (i<VISIBLE_TAXON_COUNT) {count = startIndex+i;}// Navigation// Premiere pageif (startIndex<VISIBLE_TAXON_COUNT ) {navBar.gotoPrev.setEnabled(false);navBar.gotoFirst.setEnabled(false);navBar.gotoNext.setEnabled(true);navBar.gotoEnd.setEnabled(true);if (count < VISIBLE_TAXON_COUNT) {setStatusText((startIndex + 1) + " - " + count );}else {setStatusText((startIndex + 1) + " - " + (startIndex + VISIBLE_TAXON_COUNT));}}// Derniere pageelse {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);}// Page normaleelse {navBar.gotoPrev.setEnabled(true);navBar.gotoFirst.setEnabled(true);navBar.gotoNext.setEnabled(true);navBar.gotoEnd.setEnabled(true);setStatusText((startIndex + 1) + " - " + (startIndex + VISIBLE_TAXON_COUNT));}}}// Tableau vide (TODO : despaguettiser)if (j==0) {navBar.gotoPrev.setEnabled(false);navBar.gotoFirst.setEnabled(false);navBar.gotoNext.setEnabled(false);navBar.gotoEnd.setEnabled(false);setStatusText(0 + " - " + 0);}}});}private String getServiceBaseUrl() {Dictionary theme = Dictionary.getDictionary("Parameters");return theme.get("serviceBaseUrl");}}