Subversion Repositories eFlore/Archives.cel-v1

Rev

Details | 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;
12 ddelon 89
 
13 ddelon 90
 
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
12 ddelon 96
 
97
  public EntryPanel(final Mediator med) {
98
 
99
 
100
   mediator=med;
22 ddelon 101
   user=mediator.getUser();
12 ddelon 102
 
103
   mediator.registerEntryPanel(this);
104
 
105
   mediator.registerDate(date);
106
   mediator.registerComment(comment);
107
   mediator.registerComplementLocation(complementLocation);
108
 
13 ddelon 109
 
12 ddelon 110
   VerticalPanel outer = new VerticalPanel();
111
 
112
 
22 ddelon 113
   outer.add(new HTML("<b>Saisir&nbsp;un&nbsp;relev&eacute;&nbsp;:</b>"));
12 ddelon 114
 
115
 
116
   Grid inner = new Grid(3,4);
117
 
118
   for (int i=0; i<3;i++) {
119
	inner.getCellFormatter().setWidth(i, 0, "3%");
120
	inner.getCellFormatter().setWidth(i, 1, "47%");
121
	inner.getCellFormatter().setWidth(i, 2, "3%");
122
	inner.getCellFormatter().setWidth(i, 3, "47%");
123
   }
124
 
125
 
126
	nameAssistant = new NameAssistant(mediator);
127
	locationAssistant = new LocationAssistant(mediator);
128
 
14 ddelon 129
 
12 ddelon 130
	// Saisie Nom
131
 
22 ddelon 132
     inner.setHTML(0,0,"Esp&egrave;ce:&nbsp;");
12 ddelon 133
     inner.setWidget(0,1,nameAssistant);
134
 
135
     nameAssistant.setWidth("100%");
136
 
137
	 // Saisie lieu
138
 
22 ddelon 139
     inner.setHTML(1,0,"Commune:&nbsp;");
12 ddelon 140
     inner.setWidget(1,1,locationAssistant);
141
 
142
     locationAssistant.setWidth("100%");
143
 
144
     // Saisie Date
145
 
146
 
147
     dateSelector.addClickListener(new ClickListener () {
148
 
149
       public void onClick(Widget w) {
150
 
151
    	   if (visible) {
152
    		  visible=false;
153
    		  choicesPopup.hide();
154
    	   }
155
    	   else {
156
    		visible=true;
22 ddelon 157
    		if (calendar==null) {  // Lazy instantiation
158
    		  calendar = new CalendarWidget();
159
    		  choicesPopup = new PopupPanel(true);
160
    		  choicesPopup.add(calendar);
161
    		  calendar.addChangeListener(new ChangeListener() {
162
 
163
    			     public void onChange(Widget sender) {
164
 
165
    			       Date dateSelected=calendar.getDate();
166
    			       date.setText(dateSelected.getDate()+"/"+(dateSelected.getMonth()+1)+"/"+(dateSelected.getYear()+1900));
167
    			       visible=false;
168
    			       choicesPopup.hide();
169
    			     }
170
    			     });
171
 
172
    	   	}
173
 
12 ddelon 174
    	    choicesPopup.show();
175
	        choicesPopup.setPopupPosition(dateSelector.getAbsoluteLeft(),
13 ddelon 176
	        dateSelector.getAbsoluteTop()  - dateSelector.getOffsetHeight() - choicesPopup.getOffsetHeight());
12 ddelon 177
	        choicesPopup.setWidth(dateSelector.getOffsetWidth() + "px");
178
    	   }
179
       }
180
 
181
     });
182
 
22 ddelon 183
 
184
    inner.setHTML(2,0,"Date:&nbsp;");
12 ddelon 185
 
186
    HorizontalPanel datePanel = new HorizontalPanel();
187
    datePanel.add(date);
188
    datePanel.add(dateSelector);
189
    inner.setWidget(2,1,datePanel);
190
 
22 ddelon 191
    // Saisie date
192
 
12 ddelon 193
    date.addKeyboardListener( new KeyboardListener() {
194
 
195
    		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
196
    			  if(arg1 == KEY_ENTER)
197
    			    {
24 ddelon 198
    				 if (ordre==null) {
199
       				     mediator.onAddInventoryItem();
200
       				     date.setText("");
201
    				 }
202
       				 else {
203
       				     mediator.onModifyInventoryItem(ordre);
204
       				     ordre=null;
205
       				 }
12 ddelon 206
    			    }
207
    		  }
208
 
22 ddelon 209
    		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
210
    		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
12 ddelon 211
 
212
    		  }
213
    );
