Subversion Repositories eFlore/Archives.cel-v1

Rev

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

Rev Author Line No. Line
10 ddelon 1
package org.tela_botanica.client;
2
 
3
 
4
// TODO : sortie User vers une classe ...
28 ddelon 5
// TODO : sortie les boutons supprimer et exporter et inclure ici : vraiment ?
10 ddelon 6
 
28 ddelon 7
// TODO : optimisation, ne pas rechercher stations ou date si non affichés
8
 
9
 
10
 
11
 
12
import net.mygwt.ui.client.Style;
13
import net.mygwt.ui.client.widget.Viewport;
14
import net.mygwt.ui.client.widget.WidgetContainer;
15
import net.mygwt.ui.client.widget.layout.BorderLayout;
16
import net.mygwt.ui.client.widget.layout.BorderLayoutData;
17
import net.mygwt.ui.client.widget.layout.FillLayout;
18
 
10 ddelon 19
import com.google.gwt.i18n.client.Dictionary;
14 ddelon 20
import com.google.gwt.json.client.JSONArray;
21
import com.google.gwt.json.client.JSONBoolean;
10 ddelon 22
import com.google.gwt.json.client.JSONParser;
23
import com.google.gwt.json.client.JSONString;
24
import com.google.gwt.json.client.JSONValue;
25
import com.google.gwt.user.client.HTTPRequest;
26
import com.google.gwt.user.client.ResponseTextHandler;
12 ddelon 27
import com.google.gwt.user.client.ui.TextBox;
10 ddelon 28
 
