Subversion Repositories eFlore/Archives.cel-v1

Rev

Rev 24 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
22 ddelon 1
/**
2
 David Delon david.delon@clapas.net 2007
3
 
4
 Ce logiciel est régi par la licence CeCILL soumise au droit français et
5
 respectant les principes de diffusion des logiciels libres. Vous pouvez
6
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
7
 de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
8
 sur le site "http://www.cecill.info".
9
 En contrepartie de l'accessibilité au code source et des droits de copie,
10
 de modification et de redistribution accordés par cette licence, il n'est
11
 offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
12
 seule une responsabilité restreinte pèse sur l'auteur du programme,  le
13
 titulaire des droits patrimoniaux et les concédants successifs.
14
 
15
 A cet égard  l'attention de l'utilisateur est attirée sur les risques
16
 associés au chargement,  à l'utilisation,  à la modification et/ou au
17
 développement et à la reproduction du logiciel par l'utilisateur étant
18
 donné sa spécificité de logiciel libre, qui peut le rendre complexe à
19
 manipuler et qui le réserve donc à des développeurs et des professionnels
20
 avertis possédant  des  connaissances  informatiques approfondies.  Les
21
 utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
22
 logiciel à leurs besoins dans des conditions permettant d'assurer la
23
 sécurité de leurs systèmes et ou de leurs données et, plus généralement,
24
 à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
25
 
26
 Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
27
 pris connaissance de la licence CeCILL, et que vous en avez accepté les
28
 termes.
29
 
30
 */
31
 
12 ddelon 32
/*
22 ddelon 33
 * EntryPanel.java  (Composite de Panel)
12 ddelon 34
 *
22 ddelon 35
 * Cas d'utilisation :
36
 * Saisie assistee (completion nom et completion commune) de releves.
37
 * L'identification n'est pas obligatoire
38
 *
39
 * 1 : L'utilisateur saisit a minima un nom de plante
40
 * 		1: Le nom de plante provient d'une application externe : il est deduit du nuremo nomenclatural transmis en historique
41
 * 2 : Le programme assiste la saisie de nom de plante ou de localite par interrogation du systeme distant
42
 * 3 : L'utilisateur choisi le type de mise (ajout ou modification)
43
 * 3 : L'utilisateur valide sa saisie
44
 * 4 : Le programme transmet au systeme distant la nouvelle saisie pour l'identifiant en cours
45
 * 5 : Le programme transmet au systeme local un evenement annoncant une nouvelle saisie
12 ddelon 46
 *
47
 *
22 ddelon 48
 * Affichage detail d'un observation
49
 * 1 : Le programme affiche les donnees d'inventaire pour l'identifiant enregistre et pour le numero d'ordre transmis
50
 *
12 ddelon 51
 */
22 ddelon 52
 
53
 
12 ddelon 54
package org.tela_botanica.client;
55
 
56
import java.util.Date;
57
 
13 ddelon 58
import com.google.gwt.json.client.JSONArray;
59
import com.google.gwt.json.client.JSONParser;
60
import com.google.gwt.json.client.JSONString;
61
import com.google.gwt.json.client.JSONValue;
62
import com.google.gwt.user.client.HTTPRequest;
14 ddelon 63
import com.google.gwt.user.client.History;
13 ddelon 64
import com.google.gwt.user.client.ResponseTextHandler;
12 ddelon 65
import com.google.gwt.user.client.ui.Button;
66
import com.google.gwt.user.client.ui.ChangeListener;
67
import com.google.gwt.user.client.ui.ClickListener;
68
import com.google.gwt.user.client.ui.Composite;
69
import com.google.gwt.user.client.ui.Grid;
70
import com.google.gwt.user.client.ui.HTML;
71
import com.google.gwt.user.client.ui.HorizontalPanel;
72
import com.google.gwt.user.client.ui.KeyboardListener;
73
import com.google.gwt.user.client.ui.PopupPanel;
74
import com.google.gwt.user.client.ui.TextBox;
75
import com.google.gwt.user.client.ui.VerticalPanel;
76
import com.google.gwt.user.client.ui.Widget;
77
 
78
 