214
 
215
 
216
 
22 ddelon 217
	 // Saisie Complement de lieu  (station)
12 ddelon 218
 
22 ddelon 219
    inner.setHTML(1,2,"Station:&nbsp;");
12 ddelon 220
    inner.setWidget(1,3,complementLocation);
221
 
222
    complementLocation.setWidth("100%");
223
 
224
 
225
    complementLocation.addKeyboardListener( new KeyboardListener() {
226
 
227
		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
228
			  if(arg1 == KEY_ENTER)
229
			    {
24 ddelon 230
				  	if (ordre==null) {
231
   				     mediator.onAddInventoryItem();
232
   				     complementLocation.setText("");
233
   				  	}
234
   				  	else {
235
   				     mediator.onModifyInventoryItem(ordre);
236
   				     ordre=null;
237
   				 }
12 ddelon 238
			    }
239
 
240
		  }
241
 
22 ddelon 242
		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
12 ddelon 243
 
22 ddelon 244
		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
12 ddelon 245
 
246
		  }
247
    );
248
 
249
 
250
	 // Saisie Commentaire
251
 
22 ddelon 252
    inner.setHTML(2,2,"Notes:&nbsp;");
12 ddelon 253
    inner.setWidget(2,3,comment);
254
 
255
    comment.setWidth("100%");
256
 
257
 
258
    comment.addKeyboardListener( new KeyboardListener() {
259
 
260
		  public void onKeyDown(Widget arg0, char arg1, int arg2) {
261
			  if(arg1 == KEY_ENTER)
262
			    {
24 ddelon 263
				  	if (ordre==null) {
264
   				     mediator.onAddInventoryItem();
265
   				     comment.setText("");
266
   				  	}
267
   				  	else {
268
   				     mediator.onModifyInventoryItem(ordre);
269
   				     ordre=null;
270
   				  	}
12 ddelon 271
			    }
272
 
273
		  }
274
 
22 ddelon 275
		  public void onKeyUp(Widget arg0, char arg1, int arg2) { }
276
		  public void onKeyPress(Widget arg0, char arg1, int arg2) { }
12 ddelon 277
 
278
		  }
279
  );
280
 
13 ddelon 281
 
22 ddelon 282
    Button validButton = new Button("Valider");
283
 
13 ddelon 284
 
22 ddelon 285
    validButton.addClickListener(
12 ddelon 286
 
13 ddelon 287
    		new ClickListener() {
288
 
289
    			  public void onClick(Widget w) {
22 ddelon 290
    				  	if (ordre==null) {
13 ddelon 291
    				     mediator.onAddInventoryItem();
22 ddelon 292
    				  	}
293
    				  	else {
13 ddelon 294
    				     mediator.onModifyInventoryItem(ordre);
22 ddelon 295
    				     ordre=null;
296
    				  	}
13 ddelon 297
    			  }
298
    		}
299
    );
300
 
301
 
22 ddelon 302
 
303
    HorizontalPanel actionPanel= new HorizontalPanel();
304
 
305
    actionPanel.add(validButton);
13 ddelon 306
 
12 ddelon 307
 
22 ddelon 308
	inner.setWidth("100%");
12 ddelon 309
 
22 ddelon 310
	outer.add(inner);
311
	outer.setCellWidth(inner, "100%");
312
	outer.setSpacing(10);
12 ddelon 313
 
13 ddelon 314
	outer.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
22 ddelon 315
    outer.add(actionPanel);
12 ddelon 316
 
317
 
14 ddelon 318
    // Initialisation si provenance d'un lien
319
 