26 ddelon 29
public class Mediator implements AutoCompleteAsyncTextBoxListener {
10 ddelon 30
 
28 ddelon 31
		// General
32
 
33
 
34
		private WidgetContainer west = null;
35
		private WidgetContainer south = null;
36
		private WidgetContainer center = null;
37
		private WidgetContainer north = null;
38
 
27 ddelon 39
		private String serviceBaseUrl = getServiceBaseUrlFromDictionnary(); // Recherche url de base des services distants
11 ddelon 40
 
27 ddelon 41
		// Utilisateur
28 ddelon 42
 
43
		private ConnexionView connexionView=null; // Information de connexion
44
		private String user = null; // Identifiant utilisateur connecte ou bien identifiant de session en cours
45
		private boolean connected=false; // Positionne a vrai si identification reussie
46
 
12 ddelon 47
 
28 ddelon 48
		// Filtres sur les releves
49
		private InventoryFilterView inventoryFilterView=null; // Containeur filtre date, lieu, lieu-dit ...
29 ddelon 50
		private LocationFilterView locationFilterView=null; // Filtre sur lieu de releve
51
		private DateFilterView dateFilterView = null; // Filtre sur date d'observation
28 ddelon 52
 
27 ddelon 53
		// Saisie d'une observation
54
 
28 ddelon 55
		private EntryView entryView=null;  // Formulaire de saisie observation
27 ddelon 56
 
57
		private NameAssistant nameAssistant=null; //  Assistant de saisie nom scientifique
58
		private LocationAssistant locationAssistant=null; // Assistant de saisie nom de commune
59
 
60
		private TextBox date = null; // date observation
29 ddelon 61
		private TextBox station = null;  // station observation
27 ddelon 62
		private TextBox lieudit = null;  // lieu dit observation
63
		private TextBox comment = null; // commentaire observation
64
		private InventoryItem inventoryItem=null;  // Une observation saisie
12 ddelon 65
 
28 ddelon 66
 
67
		// Liste de releves saisis
68
 
69
		private InventoryListView inventoryListView = null;  // Liste de releves
70
 
12 ddelon 71
 
28 ddelon 72
		// Actions sur les releves
73
		private ActionView actionView=null; // Action sur les observations
74
		private SearchPanel searchPanel = null; // Recherche dans les relevés saisis
75
 
27 ddelon 76
 
77
		// Informations
78
 
79
		private InfoPopup infoPopup=null; // Information complementaire sur un taxon (photo, repartition)
80
 
28 ddelon 81
 
82
		Mediator() {
27 ddelon 83
 
28 ddelon 84
 
85
			// Recherche identifiant utilisateur connecte
86
 
87
			HTTPRequest.asyncGet(serviceBaseUrl + "/User/",
88
					new ResponseTextHandler() {
27 ddelon 89
 
28 ddelon 90
						public void onCompletion(String str) {
91
							JSONValue jsonValue = JSONParser.parse(str);
92
							JSONArray jsonArray;
93
							if ((jsonArray = jsonValue.isArray()) != null) {
94
									user = ((JSONString) jsonArray.get(0)).stringValue(); // Identifiant utilisateur ou identifiant de session si non connecte
95
									connected = ((JSONBoolean) jsonArray.get(1)).booleanValue();  // Drapeau leve si utilisateur identifie
96
							}
97
							_Mediator();
98
						}
99
					});
10 ddelon 100
 
101
		}
27 ddelon 102
 
28 ddelon 103
		// Fin initialisation
27 ddelon 104
 
28 ddelon 105
		private void _Mediator() {
106
 
107
			// Navigateur
108
 
109
			Viewport viewport = new Viewport();
29 ddelon 110
		//	viewport.setStyleName("my-border-layout");
111
		//	viewport.setBorders(true);
28 ddelon 112
			viewport.setLayout(new BorderLayout());
113
 
114
 
115
			center = new WidgetContainer();
116
			center.setLayout(new BorderLayout());
29 ddelon 117
		//	center.setBorders(true);
28 ddelon 118
 
119
			west = new WidgetContainer();
120
			west.setLayout(new FillLayout());
29 ddelon 121
		//	west.setBorders(true);
28 ddelon 122
 
123
			south = new WidgetContainer();
124
			south.setLayout(new FillLayout());
29 ddelon 125
		//	south.setBorders(true);
28 ddelon 126
 
127
			north = new WidgetContainer();
128
			north.setLayout(new FillLayout());
129
 
29 ddelon 130
		//	north.setBorders(true);
28 ddelon 131
 
132
			inventoryListView = new InventoryListView(this); // Liste de releves
133
			connexionView = new ConnexionView(this); // Identifiant de connection
134
 
135
			inventoryFilterView = new InventoryFilterView(this); // Ensemble de filtres sur liste de releves
136
			entryView = new EntryView(this); // Formulaire de saisie
137
			actionView = new ActionView(this); // Action sur releves saisis
138
		//	searchPanel = new SearchPanel(this); // Recherche dans releves
139
 
140
 
141
 
142
			//applicationPanel.add(searchPanel);
143
 
144
 
145
		    BorderLayoutData westData = new BorderLayoutData(Style.WEST, 200, 150, 300);
146
		    westData.resizeable = true;
147
		    viewport.add(west, westData);
148
 
149
 
150
		    BorderLayoutData centerData = new BorderLayoutData(Style.CENTER, 400, 400, 800);
151
		    viewport.add(center, centerData);
152
 
153
 
154
		    BorderLayoutData northData = new BorderLayoutData(Style.NORTH, 20, 20, 20);
155
		    viewport.add(north, northData);
156
 
157
		    BorderLayoutData southData = new BorderLayoutData(Style.SOUTH, 400, 400, 800);
158
//		    viewport.add(south, southData);
159
 
160
		    viewport.layout();
161
		    onInit();
162
 
163
 
164
 
27 ddelon 165
		// Methodes Private
28 ddelon 166
	    }
27 ddelon 167
 
168
 
10 ddelon 169
		/**
27 ddelon 170
		 * Recuperation du prefixe d'appel des services
171
		 * @return prefix appel des service
172
		 */
173
 
174
		private String getServiceBaseUrlFromDictionnary() {
175
 
176
			Dictionary theme = Dictionary.getDictionary("Parameters");
177
			return theme.get("serviceBaseUrl");
178
 
179
		}
180
 
181
 
182
 
183
		// Methodes Public
184
 
185
 
186
 
187
 
10 ddelon 188
 
27 ddelon 189
		// Actions declanchee par le systeme
190
 
12 ddelon 191
		/**
27 ddelon 192
		 * Action initialisation premier affichage
12 ddelon 193
		 */
194
 
195
		public void onInit() {
196
 
29 ddelon 197
			locationFilterView.setIDLocation("all"); // Mise a jour filtre localite
198
			locationFilterView.setLocation("all"); // Mise a jour filtre localite
199
			locationFilterView.setLieudit("all"); // Mise a jour filtre localite
200
			locationFilterView.update(); // Mise a jour affichage
14 ddelon 201
 
12 ddelon 202
 
29 ddelon 203
			dateFilterView.setYear("all");
204
			dateFilterView.setMonth("all");
205
			dateFilterView.setDay("all");
206
 
207
			dateFilterView.update();
208
 
209
 
210
			this.onLocationSelected("all","all","all");
211
 
212
 
213
 
12 ddelon 214
		}
215
 
13 ddelon 216
 
27 ddelon 217
		// Actions sur formulaire de saisie
218
 
26 ddelon 219
 
14 ddelon 220
		/**
27 ddelon 221
		 * Action lancee par la completion d'un nom dans un assistant de saisie
222
		 * Recherche d'information complementaires ....
26 ddelon 223
		 *
224
		 * @return void
225
		 */
226
 
227
		public void onComplete(ResponseTextHandler sender, String str, String value) {
228
 
229
			if (sender instanceof NameAssistant) {
230
				onNameCompleted(value);
231
			}
232
 
233
		}
234
 
235
 
27 ddelon 236
		/**
29 ddelon 237
		 * Action suivant la completion d'un nom : affichage popup information
27 ddelon 238
		 *
239
		 */
26 ddelon 240
 
27 ddelon 241
		public void  onNameCompleted(String value) {
242
			if (infoPopup==null) {
243
				infoPopup = new InfoPopup(this);
244
			}
245
			infoPopup.setImageUrl(value);
246
		}
247
 
28 ddelon 248
 
249
 
250
 
27 ddelon 251
 
252
 
26 ddelon 253
		/**
27 ddelon 254
		 * Action prealable a l'ajout d'une observation : controle presence champs requis et lancement mise a jour
255
		 *
256
		 */
257
 
258
		public void onAddInventoryItem() {
259
 
260
			// Lazy instantiation
261
			if (inventoryItem==null) {
28 ddelon 262
				inventoryItem=new InventoryItem(this);
27 ddelon 263
			}
264
 
29 ddelon 265
			inventoryItem.setContent(nameAssistant.getText(),nameAssistant.getValue(),locationAssistant.getText(),locationAssistant.getValue(),date.getText(),lieudit.getText(),station.getText(),comment.getText(),"null");
28 ddelon 266
			inventoryItem.addelement();
27 ddelon 267
 
268
		}
269
 
270
 
271
 
272
		/**
273
		 * Action prealable a la modification d'une observation : controle presence champs requis et lancement mise a jour
274
		 *
275
		 */
276
 
277
		public void onModifyInventoryItem(String ordre) {
278
 
279
		// Lazy instantiation
280
		if (inventoryItem==null) {
28 ddelon 281
			inventoryItem=new InventoryItem(this);
27 ddelon 282
		}
283
 
29 ddelon 284
		inventoryItem.setContent(nameAssistant.getText(),nameAssistant.getValue(),locationAssistant.getText(),locationAssistant.getValue(),date.getText(),lieudit.getText(),station.getText(),comment.getText(),ordre);
28 ddelon 285
		inventoryItem.updateElement();
27 ddelon 286
 
287
		}
288
 
289
 
290
 
291
		/**
292
		 * Action lancee par la selection d'un nom dans un assistant de saisie. Lance
293
		 * la recherche d'informations complementaires (famille, numero
26 ddelon 294
		 * nomenclaturaux etc) et met a jour l'inventaire (addelement())
295
		 *
296
		 * @return void
297
		 */
27 ddelon 298
 
299
 
26 ddelon 300
		public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender,
301
				  String str, String value) {
302
 
28 ddelon 303
		  	if (entryView.getOrdre()==null) { // Nouvelle observation
26 ddelon 304
				     onAddInventoryItem();
305
			  	}
306
			else {
28 ddelon 307
			     onModifyInventoryItem(entryView.getOrdre());   // Modification d'une observation
308
			     entryView.setOrdre(null);
26 ddelon 309
			 }
310
 
311
		}