13 ddelon 79
public class EntryPanel extends Composite   {
12 ddelon 80
 
81
  private NameAssistant nameAssistant = null;
82
  private LocationAssistant locationAssistant = null;
22 ddelon 83
  private TextBox date = new TextBox();
84
  private TextBox complementLocation = new TextBox();
85
  private TextBox comment = new TextBox();
86
  private Button dateSelector = new Button("...");
12 ddelon 87
  boolean visible=false;
22 ddelon 88
  private Mediator mediator=null;
13 ddelon 89
 
25 ddelon 90
 
13 ddelon 91
  private String user= null;
92
  private String ordre =null;
93
 
22 ddelon 94
  private CalendarWidget calendar = null; // Lazy instantiation
95
  private PopupPanel choicesPopup = null; // Lazy instantiation
25 ddelon 96
 
12 ddelon 97
 
98
  public EntryPanel(final Mediator med) {
99
 
100
 
25 ddelon 101
	  Grid inner = new Grid(3,4);
102
 
103
 
104
 
12 ddelon 105
   mediator=med;
22 ddelon 106
   user=mediator.getUser();
12 ddelon 107
 
108
   mediator.registerEntryPanel(this);
109
 
110
   mediator.registerDate(date);
111
   mediator.registerComment(comment);
112
   mediator.registerComplementLocation(complementLocation);
113
 
13 ddelon 114
 
12 ddelon 115
   VerticalPanel outer = new VerticalPanel();
116
 
117
 
22 ddelon 118
   outer.add(new HTML("<b>Saisir&nbsp;un&nbsp;relev&eacute;&nbsp;:</b>"));
12 ddelon 119
 
120
 
121
 
122
   for (int i=0; i<3;i++) {
123
	inner.getCellFormatter().setWidth(i, 0, "3%");
124
	inner.getCellFormatter().setWidth(i, 1, "47%");
125
	inner.getCellFormatter().setWidth(i, 2, "3%");
126
	inner.getCellFormatter().setWidth(i, 3, "47%");
25 ddelon 127
   }
12 ddelon 128
 
129
 
25 ddelon 130
 
131
 
12 ddelon 132
	nameAssistant = new NameAssistant(mediator);
133
	locationAssistant = new LocationAssistant(mediator);
134
 
14 ddelon 135
 
12 ddelon 136
	// Saisie Nom
137
 
22 ddelon 138
     inner.setHTML(0,0,"Esp&egrave;ce:&nbsp;");
12 ddelon 139
     inner.setWidget(0,1,nameAssistant);
140
 
141
     nameAssistant.setWidth("100%");
142
 
143
	 // Saisie lieu
144
 
22 ddelon 145
     inner.setHTML(1,0,"Commune:&nbsp;");
12 ddelon 146
     inner.setWidget(1,1,locationAssistant);
147
 
148
     locationAssistant.setWidth("100%");
149
 
150
     // Saisie Date
151
 
152
 
153
     dateSelector.addClickListener(new ClickListener () {
154
 
155
       public void onClick(Widget w) {
156
 
157
    	   if (visible) {
158
    		  visible=false;
159
    		  choicesPopup.hide();
160
    	   }
161
    	   else {
162
    		visible=true;
22 ddelon 163
    		if (calendar==null) {  // Lazy instantiation
164
    		  calendar = new CalendarWidget();
165
    		  choicesPopup = new PopupPanel(true);
166
    		  choicesPopup.add(calendar);
167
    		  calendar.addChangeListener(new ChangeListener() {
168
 
169
    			     public void onChange(Widget sender) {
170
 
171
    			       Date dateSelected=calendar.getDate();
172
    			       date.setText(dateSelected.getDate()+"/"+(dateSelected.getMonth()+1)+"/"+(dateSelected.getYear()+1900));
173
    			       visible=false;
174
    			       choicesPopup.hide();
175
    			     }
176
    			     });
177
 
178
    	   	}
179
 
12 ddelon 180
    	    choicesPopup.show();
181
	        choicesPopup.setPopupPosition(dateSelector.getAbsoluteLeft(),
13 ddelon 182
	        dateSelector.getAbsoluteTop()  - dateSelector.getOffsetHeight() - choicesPopup.getOffsetHeight());
12 ddelon 183
	        choicesPopup.setWidth(dateSelector.getOffsetWidth() + "px");
184
    	   }
185
       }
186
 
187
     });
188
 
22 ddelon 189
 
190
    inner.setHTML(2,0,"Date:&nbsp;");
12 ddelon 191
 
192
    HorizontalPanel datePanel = new HorizontalPanel();
193
    datePanel.add(date);
194
    datePanel.add(dateSelector);
195
    inner.setWidget(2,1,datePanel);
196
 
22 ddelon 197
    // Saisie date
198
 
12 ddelon 199
    date.addKeyboardListener( new KeyboardListener() {
200
 
201
    		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
202
    			  if(arg1 == KEY_ENTER)
203
    			    {
24 ddelon 204
    				 if (ordre==null) {
205
       				     mediator.onAddInventoryItem();
206
       				     date.setText("");
207
    				 }
208
       				 else {
209
       				     mediator.onModifyInventoryItem(ordre);
210
       				     ordre=null;
211
       				 }
12 ddelon 212
    			    }
213
    		  }
214
 
22 ddelon 215
    		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
216
    		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
12 ddelon 217
 
218
    		  }
219
    );
220
 
221
 
222
 
22 ddelon 223
	 // Saisie Complement de lieu  (station)
12 ddelon 224
 
22 ddelon 225
    inner.setHTML(1,2,"Station:&nbsp;");
12 ddelon 226
    inner.setWidget(1,3,complementLocation);
227
 
228
    complementLocation.setWidth("100%");
229
 
230
 
231
    complementLocation.addKeyboardListener( new KeyboardListener() {
232
 
233
		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
234
			  if(arg1 == KEY_ENTER)
235
			    {
24 ddelon 236
				  	if (ordre==null) {
237
   				     mediator.onAddInventoryItem();
238
   				     complementLocation.setText("");
239
   				  	}
240
   				  	else {
241
   				     mediator.onModifyInventoryItem(ordre);
242
   				     ordre=null;
243
   				 }
12 ddelon 244
			    }
245
 
246
		  }
247
 
22 ddelon 248
		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
12 ddelon 249
 
22 ddelon 250
		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
12 ddelon 251
 
252
		  }
253
    );
