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 mediatorpackage 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 instantiationprivate PopupPanel choicesPopup = null; // Lazy instantiationpublic EntryView(final Mediator med) {Grid observation = new Grid(5,4);// Formatage affichagefor (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 mediatormediator.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 communenameAssistant = new NameAssistant(mediator);locationAssistant = new LocationAssistant(mediator);// Saisie Communeobservation.setHTML(0,0,"Commune: ");observation.setWidget(0,1,locationAssistant);locationAssistant.setWidth("100%");// Saisie lieu-ditobservation.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 textestation.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 textemilieu.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// RelevedateSelector.addSelectionListener(new SelectionListener() {public void widgetSelected(BaseEvent be) {if (visible) {visible=false;choicesPopup.hide();}else {visible=true;if (calendar==null) { // Lazy instantiationcalendar = 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 Especeobservation.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 textedate.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 Commentaireobservation.setHTML(4,0,"Notes: ");observation.setWidget(4,1,comment);comment.setWidth("100%");// Validation par entree sur cette zone de textecomment.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 observationif (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",// Initnew 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 lienif (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());// Nomif (aname.compareTo("null")!=0) {nameAssistant.setText(aname);// Numero nomenclaturalnameAssistant.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 texteprivate void onValidateTextBox(TextBox textbox) {if (ordre==null) {// Numero ordre vide : ajout d'une observationmediator.onAddInventoryItem();textbox.setText("");panel.setText("Nouvelle observation");}else {// Modification d'une observationmediator.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 saisinameAssistant.setText(Util.toCelString(((JSONString) jsonArray.get(0)).toString()));// Numero nomenclaturalString ann=((JSONString) jsonArray .get(3)).stringValue();if (ann.compareTo("0")!=0) {nameAssistant.setValue(ann);mediator.getInfoPopup().setImageUrl(ann);}else {nameAssistant.setValue(null);}// CommuneString aloc=Util.toCelString(((JSONString) jsonArray .get(6)).toString());if (aloc.compareTo("000null")!=0) {locationAssistant.setText(aloc);}else {locationAssistant.setText("");}// DepartementString 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();// Dateif (adate.compareTo("0000-00-00 00:00:00")!=0) {date.setText(adate);}else {date.setText("");}String alieudit=Util.toCelString(((JSONString) jsonArray .get(10)).toString());// Lieuditif (alieudit.compareTo("000null")!=0) {lieudit.setText(alieudit);}else {lieudit.setText("");}String astation=Util.toCelString(((JSONString) jsonArray .get(11)).toString());// Stationif (astation.compareTo("000null")!=0) {station.setText(astation);}else {station.setText("");}String amilieu=Util.toCelString(((JSONString) jsonArray .get(12)).toString());// Milieuif (amilieu.compareTo("000null")!=0) {milieu.setText(amilieu);}else {milieu.setText("");}String acomment=Util.toCelString(((JSONString) jsonArray .get(13)).toString());// Notesif (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***/