312
 
313
 
27 ddelon 314
		// Action portant sur la liste des observations
26 ddelon 315
 
316
		/**
27 ddelon 317
		 * Action suite ajout, modification, suppression d'un element inventaire
14 ddelon 318
		 */
13 ddelon 319
 
14 ddelon 320
 
29 ddelon 321
		public void onInventoryUpdated(String id_location,String loc, String lieu) {
28 ddelon 322
 
29 ddelon 323
			if (id_location.compareTo("")==0) {
324
				id_location="000null";
28 ddelon 325
			}
29 ddelon 326
 
327
			if (loc.compareTo("")==0) {
328
				loc="000null";
329
			}
14 ddelon 330
 
29 ddelon 331
			if (lieu.compareTo("")==0) {
332
				lieu="000null";
333
			}
14 ddelon 334
 
29 ddelon 335
 
336
			locationFilterView.setIDLocation(id_location); // Mise a jour filtre localite
337
			locationFilterView.setLocation(loc); // Mise a jour filtre localite
338
			locationFilterView.setLieudit(lieu); // Mise a jour filtre localite
339
			locationFilterView.update(); // Mise a jour affichage
340
 
341
			dateFilterView.setYear("all");
342
			dateFilterView.setMonth("all");
343
			dateFilterView.setDay("all");
14 ddelon 344
 
29 ddelon 345
			dateFilterView.update();
346
 
347
			this.onLocationSelected(id_location,loc,lieu); // Selection localite
348
 
14 ddelon 349
		}