320
    if (History.getToken().length()>0) {
12 ddelon 321
 
14 ddelon 322
    	final String anum=History.getToken();
323
 
22 ddelon 324
		HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Name/" + anum,
14 ddelon 325
				new ResponseTextHandler() {
326
 
327
					public void onCompletion(String strcomplete) {
328
 
329
						JSONValue jsonValue = JSONParser.parse(strcomplete);
330
						JSONArray jsonArray;
331
 
332
						if ((jsonArray = jsonValue.isArray()) != null) {
333
 
334
								String aname = ((JSONString) jsonArray.get(0)).stringValue();
335
 
336
								// Nom
337
 
338
								if (aname.compareTo("null")!=0) {
339
									nameAssistant.setText(((JSONString) jsonArray.get(0)).stringValue());
340
 
341
									// Numero nomenclatural
342
 
343
									nameAssistant.setValue(anum);
344
 
345
								}
346
 
347
						}
348
					}
349
 
350
				});
351
 
352
 
353
    }
12 ddelon 354
 
14 ddelon 355
 
356
 
12 ddelon 357
    initWidget(outer);
358
 
359
 
360
  }
13 ddelon 361
 
362
	/*
363
	 * Numero d'ordre du relevé affiché
364
	 *
365
	 */
12 ddelon 366
 
13 ddelon 367
	public void setOrdre(String ordre) {
368
		this.ordre = ordre;
12 ddelon 369
	}
370
 
13 ddelon 371
 
372
	/*
373
	 * Numero d'ordre du relevé affiché
374
	 *
375
	 */
12 ddelon 376
 
13 ddelon 377
	public String getOrdre() {
378
		return this.ordre;
12 ddelon 379
	}
13 ddelon 380
 
381
 
382
 
383
  /**
384
	 * Mise a jour de l'affichage a partir de données deja saisie
385
	 *
386
	 */
387
 
388
	public void update() {
389
 
22 ddelon 390
		HTTPRequest.asyncGet(mediator.getServiceBaseUrl() + "/Inventory/" + user + "/" + ordre,
13 ddelon 391
 
392
		new ResponseTextHandler() {
393
 
394
			public void onCompletion(String str) {
395
 
396
				JSONValue jsonValue = JSONParser.parse(str);
397
				JSONArray jsonArray;
398
 
399
 
400
				if ((jsonArray = jsonValue.isArray()) != null) {
401
							// Nom saisi
402
							nameAssistant.setText(((JSONString) jsonArray.get(0)).stringValue());
403
 
404
							// Numero nomenclatural
405
 
406
							String ann=((JSONString) jsonArray .get(3)).stringValue();
407
 
408
							if (ann.compareTo("0")!=0) {
24 ddelon 409
								nameAssistant.setValue(null);
13 ddelon 410
							}
24 ddelon 411
							else {
412
								nameAssistant.setValue(null);
413
							}
13 ddelon 414
 
415
							// Commune
416
							String aloc=((JSONString) jsonArray .get(6)).stringValue();
417
 
418
							if (aloc.compareTo("000null")!=0) {
419
								locationAssistant.setText(aloc);
420
							}
421
							else {
422
								locationAssistant.setText("");
423
							}
424
 
425
							String adate=((JSONString) jsonArray .get(8)).stringValue();
426
 
427
//							Date
428
							if (adate.compareTo("0000-00-00 00:00:00")!=0) {
429
								date.setText(adate);
430
							}
431
							else {
432
								date.setText("");
433
							}
434
 
435
 
436
							String astation=((JSONString) jsonArray .get(9)).stringValue();
437
 
438
//							Station
14 ddelon 439
							if (astation.compareTo("000null")!=0) {
13 ddelon 440
								complementLocation.setText(astation);
441
							}
442
							else {
443
								complementLocation.setText("");
444
							}
445
 
446
 
447
							String acomment=((JSONString) jsonArray .get(10)).stringValue();
448
//							Notes
449
							if (acomment.compareTo("null")!=0) {
450
								comment.setText(acomment);
451
							}
452
							else {
453
								comment.setText("");
454
							}
455
 
456
				}
457
 
458
 
459
			}
460
		});
461
 
462
	}
463
 
14 ddelon 464
	public void setUser(String user) {
465
		this.user = user;
466
	}
13 ddelon 467
 
12 ddelon 468
}
22 ddelon 469
 
470
/* +--Fin du code ---------------------------------------------------------------------------------------+
24 ddelon 471
* $Log$
472
* Revision 1.4  2007-05-21 21:01:35  ddelon
473
* Modification comportement boutons
474
*
22 ddelon 475
*
476
*/