254
 
255
 
256
	 // Saisie Commentaire
257
 
22 ddelon 258
    inner.setHTML(2,2,"Notes:&nbsp;");
12 ddelon 259
    inner.setWidget(2,3,comment);
260
 
261
    comment.setWidth("100%");
262
 
263
 
264
    comment.addKeyboardListener( new KeyboardListener() {
265
 
266
		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
267
			  if(arg1 == KEY_ENTER)
268
			    {
24 ddelon 269
				  	if (ordre==null) {
270
   				     mediator.onAddInventoryItem();
271
   				     comment.setText("");
272
   				  	}
273
   				  	else {
274
   				     mediator.onModifyInventoryItem(ordre);
275
   				     ordre=null;
276
   				  	}
12 ddelon 277
			    }
278
 
279
		  }
280
 
22 ddelon 281
		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
282
		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
12 ddelon 283
 
284
		  }
285
  );
25 ddelon 286
 
13 ddelon 287
 
22 ddelon 288
    Button validButton = new Button("Valider");
289
 
13 ddelon 290
 
22 ddelon 291
    validButton.addClickListener(
12 ddelon 292
 
13 ddelon 293
    		new ClickListener() {
294
 
295
    			  public void onClick(Widget w) {
22 ddelon 296
    				  	if (ordre==null) {
13 ddelon 297
    				     mediator.onAddInventoryItem();
22 ddelon 298
    				  	}
299
    				  	else {
13 ddelon 300
    				     mediator.onModifyInventoryItem(ordre);
22 ddelon 301
    				     ordre=null;
302
    				  	}
13 ddelon 303
    			  }
304
    		}
305
    );
306
 
307
 
22 ddelon 308
 
309
    HorizontalPanel actionPanel= new HorizontalPanel();
310
 
311
    actionPanel.add(validButton);
13 ddelon 312
 
12 ddelon 313
 
22 ddelon 314
	inner.setWidth("100%");
12 ddelon 315
 
22 ddelon 316
	outer.add(inner);
317
	outer.setCellWidth(inner, "100%");
318
	outer.setSpacing(10);
12 ddelon 319
 
13 ddelon 320
	outer.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
22 ddelon 321
    outer.add(actionPanel);
12 ddelon 322
 
323
 
14 ddelon 324
    // Initialisation si provenance d'un lien
325
 