350
 
351
 
13 ddelon 352
		/**
353
		 * Action sur selection d'une observation : affichage du detail
354
		 */
355
 
356
		public void onInventoryItemSelected(String ordre) {
357
 
28 ddelon 358
			entryView.setOrdre(ordre); // Mise a jour du formulaire de saisie avec l'element selectionne
359
			entryView.update();
13 ddelon 360
 
361
		}
12 ddelon 362
 
13 ddelon 363
 
364
		/**
27 ddelon 365
		 * Action sur deselection d'une observation : remise a zero
26 ddelon 366
		 */
367
 
28 ddelon 368
		public void onInventoryItemUnselected() {
26 ddelon 369
 
28 ddelon 370
			entryView.setOrdre(null); //  Mise a jour du formulaire de saisie avec l'element selectionne
26 ddelon 371
 
372
		}
373
 
374
 
375
 
27 ddelon 376
		// Action sur Filtrage
13 ddelon 377
 
27 ddelon 378
 
379
		// Filtre identification
12 ddelon 380
 
13 ddelon 381
 
10 ddelon 382
		/**
27 ddelon 383
		 * Action sur login : initialisation filtres pour cette utilisateur
14 ddelon 384
		 * @param user
385
		 */
386
 
387
 
388
		public void onLogin(String user) {
389
 
390
 
391
			this.user=user;
28 ddelon 392
			connexionView.getSignLabel().setText(user+ " (deconnexion)");
393
			inventoryListView.setUser(user);
29 ddelon 394
			dateFilterView.setUser(user);
28 ddelon 395
			entryView.setUser(user);
29 ddelon 396
			locationFilterView.setUser(user);
14 ddelon 397
			this.onInit();
398
 
12 ddelon 399
		}
400
 
14 ddelon 401
 
12 ddelon 402
		/**
14 ddelon 403
		 * Action sur logoff
404
		 * @param user
12 ddelon 405
		 */
406
 
14 ddelon 407
 
408
		public void onLogoff(String user) {
12 ddelon 409
 
14 ddelon 410
			this.user=user;
28 ddelon 411
			connexionView.getSignLabel().setText("Connexion");
412
			inventoryListView.setUser(user);
29 ddelon 413
			dateFilterView.setUser(user);
28 ddelon 414
			entryView.setUser(user);
29 ddelon 415
			locationFilterView.setUser(user);
14 ddelon 416
			this.onInit();
27 ddelon 417
		}
418
 
419
 
420
 
421
		// Filtre recherche contenu
422
 
423
		/**
424
		 * Action sur recherche  : affichage de la liste des taxons correspondants
425
		 */
426
 
