Rev 26 | 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.http.client.URL;
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.Button;
import com.google.gwt.user.client.ui.ClickListener;
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.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.SourcesTableEvents;
import com.google.gwt.user.client.ui.TableListener;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* A tree displaying a set of email folders.
*/
public class StationList extends Composite {
// Debut Barre de navigation
private class NavBar extends Composite implements ClickListener {
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() {
HorizontalPanel bar = new HorizontalPanel();
bar.setStyleName("navbar");
status.setStyleName("status");
bar.add(status);
bar.setCellHorizontalAlignment(status, HasHorizontalAlignment.ALIGN_RIGHT);
bar.setCellVerticalAlignment(status, HasVerticalAlignment.ALIGN_MIDDLE);
bar.setCellWidth(status, "100%");
bar.add(gotoFirst);
bar.add(gotoPrev);
bar.add(gotoNext);
bar.add(gotoEnd);
initWidget(bar);
}
public void onClick(Widget sender) {
if (sender == gotoNext) {
// Move forward a page.
startIndex += VISIBLE_STATION_COUNT;
if (startIndex >= count)
startIndex -= VISIBLE_STATION_COUNT;
} else {
if (sender == gotoPrev) {
// Move back a page.
startIndex -= VISIBLE_STATION_COUNT;
if (startIndex < 0)
startIndex = 0;
} else {
if (sender == gotoEnd) {
gotoEnd();
} else {
if (sender == gotoFirst) {
startIndex = 0;
}
}
}
}
update();
}
}
// Fin Barre de navigation
private static final int VISIBLE_STATION_COUNT = 10;
private static final String VALUE_UNKNOWN = "Inconnues";
private Grid header = new Grid(1, 2);
private Grid selector = new Grid(1, 2);
private FlexTable table = new FlexTable();
private VerticalPanel outer = new VerticalPanel();
private VerticalPanel inner = new VerticalPanel();
private int startIndex = 0;
private String user;
private String serviceBaseUrl = null;
private String location = "all";
private String station = "all";
private NavBar navBar=null;
private int count = 65000;
// Tous selectionn�
private int selectedRow = -1;
private Mediator mediator = null;
public StationList(Mediator med) {
mediator=med;
mediator.registerStationList(this);
user=mediator.getUser();
serviceBaseUrl = mediator.getServiceBaseUrl();
navBar = new NavBar();
// Mise en forme du header
header.setCellSpacing(0);
header.setCellPadding(2);
header.setWidth("100%");
header.setStyleName("station-ListHeader");
header.setWidget(0, 1,navBar);
selector.setCellSpacing(0);
selector.setCellPadding(0);
selector.setWidth("100%");
selector.setHTML(0, 0, "Toutes");
selector.getCellFormatter().setWidth(0, 0, "100%");
// Hook up events.
selector.addTableListener(new TableListener () {
public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
styleRow(selectedRow, false);
selector.getRowFormatter().addStyleName(0, "station-SelectedRow");
mediator.onStationSelected("all");
station="all";
}
});
selector.setStyleName("station-ListElement");
// Mise en forme du contenu
table.setCellSpacing(0);
table.setBorderWidth(0);
table.setCellPadding(2);
table.setWidth("100%");
table.setStyleName("station-ListElement");
outer.add(header);
inner.add(selector); // Toutes station
inner.add(table);
inner.setStyleName("station-List");
inner.setWidth("100%");
outer.setWidth("100%");
outer.add(inner);
// Hook up events.
table.addTableListener(new TableListener () {
public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
selectRow(row);
String astation=table.getText(row,cell);
if (astation.compareTo(VALUE_UNKNOWN)!=0) {
station=astation;
mediator.onStationSelected(astation);
}
else {
station="000null";
mediator.onStationSelected("000null");
}
}
});
styleRow(selectedRow, false);
selector.getRowFormatter().addStyleName(0, "station-SelectedRow");
initWidget(outer);
}
/**
* Recherche nombre d'enregistrement pour l'utilisateur en cours
*
*
*/
public void updateCount() {
setStatusDisabled();
HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryStationList/" + user + "/" + URL.encodeComponent(location) ,
new ResponseTextHandler() {
public void onCompletion(String str) {
JSONValue jsonValue = JSONParser.parse(str);
JSONNumber jsonNumber;
if ((jsonNumber = jsonValue.isNumber()) != null) {
count = (int) jsonNumber.getValue();
update();
}
}
});
}
private void selectRow(int row) {
styleRow(selectedRow, false);
styleRow(row, true);
selectedRow = row;
}
private void styleRow(int row, boolean selected) {
if (row != -1) {
selector.getRowFormatter().removeStyleName(0, "station-SelectedRow");
if (selected)
table.getRowFormatter().addStyleName(row, "station-SelectedRow");
else
if (row < table.getRowCount()) {
table.getRowFormatter().removeStyleName(row, "station-SelectedRow");
}
}
}
/**
*
* Mise a jour de l'affichage, � partir des donn�es d'inventaire deja
* saisies. La valeur de this.startIndex permet de determiner quelles
* donn�es seront affich�es
*
*/
public void update() {
setStatusDisabled();
HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryStationList/" + user + "/" + URL.encodeComponent(location) + "/"
+ startIndex + "/" + VISIBLE_STATION_COUNT,
new ResponseTextHandler() {
public void onCompletion(String str) {
JSONValue jsonValue = JSONParser.parse(str);
JSONArray jsonArray;
JSONArray jsonArrayNested;
int row=0;
int i=0;
if ((jsonArray = jsonValue.isArray()) != null) {
int arraySize = jsonArray.size();
for (i = 0; i < arraySize; ++i) {
if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) {
if (i>=table.getRowCount()) {
row = table.insertRow(table.getRowCount());
}
else {
row = i;
}
String astation=Util.toCelString(((JSONString)jsonArrayNested.get(0)).toString());
if (astation.compareTo("000null")!=0) {
table.setText(row, 0,astation);
}
else {
table.setText(row, 0,VALUE_UNKNOWN);
}
if (astation.compareTo(station)==0) {
styleRow(row, true);
}
else {
styleRow(row, false);
}
table.getFlexCellFormatter().setWidth(row, 0, "100%");
}
}
}
if (station.compareTo("all")==0) {
selector.getRowFormatter().addStyleName(0, "station-SelectedRow");
}
// Suppression fin ancien affichage
if (i<table.getRowCount()) {
for (int j = table.getRowCount() -1 ; j >= i; j--) {
table.removeRow(j);
}
}
setStatusEnabled();
}
});
}
public void setLocation(String location) {
this.location = location;
}
/*
* Positionnement index de parcours (this.startIndex) pour affichage de la
* derni�re page
*
* @param
* @return void
*/
private void gotoEnd() {
if ((count == 0) || (count % VISIBLE_STATION_COUNT) > 0) {
startIndex = count - (count % VISIBLE_STATION_COUNT);
} else {
startIndex = count - VISIBLE_STATION_COUNT;
}
}
/**
* Affichage message d'attente et d�sactivation navigation
*
* @param
* @return void
*/
private void setStatusDisabled() {
navBar.gotoFirst.setEnabled(false);
navBar.gotoPrev.setEnabled(false);
navBar.gotoNext.setEnabled(false);
navBar.gotoEnd.setEnabled(false);
navBar.status.setText("Patientez ...");
}
/**
* Affichage numero de page et gestion de la navigation
*
*/
private void setStatusEnabled() {
// Il y a forcemment un disabled avant d'arriver ici
if (count > 0) {
if (startIndex >= VISIBLE_STATION_COUNT) { // Au dela de la
// premiere page
navBar.gotoPrev.setEnabled(true);
navBar.gotoFirst.setEnabled(true);
if (startIndex < (count - VISIBLE_STATION_COUNT)) { // Pas la
// derniere
// page
navBar.gotoNext.setEnabled(true);
navBar.gotoEnd.setEnabled(true);
navBar.status.setText((startIndex + 1) + " - "
+ (startIndex + VISIBLE_STATION_COUNT) + " sur " + count );
} else { // Derniere page
navBar.status.setText((startIndex + 1) + " - " + count + " sur " + count );
}
} else { // Premiere page
if (count > VISIBLE_STATION_COUNT) { // Des pages derrieres
navBar.gotoNext.setEnabled(true);
navBar.gotoEnd.setEnabled(true);
navBar.status.setText((startIndex + 1) + " - "
+ (startIndex + VISIBLE_STATION_COUNT) + " sur " + count);
} else {
navBar.status.setText((startIndex + 1) + " - " + count + " sur " + count);
}
}
}
else { // Pas d'inventaire, pas de navigation
navBar.status.setText("0 - 0 sur 0");
}
}
public void setUser(String user) {
this.user = user;
}
public void setStation(String station) {
this.station = station;
}
}