Rev 29 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/**
David Delon david.delon@clapas.net 2007
*/
/*
* EntryView.java (Composite de Panel)
*
* Cas d'utilisation :
* Saisie assistee (completion nom et completion commune) de releves.
* L'identification n'est pas obligatoire
*
* 1 : L'utilisateur saisit a minima un nom de plante
* 1: Le nom de plante provient d'une application externe : il est deduit du nuremo nomenclatural transmis en historique
* 2 : Le programme assiste la saisie de nom de plante ou de localite par interrogation du systeme distant
* 3 : L'utilisateur choisi le type de mise (ajout ou modification)
* 3 : L'utilisateur valide sa saisie
* 4 : Le programme transmet au systeme distant la nouvelle saisie pour l'identifiant en cours
* 5 : Le programme transmet au systeme local un evenement annoncant une nouvelle saisie
*
*
* Affichage detail d'un observation
* 1 : Le programme affiche les donnees d'inventaire pour l'identifiant enregistre et pour le numero d'ordre transmis
*
*/
// TODO : onvalidate dans mediator
package org.tela_botanica.client;
import java.util.Date;
import net.mygwt.ui.client.Style;
import net.mygwt.ui.client.event.BaseEvent;
import net.mygwt.ui.client.event.SelectionListener;
import net.mygwt.ui.client.widget.Button;
import net.mygwt.ui.client.widget.ContentPanel;
import net.mygwt.ui.client.widget.WidgetContainer;
import net.mygwt.ui.client.widget.layout.BorderLayoutData;
import net.mygwt.ui.client.widget.layout.FlowLayout;
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.History;
import com.google.gwt.user.client.ResponseTextHandler;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.Grid;
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.KeyboardListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class EntryView {
private ContentPanel panel=null;
private NameAssistant nameAssistant = null;
private LocationAssistant locationAssistant = null;
private TextBox date = new TextBox();
private TextBox lieudit = new TextBox();
private TextBox station = new TextBox();
private TextBox milieu = new TextBox();
private TextBox comment = new TextBox();
private Button dateSelector = new Button("...");
boolean visible=false;
private Mediator mediator=null;
private String user= null;
private String ordre =null;
private CalendarWidget calendar = null; // Lazy instantiation
private PopupPanel choicesPopup = null; // Lazy instantiation
public EntryView(final Mediator med) {
Grid observation = new Grid(5,4);
// Formatage affichage
for (int i=0; i<5;i++) {
observation.getCellFormatter().setWidth(i, 0, "3%");
observation.getCellFormatter().setWidth(i, 1, "47%");
observation.getCellFormatter().setWidth(i, 2, "3%");
observation.getCellFormatter().setWidth(i, 3, "47%");
}
mediator=med;
user=mediator.getUser();
// Declaration des elements du dialogue de saisie aupres du mediator
mediator.registerDate(date);
mediator.registerComment(comment);
mediator.registerStation(station);
mediator.registerMilieu(milieu);
mediator.registerLieudit(lieudit);
panel= new ContentPanel(Style.HEADER);
panel.setLayout(new FlowLayout());
panel.setText("Nouvelle observation");
VerticalPanel outer = new VerticalPanel();
// Name assistant et location assistant : widget auto-completion sur nom scientifique ou commune
nameAssistant = new NameAssistant(mediator);
locationAssistant = new LocationAssistant(mediator);
// Saisie Commune
observation.setHTML(0,0,"Commune: ");
observation.setWidget(0,1,locationAssistant);
locationAssistant.setWidth("100%");
// Saisie lieu-dit
observation.setHTML(0,2,"Lieu-dit: ");
observation.setWidget(0,3,lieudit);
lieudit.setWidth("100%");
lieudit.addKeyboardListener( new KeyboardListener() {
public void onKeyDown(Widget arg0, char arg1, int arg2) {
if(arg1 == KEY_ENTER)
{
onValidateTextBox(lieudit);
}
}
public void onKeyUp(Widget arg0, char arg1, int arg2) { }
public void onKeyPress(Widget arg0, char arg1, int arg2) { }
}
);
// Saisie (station)
observation.setHTML(1,0,"Station: ");
observation.setWidget(1,1,station);
station.setWidth("100%");
// Validation par entree sur cette zone de texte
station.addKeyboardListener( new KeyboardListener() {
public void onKeyDown(Widget arg0, char arg1, int arg2) {
if(arg1 == KEY_ENTER)
{
onValidateTextBox(station);
}
}
public void onKeyUp(Widget arg0, char arg1, int arg2) { }
public void onKeyPress(Widget arg0, char arg1, int arg2) { }
}
);
// Saisie (station)
observation.setHTML(1,2,"Milieu: ");
observation.setWidget(1,3,milieu);
milieu.setWidth("100%");
// Validation par entree sur cette zone de texte
milieu.addKeyboardListener( new KeyboardListener() {
public void onKeyDown(Widget arg0, char arg1, int arg2) {
if(arg1 == KEY_ENTER)
{
onValidateTextBox(milieu);
}
}
public void onKeyUp(Widget arg0, char arg1, int arg2) { }
public void onKeyPress(Widget arg0, char arg1, int arg2) { }
}
);
// Selecteur de Date
// Releve
dateSelector.addSelectionListener(
new SelectionListener() {
public void widgetSelected(BaseEvent be) {
if (visible) {
visible=false;
choicesPopup.hide();
}
else {
visible=true;
if (calendar==null) { // Lazy instantiation
calendar = new CalendarWidget();
choicesPopup = new PopupPanel(true);
choicesPopup.add(calendar);
calendar.addChangeListener(new ChangeListener() {
public void onChange(Widget sender) {
Date dateSelected=calendar.getDate();
date.setText(dateSelected.getDate()+"/"+(dateSelected.getMonth()+1)+"/"+(dateSelected.getYear()+1900));
visible=false;
choicesPopup.hide();
}
});
}
choicesPopup.show();
choicesPopup.setPopupPosition(dateSelector.getAbsoluteLeft(),
dateSelector.getAbsoluteTop() - dateSelector.getOffsetHeight() - choicesPopup.getOffsetHeight());
choicesPopup.setWidth(dateSelector.getOffsetWidth() + "px");
}
}
});
// Saisie Espece
observation.setHTML(3,0,"Espèce: ");
observation.setWidget(3,1,nameAssistant);
nameAssistant.setWidth("100%");
observation.setHTML(2,0,"Date: ");
HorizontalPanel datePanel = new HorizontalPanel();
datePanel.add(date);
datePanel.add(dateSelector);
observation.setWidget(2,1,datePanel);
// Saisie date
// Validation par entree sur cette zone de texte
date.addKeyboardListener( new KeyboardListener() {
public void onKeyDown(Widget arg0, char arg1, int arg2) {
if(arg1 == KEY_ENTER)
{
onValidateTextBox(date);
}
}
public void onKeyUp(Widget arg0, char arg1, int arg2) { }
public void onKeyPress(Widget arg0, char arg1, int arg2) { }
}
);
// Saisie Commentaire
observation.setHTML(4,0,"Notes: ");
observation.setWidget(4,1,comment);
comment.setWidth("100%");
// Validation par entree sur cette zone de texte
comment.addKeyboardListener( new KeyboardListener() {
public void onKeyDown(Widget arg0, char arg1, int arg2) {
if(arg1 == KEY_ENTER)
{
onValidateTextBox(comment);
}
}
public void onKeyUp(Widget arg0, char arg1, int arg2) { }
public void onKeyPress(Widget arg0, char arg1, int arg2) { }
}
);
Button validButton=new Button("OK",
new SelectionListener() {
public void widgetSelected(BaseEvent be) {
// Numero ordre vide : ajout d'une observation
if (ordre==null) {
mediator.onAddInventoryItem();
panel.setText("Nouvelle observation");
}
else {
mediator.onModifyInventoryItem(ordre);
panel.setText("Modification de l'observation n°: "+ordre);
}
}
}
);
observation.setWidget(4,3,validButton);
HorizontalPanel actionPanel= new HorizontalPanel();
// actionPanel.add(validButton);
observation.setWidth("100%");
outer.add(observation);
outer.setCellWidth(observation, "100%");
outer.setSpacing(10);
outer.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
outer.add(actionPanel);
outer.setWidth("100%");
panel.add(outer);
HorizontalPanel inner=new HorizontalPanel();
Button newButton=new Button("Clear",
// Init
new SelectionListener() {
public void widgetSelected(BaseEvent be) {
clear();
}
}
);
inner.add(newButton);
inner.setWidth("100%");
panel.getHeader().addWidget(inner);
WidgetContainer center=mediator.getCenterContainer();
BorderLayoutData centerData = new BorderLayoutData(Style.NORTH, .27f, 150, 300);
center.add(panel,centerData);
// Initialisation si provenance d'un lien
if (History.getToken().length()>0) {
final String anum=History.getToken();
HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Name/" + anum,
new ResponseTextHandler() {
public void onCompletion(String strcomplete) {
JSONValue jsonValue = JSONParser.parse(strcomplete);
JSONArray jsonArray;
if ((jsonArray = jsonValue.isArray()) != null) {
String aname = Util.toCelString(((JSONString) jsonArray.get(0)).toString());
// Nom
if (aname.compareTo("null")!=0) {
nameAssistant.setText(aname);
// Numero nomenclatural
nameAssistant.setValue(anum);
}
}
}
});
}
}
void clear() {
nameAssistant.setText("");
nameAssistant.setValue(null);
locationAssistant.setText("");
locationAssistant.setValue(null); // Null ?
date.setText("");
lieudit.setText("");
station.setText("");
milieu.setText("");
comment.setText("");
ordre=null;
panel.setText("Nouvelle observation");
}
/*
* Numero d'ordre du releve affiche + mise à jour bouton
*
*/
public void setOrdre(String ordre) {
this.ordre = ordre;
if (ordre==null) {
panel.setText("Nouvelle observation");
}
else {
panel.setText("Modification de l'observation n°: "+ordre);
}
}
/*
* Numero d'ordre du releve affiche
*
*/
public String getOrdre() {
return this.ordre;
}
// Validation par entree sur cette zone de texte
private void onValidateTextBox(TextBox textbox) {
if (ordre==null) {
// Numero ordre vide : ajout d'une observation
mediator.onAddInventoryItem();
textbox.setText("");
panel.setText("Nouvelle observation");
}
else {
// Modification d'une observation
mediator.onModifyInventoryItem(ordre);
panel.setText("Modification de l'observation n°: "+ordre);
}
}
/**
* Mise a jour de l'affichage a partir de donnees deja saisie
*
*/
public void update() {
HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Inventory/" + user + "/" + ordre,
new ResponseTextHandler() {
public void onCompletion(String str) {
JSONValue jsonValue = JSONParser.parse(str);
JSONArray jsonArray;
if ((jsonArray = jsonValue.isArray()) != null) {
// Nom saisi
nameAssistant.setText(Util.toCelString(((JSONString) jsonArray.get(0)).toString()));
// Numero nomenclatural
String ann=((JSONString) jsonArray .get(3)).stringValue();
if (ann.compareTo("0")!=0) {
nameAssistant.setValue(ann);
mediator.getInfoPopup().setImageUrl(ann);
}
else {
nameAssistant.setValue(null);
}
// Commune
String aloc=Util.toCelString(((JSONString) jsonArray .get(6)).toString());
if (aloc.compareTo("000null")!=0) {
locationAssistant.setText(aloc);
}
else {
locationAssistant.setText("");
}
// Departement
String adep=Util.toCelString(((JSONString) jsonArray .get(7)).toString());
if (adep.compareTo("000null")!=0) {
locationAssistant.setValue(adep);
}
else {
locationAssistant.setValue(null);
}
String adate=((JSONString) jsonArray .get(9)).stringValue();
// Date
if (adate.compareTo("0000-00-00 00:00:00")!=0) {
date.setText(adate);
}
else {
date.setText("");
}
String alieudit=Util.toCelString(((JSONString) jsonArray .get(10)).toString());
// Lieudit
if (alieudit.compareTo("000null")!=0) {
lieudit.setText(alieudit);
}
else {
lieudit.setText("");
}
String astation=Util.toCelString(((JSONString) jsonArray .get(11)).toString());
// Station
if (astation.compareTo("000null")!=0) {
station.setText(astation);
}
else {
station.setText("");
}
String amilieu=Util.toCelString(((JSONString) jsonArray .get(12)).toString());
// Milieu
if (amilieu.compareTo("000null")!=0) {
milieu.setText(amilieu);
}
else {
milieu.setText("");
}
String acomment=Util.toCelString(((JSONString) jsonArray .get(13)).toString());
// Notes
if (acomment.compareTo("null")!=0) {
comment.setText(acomment);
}
else {
comment.setText("");
}
}
}
});
}
public void setUser(String user) {
this.user = user;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.2 2008-01-30 08:55:40 ddelon
* fin mise en place mygwt
*
* Revision 1.1 2008-01-02 21:26:04 ddelon
* mise en place mygwt
*
* Revision 1.8 2007-12-22 14:48:53 ddelon
* Documentation et refactorisation
*
* Revision 1.7 2007-09-17 19:25:34 ddelon
* Documentation
*
* Revision 1.6 2007-06-06 13:29:30 ddelon
* v0.09
*
* Revision 1.5 2007-05-22 14:27:08 ddelon
* reglage modification
*
* Revision 1.4 2007-05-21 21:01:35 ddelon
* Modification comportement boutons
*
*
*/