Subversion Repositories eFlore/Archives.cel-v1

Rev

Rev 29 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
28 ddelon 1
/**
2
 David Delon david.delon@clapas.net 2007
3
 
4
 */
5
 
6
/*
7
 * EntryView.java  (Composite de Panel)
8
 *
9
 * Cas d'utilisation :
10
 * Saisie assistee (completion nom et completion commune) de releves.
11
 * L'identification n'est pas obligatoire
12
 *
13
 * 1 : L'utilisateur saisit a minima un nom de plante
14
 * 		1: Le nom de plante provient d'une application externe : il est deduit du nuremo nomenclatural transmis en historique
15
 * 2 : Le programme assiste la saisie de nom de plante ou de localite par interrogation du systeme distant
16
 * 3 : L'utilisateur choisi le type de mise (ajout ou modification)
17
 * 3 : L'utilisateur valide sa saisie
18
 * 4 : Le programme transmet au systeme distant la nouvelle saisie pour l'identifiant en cours
19
 * 5 : Le programme transmet au systeme local un evenement annoncant une nouvelle saisie
20
 *
21
 *
22
 * Affichage detail d'un observation
23
 * 1 : Le programme affiche les donnees d'inventaire pour l'identifiant enregistre et pour le numero d'ordre transmis
24
 *
25
 */
26
 
27
 
28
// TODO : onvalidate dans mediator
29
 
30
 
31
package org.tela_botanica.client;
32
 
33
import java.util.Date;
34
 
35
import net.mygwt.ui.client.Style;
29 ddelon 36
import net.mygwt.ui.client.event.BaseEvent;
37
import net.mygwt.ui.client.event.SelectionListener;
38
import net.mygwt.ui.client.widget.Button;
28 ddelon 39
import net.mygwt.ui.client.widget.ContentPanel;
40
import net.mygwt.ui.client.widget.WidgetContainer;
41
import net.mygwt.ui.client.widget.layout.BorderLayoutData;
42
import net.mygwt.ui.client.widget.layout.FlowLayout;
43
 
44
import com.google.gwt.json.client.JSONArray;
45
import com.google.gwt.json.client.JSONParser;
46
import com.google.gwt.json.client.JSONString;
47
import com.google.gwt.json.client.JSONValue;
48
import com.google.gwt.user.client.HTTPRequest;
49
import com.google.gwt.user.client.History;
50
import com.google.gwt.user.client.ResponseTextHandler;
51
import com.google.gwt.user.client.ui.ChangeListener;
52
import com.google.gwt.user.client.ui.Grid;
29 ddelon 53
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
54
import com.google.gwt.user.client.ui.HasVerticalAlignment;
28 ddelon 55
import com.google.gwt.user.client.ui.HorizontalPanel;
56
import com.google.gwt.user.client.ui.KeyboardListener;
57
import com.google.gwt.user.client.ui.Label;
58
import com.google.gwt.user.client.ui.PopupPanel;
59
import com.google.gwt.user.client.ui.TextBox;
60
import com.google.gwt.user.client.ui.VerticalPanel;
61
import com.google.gwt.user.client.ui.Widget;
62
 
63
 
