New file |
0,0 → 1,264 |
/* |
* 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.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.SourcesTableEvents; |
import com.google.gwt.user.client.ui.TableListener; |
import com.google.gwt.user.client.ui.VerticalPanel; |
|
/** |
* A tree displaying a set of email folders. |
*/ |
public class LocationList extends Composite { |
|
|
private static final int VISIBLE_LOCATION_COUNT = 15; |
private static final String VALUE_UNKNOWN = "Inconnues"; |
|
private Grid header = new Grid(1, 1); |
|
private Grid selector = new Grid(1, 1); |
|
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"; |
|
// Tous selectionné |
private int selectedRow = -1; |
|
private Mediator mediator = null; |
|
|
public LocationList(Mediator med) { |
|
mediator=med; |
|
mediator.registerLocationList(this); |
|
user=mediator.getUser(); |
serviceBaseUrl = mediator.getServiceBaseUrl(); |
|
|
// Mise en forme du header |
|
header.setCellSpacing(0); |
header.setCellPadding(2); |
header.setWidth("100%"); |
|
header.setStyleName("location-ListHeader"); |
|
|
header.setHTML(0, 0, "Localités "); // yeah ! |
|
header.getCellFormatter().setWidth(0, 0, "100%"); |
|
|
// Mise en forme du selecteur |
|
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, "location-SelectedRow"); |
mediator.onLocationSelected("all"); |
} |
|
}); |
|
selector.setStyleName("location-ListElement"); |
|
|
// Mise en forme de la table. |
|
table.setCellSpacing(0); |
table.setBorderWidth(0); |
table.setCellPadding(2); |
table.setWidth("100%"); |
|
table.setStyleName("location-ListElement"); |
|
// Mise en forme barre navigation |
|
outer.add(header); |
inner.add(selector); |
inner.add(table); |
inner.setStyleName("location-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 loc=table.getText(row,cell); |
if (loc.compareTo(VALUE_UNKNOWN)!=0) { |
mediator.onLocationSelected(table.getText(row,cell)); |
} |
else { |
mediator.onLocationSelected("000null"); |
} |
|
} |
|
}); |
|
styleRow(selectedRow, false); |
selector.getRowFormatter().addStyleName(0, "location-SelectedRow"); |
mediator.onLocationSelected("all"); |
|
update(); |
|
initWidget(outer); |
|
|
} |
|
|
|
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, "location-SelectedRow"); |
if (selected) |
table.getRowFormatter().addStyleName(row, "location-SelectedRow"); |
else |
if (row < table.getRowCount()) { |
table.getRowFormatter().removeStyleName(row, "location-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() { |
|
|
// TODO : ne pas recreer la table a chaque fois ... : parcouris le retour, le comparer au present |
// et inserer ou supprimer s'il le faut. |
|
// TODO : ou alors prevoir un update pour les ajouts (forcemment à la fin) et un update pour les suppressions ... |
// Sauf qu'il y a les chgts de pages ... : oui, la un fait un update normal ... |
|
// TODO : despaghettiser |
|
HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryLocationList/" + user + "/" |
+ startIndex + "/" + VISIBLE_LOCATION_COUNT, |
|
new ResponseTextHandler() { |
|
public void onCompletion(String str) { |
|
JSONValue jsonValue = JSONParser.parse(str); |
JSONArray jsonArray; |
JSONArray jsonArrayNested; |
|
for (int i = table.getRowCount() - 1; i >= 0; i--) { |
table.removeRow(i); |
} |
|
if (location.compareTo("all")==0) { |
styleRow(selectedRow, false); |
selector.getRowFormatter().addStyleName(0, "location-SelectedRow"); |
} |
|
|
if ((jsonArray = jsonValue.isArray()) != null) { |
int arraySize = jsonArray.size(); |
for (int i = 0; i < arraySize; ++i) { |
if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) { |
int row = table.insertRow(table.getRowCount()); |
// Lieu |
|
String loc=((JSONString)jsonArrayNested.get(0)).stringValue(); |
|
if (loc.compareTo("000null")!=0) { |
table.setText(row, 0,loc); |
} |
else { |
table.setText(row, 0,VALUE_UNKNOWN); |
} |
|
if (loc.compareTo(location)==0) { |
styleRow(row, true); |
} |
|
table.getFlexCellFormatter().setWidth(row, 0, "100%"); |
} |
|
} |
} |
|
} |
}); |
|
} |
|
public void setLocation(String location) { |
this.location = location; |
} |
|
|
|
|
} |