Rev 2 | 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(" ");}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 headerheader.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 lignecount++;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 totalif (i<VISIBLE_TAXON_COUNT) {count = startIndex+i;}// NavigationsetStatusText((startIndex + 1) + " - " + (startIndex + VISIBLE_TAXON_COUNT));// Premiere pageif (startIndex<VISIBLE_TAXON_COUNT) {navBar.gotoPrev.setEnabled(false);navBar.gotoFirst.setEnabled(false);navBar.gotoNext.setEnabled(true);navBar.gotoEnd.setEnabled(true);}// 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);}else {navBar.gotoPrev.setEnabled(true);navBar.gotoFirst.setEnabled(true);navBar.gotoNext.setEnabled(true);navBar.gotoEnd.setEnabled(true);}}}}});}}