64
public class EntryView  {
65
 
66
 
67
  private ContentPanel panel=null;
68
  private NameAssistant nameAssistant = null;
69
  private LocationAssistant locationAssistant = null;
70
  private TextBox date = new TextBox();
71
  private TextBox lieudit = new TextBox();
29 ddelon 72
  private TextBox station = new TextBox();
30 ddelon 73
  private TextBox milieu = new TextBox();
28 ddelon 74
  private TextBox comment = new TextBox();
75
  private Button dateSelector = new Button("...");
76
 
77
  boolean visible=false;
78
  private Mediator mediator=null;
79
 
80
 
81
  private String user= null;
82
  private String ordre =null;
83
 
84
  private CalendarWidget calendar = null; // Lazy instantiation
85
  private PopupPanel choicesPopup = null; // Lazy instantiation
86
 
87
 
88
  public EntryView(final Mediator med) {
89
 
90
 
91
 
30 ddelon 92
  Grid observation = new Grid(5,4);
28 ddelon 93
 
94
 
95
  // Formatage affichage
96
 
30 ddelon 97
  for (int i=0; i<5;i++) {
28 ddelon 98
	observation.getCellFormatter().setWidth(i, 0, "3%");
99
	observation.getCellFormatter().setWidth(i, 1, "47%");
100
	observation.getCellFormatter().setWidth(i, 2, "3%");
101
	observation.getCellFormatter().setWidth(i, 3, "47%");
102
  }
103
 
104
 
105
   mediator=med;
106
   user=mediator.getUser();
107
 
108
 
109
   // Declaration des elements du dialogue de saisie aupres du mediator
110
 
111
   mediator.registerDate(date);
112
   mediator.registerComment(comment);
29 ddelon 113
   mediator.registerStation(station);
30 ddelon 114
   mediator.registerMilieu(milieu);
28 ddelon 115
   mediator.registerLieudit(lieudit);
116
 
117
   panel= new ContentPanel(Style.HEADER);
118
   panel.setLayout(new FlowLayout());
30 ddelon 119
   panel.setText("Nouvelle observation");
28 ddelon 120
 
121
   VerticalPanel outer = new VerticalPanel();
122
 
123
// Name assistant et location assistant : widget auto-completion sur nom scientifique ou commune
124
 
125
	nameAssistant = new NameAssistant(mediator);
126
	locationAssistant = new LocationAssistant(mediator);
127
 
128
 
129
 
130
	 // Saisie Commune
131
 
29 ddelon 132
     observation.setHTML(0,0,"Commune:&nbsp;");
133
     observation.setWidget(0,1,locationAssistant);
28 ddelon 134
 
135
     locationAssistant.setWidth("100%");
136
 
137
 
138
	 // Saisie lieu-dit
139
 
29 ddelon 140
     observation.setHTML(0,2,"Lieu-dit:&nbsp;");
141
     observation.setWidget(0,3,lieudit);
28 ddelon 142
 
143
     lieudit.setWidth("100%");
144
 
145
 
146
 
147
     lieudit.addKeyboardListener( new KeyboardListener() {
148
 
149
 		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
150
 			  if(arg1 == KEY_ENTER)
151
 			    {
152
 				 onValidateTextBox(lieudit);
153
 			    }
154
 
155
 		  }
156
 
157
 		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
158
 
159
 		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
160
 
161
 		  }
162
     );
163
 
164
 
165
 
29 ddelon 166
	 // Saisie (station)
28 ddelon 167
 
29 ddelon 168
     observation.setHTML(1,0,"Station:&nbsp;");
169
     observation.setWidget(1,1,station);
28 ddelon 170
 
29 ddelon 171
     station.setWidth("100%");
28 ddelon 172
 
173
 
174
     // Validation par entree sur cette zone de texte
175
 
29 ddelon 176
     station.addKeyboardListener( new KeyboardListener() {
28 ddelon 177
 
178
 		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
179
 			  if(arg1 == KEY_ENTER)
180
 			    {
29 ddelon 181
 				 onValidateTextBox(station);
28 ddelon 182
 			    }
183
 
184
 		  }
185
 
186
 		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
187
 
188
 		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
189
 
190
 		  }
191
     );
192
 
30 ddelon 193
// Saisie (station)
194
 
195
     observation.setHTML(1,2,"Milieu:&nbsp;");
196
     observation.setWidget(1,3,milieu);
197
 
198
     milieu.setWidth("100%");
199
 
28 ddelon 200
 
30 ddelon 201
     // Validation par entree sur cette zone de texte
202
 
203
     milieu.addKeyboardListener( new KeyboardListener() {
204
 
205
 		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
206
 			  if(arg1 == KEY_ENTER)
207
 			    {
208
 				 onValidateTextBox(milieu);
209
 			    }
210
 
211
 		  }
212
 
213
 		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
214
 
215
 		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
216
 
217
 		  }
218
     );
219
 
220
 
221
 
28 ddelon 222
     // Selecteur de Date
223
     // Releve
224
 
225
 