427
		public void onSearch(String search) {
428
 
429
			if (search.trim().compareTo("")==0) {
430
				search="all";
431
			}
28 ddelon 432
			inventoryListView.setSearch(search);
433
			inventoryListView.updateCount();
14 ddelon 434
 
10 ddelon 435
		}
12 ddelon 436
 
27 ddelon 437
 
438
 
439
		// Filtre  selection lieu
440
 
10 ddelon 441
		/**
28 ddelon 442
		 * Action sur selection d'un lieu : affichage de la liste des taxons correspondants au filtrage
10 ddelon 443
		 */
444
 
29 ddelon 445
		public void onLocationSelected(String id_loc, String loc,String lieu) {
28 ddelon 446
 
447
			// Positionnement Filtre affichage
29 ddelon 448
			inventoryListView.setIdLocation(id_loc);
28 ddelon 449
			inventoryListView.setLocation(loc);
29 ddelon 450
			inventoryListView.setLieudit(lieu);
28 ddelon 451
			inventoryListView.updateCount();
26 ddelon 452
 
28 ddelon 453
			// Affichage des filtres
454
			inventoryListView.displayFilter();
455
 
27 ddelon 456
 
10 ddelon 457
		}
27 ddelon 458
 
14 ddelon 459
 
12 ddelon 460
 
27 ddelon 461
		// Filtre date d'observation
25 ddelon 462
 
12 ddelon 463
 
464
		/**
27 ddelon 465
		 * Action sur selection d'une date : affichage de la liste des taxons correspondants
12 ddelon 466
		 */
467
 
29 ddelon 468
		public void onDateSelected(String year,String month,String day) {
27 ddelon 469
 
29 ddelon 470
			inventoryListView.setYear(year);
471
			inventoryListView.setMonth(month);
472
			inventoryListView.setDay(day);
473
 
28 ddelon 474
			inventoryListView.updateCount();
12 ddelon 475
 
28 ddelon 476
			inventoryListView.displayFilter();
12 ddelon 477
 
478
 
13 ddelon 479
 
480
		}
481
 
27 ddelon 482
		// Declaration, enregistrement
28 ddelon 483
 
12 ddelon 484
 
485
 
486
 
487
		/**
28 ddelon 488
		 * Declaration date : date observation
489
		 * @param date
10 ddelon 490
		 */
491
 
28 ddelon 492
		public void registerDate(TextBox date) {
493
			this.date=date;
10 ddelon 494
 
495
		}
496
 
12 ddelon 497
 
10 ddelon 498
 
499
		/**
28 ddelon 500
		 * Declaration lieu dit : lieu dit d'observation
501
		 *
29 ddelon 502
		 * @param lieudit
12 ddelon 503
		 */
504
 
28 ddelon 505
		public void registerLieudit(TextBox lieudit) {
506
			this.lieudit=lieudit;
12 ddelon 507
 
508
		}
509
 
28 ddelon 510
 
12 ddelon 511
 
14 ddelon 512
		/**
29 ddelon 513
		 * Declaration station : station d'observation
28 ddelon 514
		 *
29 ddelon 515
		 * @param station
25 ddelon 516
		 */
517
 
29 ddelon 518
		public void registerStation(TextBox station) {
519
			this.station=station;
25 ddelon 520
 
521
		}
522
 
523
		/**
28 ddelon 524
		 * Declaration commentaire b
525
		 * @param commentaire
14 ddelon 526
		 */
12 ddelon 527
 
28 ddelon 528
		public void registerComment(TextBox comment) {
529
			this.comment=comment;
14 ddelon 530
 
531
		}
532
 
10 ddelon 533
 
11 ddelon 534
		/**
27 ddelon 535
		 * Declaration NameAssistant  : completion nom scientifique
11 ddelon 536
		 * @param nameassistant
537
		 */
538
 
539
		public void registerNameAssistant(NameAssistant nameAssistant) {
540
			this.nameAssistant=nameAssistant;
541
 
542
		}
543
 
29 ddelon 544
 
11 ddelon 545
		/**
29 ddelon 546
		 * Declaration DateFilterView : filtre date observation
28 ddelon 547
		 * @param locationList
11 ddelon 548
		 */
549
 
