Subversion Repositories eFlore/Archives.cel-v1

Rev

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