29 ddelon 226
     dateSelector.addSelectionListener(
227
 
228
    	 new SelectionListener() {
229
				public void widgetSelected(BaseEvent be) {
28 ddelon 230
 
231
    	   if (visible) {
232
    		  visible=false;
233
    		  choicesPopup.hide();
234
    	   }
235
    	   else {
236
    		visible=true;
237
    		if (calendar==null) {  // Lazy instantiation
238
    		  calendar = new CalendarWidget();
239
    		  choicesPopup = new PopupPanel(true);
240
    		  choicesPopup.add(calendar);
241
    		  calendar.addChangeListener(new ChangeListener() {
242
 
243
    			     public void onChange(Widget sender) {
244
 
245
    			       Date dateSelected=calendar.getDate();
246
    			       date.setText(dateSelected.getDate()+"/"+(dateSelected.getMonth()+1)+"/"+(dateSelected.getYear()+1900));
247
    			       visible=false;
248
    			       choicesPopup.hide();
249
    			     }
250
    			     });
251
 
252
    	   	}
253
 
254
    	    choicesPopup.show();
255
	        choicesPopup.setPopupPosition(dateSelector.getAbsoluteLeft(),
256
	        dateSelector.getAbsoluteTop()  - dateSelector.getOffsetHeight() - choicesPopup.getOffsetHeight());
257
	        choicesPopup.setWidth(dateSelector.getOffsetWidth() + "px");
258
    	   }
259
       }
260
 
261
     });
262
 
263
 
264
 	// Saisie Espece
265
 
30 ddelon 266
   observation.setHTML(3,0,"Esp&egrave;ce:&nbsp;");
267
   observation.setWidget(3,1,nameAssistant);
28 ddelon 268
 
269
   nameAssistant.setWidth("100%");
270
 
30 ddelon 271
   observation.setHTML(2,0,"Date:&nbsp;");
28 ddelon 272
 
273
    HorizontalPanel datePanel = new HorizontalPanel();
274
    datePanel.add(date);
275
    datePanel.add(dateSelector);
30 ddelon 276
    observation.setWidget(2,1,datePanel);
28 ddelon 277
 
278
    // Saisie date
279
    // Validation par entree sur cette zone de texte
280
 
281
 
282
    date.addKeyboardListener( new KeyboardListener() {
283
 
284
    		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
285
    			  if(arg1 == KEY_ENTER)
286
    			    {
287
    				  onValidateTextBox(date);
288
    			    }
289
    		  }
290
 
291
    		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
292
    		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
293
 
294
    		  }
295
    );
296
 
297
 
298
 
299
 
300
	 // Saisie Commentaire
301
 
30 ddelon 302
    observation.setHTML(4,0,"Notes:&nbsp;");
303
    observation.setWidget(4,1,comment);
28 ddelon 304
 
305
    comment.setWidth("100%");
306
 
307
 
308
    // Validation par entree sur cette zone de texte
309
 
310
    comment.addKeyboardListener( new KeyboardListener() {
311
 
312
		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
313
			  if(arg1 == KEY_ENTER)
314
			    {
315
    				  onValidateTextBox(comment);
316
			    }
317
 
318
		  }
319
 
320
		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
321
		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
322
 
323
		  }
324
  );
30 ddelon 325
 
28 ddelon 326
 
30 ddelon 327
    Button validButton=new Button("OK",
328
 
329
    	    	new SelectionListener() {
330
    					public void widgetSelected(BaseEvent be) {
331
    		   				  // Numero ordre vide : ajout d'une observation
332
        				  	if (ordre==null) {
333
        				     mediator.onAddInventoryItem();
334
        				     panel.setText("Nouvelle observation");
335
        				  	}
336
        				  	else {
337
        				     mediator.onModifyInventoryItem(ordre);
338
        				     panel.setText("Modification de l'observation n°: "+ordre);
339
        				  	}
340
    		    		}
341
    		     	}
342
    	    );
343
 
28 ddelon 344
 
30 ddelon 345
 
346
    observation.setWidget(4,3,validButton);
347
 
348
 
349
 
28 ddelon 350
    HorizontalPanel actionPanel= new HorizontalPanel();
351
 
352
 //   actionPanel.add(validButton);
353
 
354
 
355
	observation.setWidth("100%");
356
 
357
	outer.add(observation);
358
	outer.setCellWidth(observation, "100%");
359
	outer.setSpacing(10);
360
 
361
	outer.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
362
    outer.add(actionPanel);
363
 