29 ddelon 550
		public void registerDateFilterView(DateFilterView dateFilterView) {
11 ddelon 551
 
29 ddelon 552
			this.dateFilterView=dateFilterView;
11 ddelon 553
		}
12 ddelon 554
 
11 ddelon 555
 
29 ddelon 556
 
557
 
28 ddelon 558
 
12 ddelon 559
		/**
28 ddelon 560
		 * Declaration LocationAssistant : completion commune
561
		 * @param locationassistant
12 ddelon 562
		 */
563
 
28 ddelon 564
		public void registerLocationAssistant(LocationAssistant locationAssistant) {
565
			this.locationAssistant=locationAssistant;
12 ddelon 566
 
567
		}
27 ddelon 568
 
12 ddelon 569
		/**
29 ddelon 570
		 * Declaration LocationFilterView : filtre lieu observation
28 ddelon 571
		 * @param locationList
12 ddelon 572
		 */
573
 
29 ddelon 574
		public void registerLocationFilterView(LocationFilterView locationFilterView) {
12 ddelon 575
 
29 ddelon 576
			this.locationFilterView=locationFilterView;
12 ddelon 577
		}
28 ddelon 578
 
12 ddelon 579
 
580
 
27 ddelon 581
		// Accesseurs et setteurs
25 ddelon 582
 
10 ddelon 583
 
584
		/**
585
		 * Accesseur Url de base
586
		 * @return Url de base
587
		 */
588
 
589
		public String getServiceBaseUrl() {
590
 
591
			return serviceBaseUrl;
592
 
593
		}
594
 
27 ddelon 595
 
10 ddelon 596
		/**
597
		 *  Accesseur Utilisateur
26 ddelon 598
		 * @return utilisateur connecte ou identifiant de session
10 ddelon 599
		 */
600
 
601
		public String getUser() {
602
			return user;
603
		}
14 ddelon 604
 
605
		public void setUser(String user) {
606
			this.user=user;
607
		}
608
 
28 ddelon 609
		public WidgetContainer getCenterContainer() {
610
			return center;
611
		}
11 ddelon 612
 
28 ddelon 613
		public WidgetContainer getNorthContainer() {
614
			return north;
11 ddelon 615
		}
10 ddelon 616
 
28 ddelon 617
		public WidgetContainer getWestContainer() {
618
			return west;
11 ddelon 619
		}
10 ddelon 620
 
28 ddelon 621
		public WidgetContainer getSouthContainer() {
622
			return south;
12 ddelon 623
		}
624
 
625
 
28 ddelon 626
		public InventoryListView getInventoryListView() {
627
			return inventoryListView;
628
		}
629
 
29 ddelon 630
 
631
		public LocationFilterView getLocationFilterView() {
632
			return locationFilterView;
28 ddelon 633
		}
634
 
11 ddelon 635
		public NameAssistant getNameAssistant() {
636
			return nameAssistant;
637
		}
638
 
639
		public LocationAssistant getLocationAssistant() {
640
			return locationAssistant;
641
		}
642
 
12 ddelon 643
		public InventoryItem getInventoryItem() {
644
			return inventoryItem;
645
		}
11 ddelon 646
 
28 ddelon 647
		public EntryView entryView() {
648
			return entryView;
12 ddelon 649
		}
11 ddelon 650
 
12 ddelon 651
 
28 ddelon 652
		public InventoryFilterView getInventoryFilterView() {
653
			return inventoryFilterView;
25 ddelon 654
		}
655
 
656
		public InfoPopup getInfoPopup() {
26 ddelon 657
			if (infoPopup==null) {
658
				infoPopup = new InfoPopup(this);
659
			}
25 ddelon 660
			return infoPopup;
661
		}
662
 
14 ddelon 663
		public void setConnected(boolean connected) {
664
 
665
			this.connected=connected;
666
		}
667
 
668
		public boolean getConnected() {
669
 
670
			return this.connected;
671
		}
12 ddelon 672
 
25 ddelon 673
 
28 ddelon 674
		public ActionView getActionView() {
25 ddelon 675
 
28 ddelon 676
			return this.actionView;
25 ddelon 677
		}
14 ddelon 678
 
10 ddelon 679
	}