326
    if (History.getToken().length()>0) {
12 ddelon 327
 
14 ddelon 328
    	final String anum=History.getToken();
329
 
22 ddelon 330
		HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Name/" + anum,
14 ddelon 331
				new ResponseTextHandler() {
332
 
333
					public void onCompletion(String strcomplete) {
334
 
335
						JSONValue jsonValue = JSONParser.parse(strcomplete);
336
						JSONArray jsonArray;
337
 
338
						if ((jsonArray = jsonValue.isArray()) != null) {
339
 
340
								String aname = ((JSONString) jsonArray.get(0)).stringValue();
341
 
342
								// Nom
343
 
344
								if (aname.compareTo("null")!=0) {
345
									nameAssistant.setText(((JSONString) jsonArray.get(0)).stringValue());
346
 
347
									// Numero nomenclatural
348
 
349
									nameAssistant.setValue(anum);
350
 
351
								}
352
 
353
						}
354
					}
355
 
356
				});
357
 
358
 
359
    }
360
 
361
 
12 ddelon 362
    initWidget(outer);
363
 
364
 
365
  }
13 ddelon 366
 
367
	/*
368
	 * Numero d'ordre du relevé affiché
369
	 *
370
	 */
12 ddelon 371
 
13 ddelon 372
	public void setOrdre(String ordre) {
373
		this.ordre = ordre;
12 ddelon 374
	}
375
 
13 ddelon 376
 
377
	/*
378
	 * Numero d'ordre du relevé affiché
379
	 *
380
	 */
12 ddelon 381
 
13 ddelon 382
	public String getOrdre() {
383
		return this.ordre;
12 ddelon 384
	}
13 ddelon 385
 
386
 
387
 
388
  /**
389
	 * Mise a jour de l'affichage a partir de données deja saisie
390
	 *
391
	 */
392
 
393
	public void update() {
394
 
22 ddelon 395
		HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Inventory/" + user + "/" + ordre,
13 ddelon 396
 
397
		new ResponseTextHandler() {
398
 
399
			public void onCompletion(String str) {
400
 
401
				JSONValue jsonValue = JSONParser.parse(str);
402
				JSONArray jsonArray;
403
 
404
 
405
				if ((jsonArray = jsonValue.isArray()) != null) {
406
							// Nom saisi
407
							nameAssistant.setText(((JSONString) jsonArray.get(0)).stringValue());
408
 
409
							// Numero nomenclatural
410
 
411
							String ann=((JSONString) jsonArray .get(3)).stringValue();
412
 
413
							if (ann.compareTo("0")!=0) {
25 ddelon 414
								nameAssistant.setValue(ann);
415
								mediator.getInfoPopup().setImageUrl(ann);
13 ddelon 416
							}
24 ddelon 417
							else {
418
								nameAssistant.setValue(null);
419
							}
13 ddelon 420
 
421
							// Commune
422
							String aloc=((JSONString) jsonArray .get(6)).stringValue();
423
 
424
							if (aloc.compareTo("000null")!=0) {
425
								locationAssistant.setText(aloc);
426
							}
427
							else {
428
								locationAssistant.setText("");
429
							}
430
 
431
							String adate=((JSONString) jsonArray .get(8)).stringValue();
432
 
433
//							Date
434
							if (adate.compareTo("0000-00-00 00:00:00")!=0) {
435
								date.setText(adate);
436
							}
437
							else {
438
								date.setText("");
439
							}
440
 
441
 
442
							String astation=((JSONString) jsonArray .get(9)).stringValue();
443
 
444
//							Station
14 ddelon 445
							if (astation.compareTo("000null")!=0) {
13 ddelon 446
								complementLocation.setText(astation);
447
							}
448
							else {
449
								complementLocation.setText("");
450
							}
451
 
452
 
453
							String acomment=((JSONString) jsonArray .get(10)).stringValue();
454
//							Notes
455
							if (acomment.compareTo("null")!=0) {
456
								comment.setText(acomment);
457
							}
458
							else {
459
								comment.setText("");
460
							}
461
 
462
				}
463
 
464
 
465
			}
466
		});
467
 
468
	}
469
 
14 ddelon 470
	public void setUser(String user) {
471
		this.user = user;
472
	}
25 ddelon 473
 
13 ddelon 474
 
12 ddelon 475
}
22 ddelon 476
 
477
/* +--Fin du code ---------------------------------------------------------------------------------------+
24 ddelon 478
* $Log$
25 ddelon 479
* Revision 1.5  2007-05-22 14:27:08  ddelon
480
* reglage modification
481
*
24 ddelon 482
* Revision 1.4  2007-05-21 21:01:35  ddelon
483
* Modification comportement boutons
484
*
22 ddelon 485
*
486
*/