364
    outer.setWidth("100%");
365
 
366
 
367
    panel.add(outer);
368
 
29 ddelon 369
    HorizontalPanel inner=new HorizontalPanel();
28 ddelon 370
 
30 ddelon 371
    Button newButton=new Button("Clear",
29 ddelon 372
 
373
    // Init
374
    	new SelectionListener() {
375
				public void widgetSelected(BaseEvent be) {
376
 
30 ddelon 377
					clear();
378
 
29 ddelon 379
	    		}
380
	     	}
381
    );
382
 
383
    inner.add(newButton);
384
 
385
 
386
    inner.setWidth("100%");
387
    panel.getHeader().addWidget(inner);
388
 
28 ddelon 389
	WidgetContainer center=mediator.getCenterContainer();
30 ddelon 390
	BorderLayoutData centerData = new BorderLayoutData(Style.NORTH, .27f, 150, 300);
28 ddelon 391
	center.add(panel,centerData);
392
 
393
 
394
    // Initialisation si provenance d'un lien
395
 
396
    if (History.getToken().length()>0) {
397
 
398
    	final String anum=History.getToken();
399
 
400
		HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Name/" + anum,
401
				new ResponseTextHandler() {
402
 
403
					public void onCompletion(String strcomplete) {
404
 
405
						JSONValue jsonValue = JSONParser.parse(strcomplete);
406
						JSONArray jsonArray;
407
 
408
						if ((jsonArray = jsonValue.isArray()) != null) {
409
 
410
								String aname = Util.toCelString(((JSONString) jsonArray.get(0)).toString());
411
 
412
								// Nom
413
								if (aname.compareTo("null")!=0) {
414
									nameAssistant.setText(aname);
415
									// Numero nomenclatural
416
									nameAssistant.setValue(anum);
417
								}
418
 
419
						}
420
					}
421
 
422
				});
423
 
424
 
425
    }
426
 
427
 
428
  }
429
 
30 ddelon 430
  void clear() {
431
  nameAssistant.setText("");
432
	nameAssistant.setValue(null);
433
	locationAssistant.setText("");
434
	locationAssistant.setValue(null); // Null ?
435
	date.setText("");
436
	lieudit.setText("");
437
	station.setText("");
438
	milieu.setText("");
439
	comment.setText("");
440
	ordre=null;
441
	panel.setText("Nouvelle observation");
442
 
443
}
444
 
28 ddelon 445
	/*
446
	 * Numero d'ordre du releve affiche + mise à jour bouton
447
	 *
448
	 */
449
 
450
	public void setOrdre(String ordre) {
451
		this.ordre = ordre;
452
		if (ordre==null) {
30 ddelon 453
			panel.setText("Nouvelle observation");
28 ddelon 454
		}
455
		else {
30 ddelon 456
			panel.setText("Modification de l'observation n°: "+ordre);
28 ddelon 457
		}
458
	}
459
 
460
 
461
	/*
462
	 * Numero d'ordre du releve affiche
463
	 *
464
	 */
465
 
466
	public String getOrdre() {
467
		return this.ordre;
468
	}
469
 
470
 
471
    // Validation par entree sur cette zone de texte
472
 
473
    private void onValidateTextBox(TextBox textbox) {
474
 
475
		  	if (ordre==null) {
476
			  // Numero ordre vide : ajout d'une observation
477
			     mediator.onAddInventoryItem();
478
			     textbox.setText("");
30 ddelon 479
			     panel.setText("Nouvelle observation");
28 ddelon 480
			}
481
			else {
482
			  // Modification  d'une observation
483
			     mediator.onModifyInventoryItem(ordre);
30 ddelon 484
			 	 panel.setText("Modification de l'observation n°: "+ordre);
28 ddelon 485
			}
486
    }
487
 
488
 
489
 
490
  /**
491
	 * Mise a jour de l'affichage a partir de donnees deja saisie
492
	 *
493
	 */
494
 
