15,7 → 15,6 |
*/ |
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; |
38,29 → 37,31 |
import com.google.gwt.user.client.ui.HasHorizontalAlignment; |
import com.google.gwt.user.client.ui.HasVerticalAlignment; |
|
import java.util.Vector; |
|
|
/* Le retour de getUser appelle getCount qui appelle update pour veiller à une initialisation correcte |
|
/* |
* Le retour de getUser appelle getCount qui appelle update pour veiller à une |
* initialisation correcte |
* |
*/ |
|
public class TaxonList extends Composite implements AutoCompleteAsyncTextBoxListener { |
public class TaxonList extends Composite implements |
AutoCompleteAsyncTextBoxListener { |
|
|
|
// Barre de navigation |
|
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"); |
75,13 → 76,14 |
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.setCellHorizontalAlignment(status, |
HasHorizontalAlignment.ALIGN_RIGHT); |
bar.setCellVerticalAlignment(status, |
HasVerticalAlignment.ALIGN_MIDDLE); |
bar.setCellWidth(status, "100%"); |
|
} |
|
|
public void onClick(Widget sender) { |
if (sender == gotoNext) { |
// Move forward a page. |
88,19 → 90,16 |
startIndex += VISIBLE_TAXON_COUNT; |
if (startIndex >= count) |
startIndex -= VISIBLE_TAXON_COUNT; |
} |
else { |
} else { |
if (sender == gotoPrev) { |
// Move back a page. |
startIndex -= VISIBLE_TAXON_COUNT; |
if (startIndex < 0) |
startIndex = 0; |
} |
else { |
} else { |
if (sender==gotoEnd) { |
gotoEnd(); |
} |
else { |
} else { |
if (sender== gotoFirst) { |
startIndex = 0; |
} |
116,34 → 115,31 |
navBar.status.setText(text); |
} |
|
|
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) { |
public TaxonList() { |
|
|
initAsync(); |
|
// Information complementaire : un tableau associe au retour de l'assistant de saisie |
// Information complementaire : un tableau associe au retour de |
// l'assistant de saisie |
|
complements=comps; |
|
// Mise en forme du header |
|
header.setCellSpacing(0); |
177,7 → 173,6 |
|
navBar.setWidth("100%"); |
|
|
table.setStyleName("taxon-List"); |
|
panel.add(navBar); |
186,46 → 181,45 |
|
initWidget(panel); |
|
|
} |
|
/** |
* Action lancee par la selection d'un nom dans l'assistant de saisie. Lance la recherche d'informations |
* complémentaires (famille, numero nomenclaturaux etc) et met a jour l'inventaire (addelement()) |
* Action lancee par la selection d'un nom dans l'assistant de saisie. Lance |
* la recherche d'informations complémentaires (famille, numero |
* nomenclaturaux etc) et met a jour l'inventaire (addelement()) |
* |
* @return void |
*/ |
public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender,int pos, String str) { |
public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender, |
final String str,final String value) { |
|
setStatusDisabled(); |
|
// Il y a surement une meilleure facon de faire que de passer par une variable de classe |
// pour atteindre une inner classe |
|
element=str; |
|
// Saisie assistée |
|
if (pos>=0) { |
if (value !=null) { |
|
// Le vecteur complements contient les informations complémentaires associées à un nom. |
|
complement=(String) complements.get(pos); |
|
HTTPRequest.asyncGet(serviceBaseUrl+"/NameValid/"+complement, |
HTTPRequest.asyncGet(serviceBaseUrl + "/NameValid/" + value, |
new ResponseTextHandler(){ |
|
public void onCompletion(String str) { |
public void onCompletion(String strcomplete) { |
|
JSONValue jsonValue= JSONParser.parse(str); |
JSONValue jsonValue = JSONParser.parse(strcomplete); |
JSONArray jsonArray; |
|
complements.clear(); |
|
if ((jsonArray = jsonValue.isArray()) != null) { |
// Nom retenu, Num Nomen nom retenu, Num Taxon, Famille |
addElement(element,complement,((JSONString) jsonArray.get(0)).stringValue(), |
((JSONString) jsonArray.get(1)).stringValue(),((JSONString) jsonArray.get(2)).stringValue(), |
((JSONString) jsonArray.get(3)).stringValue()); |
// Nom retenu, Num Nomen nom retenu, Num Taxon, |
// Famille |
addElement(str, value, |
((JSONString) jsonArray.get(0)) |
.stringValue(), |
((JSONString) jsonArray.get(1)) |
.stringValue(), |
((JSONString) jsonArray.get(2)) |
.stringValue(), |
((JSONString) jsonArray.get(3)) |
.stringValue()); |
} |
} |
|
233,34 → 227,42 |
} |
// Saisie libre |
else { |
complements.clear(); |
|
addElement(element," "," "," "," "," "); |
addElement(str, " ", " ", " ", " ", " "); |
} |
} |
|
/** |
* Ajoute un element à l'inventaire |
* @param nom_sel : nom selectionne |
* @param num_nom_sel : numero nomenclatural nom selectionne |
* @param nom_ret : nom retenu |
* @param num_nom_ret : numero nomenclaturel nom retenu |
* @param num_taxon : numero taxonomique |
* @param famille : famille |
* |
* @param nom_sel : |
* nom selectionne |
* @param num_nom_sel : |
* numero nomenclatural nom selectionne |
* @param nom_ret : |
* nom retenu |
* @param num_nom_ret : |
* numero nomenclaturel nom retenu |
* @param num_taxon : |
* numero taxonomique |
* @param famille : |
* famille |
*/ |
|
public void addElement(String nom_sel, String num_nom_sel, String nom_ret, String num_nom_ret, String num_taxon, String famille) { |
public void addElement(String nom_sel, String num_nom_sel, String nom_ret, |
String num_nom_ret, String num_taxon, String famille) { |
|
// Calcul du nouveau numéro d'ordre |
|
/* int order=1; |
if (table.getRowCount()>0) { |
order=new Integer(table.getText(table.getRowCount()-1,6)).intValue()+1; |
}*/ |
/* |
* int order=1; if (table.getRowCount()>0) { order=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, |
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, |
|
new ResponseTextHandler(){ |
|
276,10 → 278,8 |
* |
*/ |
|
|
public void deleteElement() { |
|
|
setStatusDisabled(); |
boolean checked=false; |
|
289,7 → 289,8 |
checked=true; |
String str=table.getText(i,6); |
count--; |
HTTPRequest.asyncPost(serviceBaseUrl+"/Inventory/"+user+"/"+str, "action=DELETE", |
HTTPRequest.asyncPost(serviceBaseUrl + "/Inventory/" + user |
+ "/" + str, "action=DELETE", |
new ResponseTextHandler(){ |
|
public void onCompletion(String str) { |
307,11 → 308,11 |
|
/** |
* |
* Lancement des initialisations dependantes de réponses asynchrones : le retour d'une demande d'initialisation declanche |
* la demande d'initialisation suivantes |
* user : resultat recherche nom d'utilisateur |
* count : resultat nombre d'enregistrements d'inventaires |
* affichage enregistrements trouvés |
* Lancement des initialisations dependantes de réponses asynchrones : le |
* retour d'une demande d'initialisation declanche la demande |
* d'initialisation suivantes user : resultat recherche nom d'utilisateur |
* count : resultat nombre d'enregistrements d'inventaires affichage |
* enregistrements trouvés |
* |
*/ |
private void initAsync() { |
328,7 → 329,6 |
*/ |
private void getUser() { |
|
|
setStatusDisabled(); |
|
HTTPRequest.asyncGet(serviceBaseUrl+"/User/", |
344,8 → 344,6 |
} |
}); |
|
|
|
} |
|
/** |
372,19 → 370,21 |
} |
|
/** |
* 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 |
* 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 |
* |
*/ |
|
private void update() { |
|
|
setStatusDisabled(); |
|
// TODO : optimisation : ne supprimer que les lignes qui ne seront pas alimentes . |
// TODO : optimisation : ne supprimer que les lignes qui ne seront pas |
// alimentes . |
|
HTTPRequest.asyncGet(serviceBaseUrl+"/InventoryList/"+user+"/"+startIndex+"/"+VISIBLE_TAXON_COUNT, |
HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryList/" + user + "/" |
+ startIndex + "/" + VISIBLE_TAXON_COUNT, |
|
new ResponseTextHandler(){ |
|
399,7 → 399,6 |
table.removeRow(i); |
} |
|
|
int j=0; |
if ((jsonArray = jsonValue.isArray()) != null) { |
for (int i = 0; i < jsonArray.size(); ++i) { |
408,26 → 407,35 |
// Case a cocher |
table.setWidget(row,0,new CheckBox()); |
// Nom saisi |
table.setText(row,1,((JSONString) jsonArrayNested.get(0)).stringValue()); |
table.setText(row, 1, ((JSONString) jsonArrayNested |
.get(0)).stringValue()); |
// Nom retenu |
table.setText(row,2,((JSONString) jsonArrayNested.get(2)).stringValue()); |
table.setText(row, 2, ((JSONString) jsonArrayNested |
.get(2)).stringValue()); |
// Num nomenclatural |
table.setText(row,3,((JSONString) jsonArrayNested.get(1)).stringValue()); |
table.setText(row, 3, ((JSONString) jsonArrayNested |
.get(1)).stringValue()); |
// Num Taxonomique |
table.setText(row,4,((JSONString) jsonArrayNested.get(4)).stringValue()); |
table.setText(row, 4, ((JSONString) jsonArrayNested |
.get(4)).stringValue()); |
// Famille |
table.setText(row,5,((JSONString) jsonArrayNested.get(5)).stringValue()); |
table.setText(row, 5, ((JSONString) jsonArrayNested |
.get(5)).stringValue()); |
// Numero d'ordre |
table.setText(row,6,((JSONString) jsonArrayNested.get(6)).stringValue()); |
table.setText(row, 6, ((JSONString) jsonArrayNested |
.get(6)).stringValue()); |
|
table.getCellFormatter().setVisible(row,6,false); |
|
table.getFlexCellFormatter().setWidth(row,0,"2%"); |
table.getFlexCellFormatter().setWidth(row,1,"31%"); |
table.getFlexCellFormatter().setWidth(row,2,"31%"); |
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%"); |
table.getFlexCellFormatter() |
.setWidth(row, 5, "18%"); |
j++; |
} |
|
449,12 → 457,11 |
Dictionary theme = Dictionary.getDictionary("Parameters"); |
return theme.get("serviceBaseUrl"); |
|
|
} |
|
|
/** |
* Affichage message d'attente et désactivation navigation |
* |
* @param |
* @return void |
*/ |
469,7 → 476,6 |
setStatusText("Patientez ..."); |
} |
|
|
/** |
* Affichage numero de page et gestion de la navigation |
* |
481,39 → 487,41 |
|
if (count > 0 ) { |
|
if (startIndex >= VISIBLE_TAXON_COUNT) { // Au dela de la premiere page |
if (startIndex >= VISIBLE_TAXON_COUNT) { // Au dela de la |
// premiere page |
navBar.gotoPrev.setEnabled(true); |
navBar.gotoFirst.setEnabled(true); |
if (startIndex<(count-VISIBLE_TAXON_COUNT)) { // Pas la derniere page |
if (startIndex < (count - VISIBLE_TAXON_COUNT)) { // Pas la |
// derniere |
// page |
navBar.gotoNext.setEnabled(true); |
navBar.gotoEnd.setEnabled(true); |
setStatusText((startIndex + 1) + " - " + (startIndex + VISIBLE_TAXON_COUNT)); |
} |
else { // Derniere page |
setStatusText((startIndex + 1) + " - " |
+ (startIndex + VISIBLE_TAXON_COUNT)); |
} else { // Derniere page |
setStatusText((startIndex + 1) + " - " + count); |
} |
} |
else { // Premiere page |
} else { // Premiere page |
if (count > VISIBLE_TAXON_COUNT) { // Des pages derrieres |
navBar.gotoNext.setEnabled(true); |
navBar.gotoEnd.setEnabled(true); |
setStatusText((startIndex + 1) + " - " + (startIndex + VISIBLE_TAXON_COUNT)); |
} |
else { |
setStatusText((startIndex + 1) + " - " |
+ (startIndex + VISIBLE_TAXON_COUNT)); |
} else { |
setStatusText((startIndex + 1) + " - " + count); |
} |
} |
} |
|
|
else { // Pas d'inventaire, pas de navigation |
setStatusText(0 + " - " + 0); |
} |
} |
|
|
/** |
* Positionnement index de parcours (this.startIndex) pour affichage de la dernière page |
* Positionnement index de parcours (this.startIndex) pour affichage de la |
* dernière page |
* |
* @param |
* @return void |
*/ |
522,8 → 530,7 |
|
if ( (count==0) || (count%VISIBLE_TAXON_COUNT)>0) { |
startIndex=count-(count%VISIBLE_TAXON_COUNT); |
} |
else { |
} else { |
startIndex=count-VISIBLE_TAXON_COUNT; |
} |
|