495
	public void update() {
496
 
497
		HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Inventory/" + user + "/" + ordre,
498
 
499
		new ResponseTextHandler() {
500
 
501
			public void onCompletion(String str) {
502
 
503
				JSONValue jsonValue = JSONParser.parse(str);
504
				JSONArray jsonArray;
505
 
506
 
507
				if ((jsonArray = jsonValue.isArray()) != null) {
508
 
509
							// Nom saisi
510
							nameAssistant.setText(Util.toCelString(((JSONString) jsonArray.get(0)).toString()));
511
 
512
 
513
							// Numero nomenclatural
514
 
515
							String ann=((JSONString) jsonArray .get(3)).stringValue();
516
 
517
							if (ann.compareTo("0")!=0) {
518
								nameAssistant.setValue(ann);
519
								mediator.getInfoPopup().setImageUrl(ann);
520
							}
521
							else {
522
								nameAssistant.setValue(null);
523
							}
524
 
525
							// Commune
526
							String aloc=Util.toCelString(((JSONString) jsonArray .get(6)).toString());
527
 
528
							if (aloc.compareTo("000null")!=0) {
529
								locationAssistant.setText(aloc);
530
							}
531
							else {
532
								locationAssistant.setText("");
533
							}
534
 
29 ddelon 535
//							 Departement
536
							String adep=Util.toCelString(((JSONString) jsonArray .get(7)).toString());
28 ddelon 537
 
29 ddelon 538
							if (adep.compareTo("000null")!=0) {
539
								locationAssistant.setValue(adep);
540
							}
541
							else {
542
								locationAssistant.setValue(null);
543
							}
544
 
545
							String adate=((JSONString) jsonArray .get(9)).stringValue();
546
 
28 ddelon 547
//							Date
548
							if (adate.compareTo("0000-00-00 00:00:00")!=0) {
549
								date.setText(adate);
550
							}
551
							else {
552
								date.setText("");
553
							}
554
 
555
 
29 ddelon 556
							String alieudit=Util.toCelString(((JSONString) jsonArray .get(10)).toString());
28 ddelon 557
 
29 ddelon 558
//							Lieudit
559
							if (alieudit.compareTo("000null")!=0) {
560
								lieudit.setText(alieudit);
561
							}
562
							else {
563
								lieudit.setText("");
564
							}
565
 
566
							String astation=Util.toCelString(((JSONString) jsonArray .get(11)).toString());
567
 
28 ddelon 568
//							Station
569
							if (astation.compareTo("000null")!=0) {
29 ddelon 570
								station.setText(astation);
28 ddelon 571
							}
572
							else {
29 ddelon 573
								station.setText("");
28 ddelon 574
							}
575
 
30 ddelon 576
 
577
							String amilieu=Util.toCelString(((JSONString) jsonArray .get(12)).toString());
578
 
579
//							Milieu
580
							if (amilieu.compareTo("000null")!=0) {
581
								milieu.setText(amilieu);
582
							}
583
							else {
584
								milieu.setText("");
585
							}
28 ddelon 586
 
30 ddelon 587
							String acomment=Util.toCelString(((JSONString) jsonArray .get(13)).toString());
28 ddelon 588
//							Notes
589
							if (acomment.compareTo("null")!=0) {
590
								comment.setText(acomment);
591
							}
592
							else {
593
								comment.setText("");
594
							}
595
 
596
				}
597
 
598
 
599
			}
600
		});
601
 
602
	}
603
 
604
	public void setUser(String user) {
605
		this.user = user;
606
	}
607
 
608
 
609
}
610
 
611
/* +--Fin du code ---------------------------------------------------------------------------------------+
612
* $Log$
30 ddelon 613
* Revision 1.2  2008-01-30 08:55:40  ddelon
614
* fin mise en place mygwt
615
*
29 ddelon 616
* Revision 1.1  2008-01-02 21:26:04  ddelon
617
* mise en place mygwt
618
*
28 ddelon 619
* Revision 1.8  2007-12-22 14:48:53  ddelon
620
* Documentation et refactorisation
621
*
622
* Revision 1.7  2007-09-17 19:25:34  ddelon
623
* Documentation
624
*
625
* Revision 1.6  2007-06-06 13:29:30  ddelon
626
* v0.09
627
*
628
* Revision 1.5  2007-05-22 14:27:08  ddelon
629
* reglage modification
630
*
631
* Revision 1.4  2007-05-21 21:01:35  ddelon
632
* Modification comportement boutons
633
*
634
*
635
*/