Subversion Repositories eFlore/Archives.cel-v1

Rev

Rev 27 | Rev 29 | 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 ...
50
		private LocationFilterPanel locationFilterPanel = null; // Filtre sur lieu de releve
51
		private DateFilterPanel dateFilterPanel = null; // Filtre sur date d'observation
52
		private StationFilterPanel stationFilterPanel = null; // Filtre sur station d'observation
53
 
27 ddelon 54
		// Saisie d'une observation
55
 
28 ddelon 56
		private EntryView entryView=null;  // Formulaire de saisie observation
27 ddelon 57
 
58
		private NameAssistant nameAssistant=null; //  Assistant de saisie nom scientifique
59
		private LocationAssistant locationAssistant=null; // Assistant de saisie nom de commune
60
 
61
		private TextBox date = null; // date observation
62
		private TextBox milieu = null;  // milieu observation
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();
111
			viewport.setStyleName("my-border-layout");
112
			viewport.setBorders(true);
113
			viewport.setLayout(new BorderLayout());
114
 
115
 
116
			center = new WidgetContainer();
117
			center.setLayout(new BorderLayout());
118
			center.setBorders(true);
119
 
120
			west = new WidgetContainer();
121
			west.setLayout(new FillLayout());
122
			west.setBorders(true);
123
 
124
			south = new WidgetContainer();
125
			south.setLayout(new FillLayout());
126
			south.setBorders(true);
127
 
128
			north = new WidgetContainer();
129
			north.setLayout(new FillLayout());
130
			north.setBorders(true);
131
 
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
 
28 ddelon 198
			// Filtre par defaut : all et action selection de toutes les stations
14 ddelon 199
 
28 ddelon 200
			locationFilterPanel.setLocation("all");
201
			locationFilterPanel.updateCount();
14 ddelon 202
 
12 ddelon 203
			this.onLocationSelected("all");
204
 
205
		}
206
 
13 ddelon 207
 
27 ddelon 208
		// Actions sur formulaire de saisie
209
 
26 ddelon 210
 
14 ddelon 211
		/**
27 ddelon 212
		 * Action lancee par la completion d'un nom dans un assistant de saisie
213
		 * Recherche d'information complementaires ....
26 ddelon 214
		 *
215
		 * @return void
216
		 */
217
 
218
		public void onComplete(ResponseTextHandler sender, String str, String value) {
219
 
220
			if (sender instanceof NameAssistant) {
221
				onNameCompleted(value);
222
			}
223
 
224
		}
225
 
226
 
27 ddelon 227
		/**
228
		 * Action suivant la completion d'un nom
229
		 *
230
		 */
26 ddelon 231
 
27 ddelon 232
		public void  onNameCompleted(String value) {
233
			if (infoPopup==null) {
234
				infoPopup = new InfoPopup(this);
235
			}
236
			infoPopup.setImageUrl(value);
237
		}
238
 
28 ddelon 239
 
240
 
241
 
27 ddelon 242
 
243
 
26 ddelon 244
		/**
27 ddelon 245
		 * Action prealable a l'ajout d'une observation : controle presence champs requis et lancement mise a jour
246
		 *
247
		 */
248
 
249
		public void onAddInventoryItem() {
250
 
251
			// Lazy instantiation
252
			if (inventoryItem==null) {
28 ddelon 253
				inventoryItem=new InventoryItem(this);
27 ddelon 254
			}
255
 
256
			inventoryItem.setContent(nameAssistant.getText(),nameAssistant.getValue(),locationAssistant.getText(),locationAssistant.getValue(),date.getText(),milieu.getText(),comment.getText(),"null");
28 ddelon 257
			inventoryItem.addelement();
27 ddelon 258
 
259
		}
260
 
261
 
262
 
263
		/**
264
		 * Action prealable a la modification d'une observation : controle presence champs requis et lancement mise a jour
265
		 *
266
		 */
267
 
268
		public void onModifyInventoryItem(String ordre) {
269
 
270
		// Lazy instantiation
271
		if (inventoryItem==null) {
28 ddelon 272
			inventoryItem=new InventoryItem(this);
27 ddelon 273
		}
274
 
275
		inventoryItem.setContent(nameAssistant.getText(),nameAssistant.getValue(),locationAssistant.getText(),locationAssistant.getValue(),date.getText(),milieu.getText(),comment.getText(),ordre);
28 ddelon 276
		inventoryItem.updateElement();
27 ddelon 277
 
278
		}
279
 
280
 
281
 
282
		/**
283
		 * Action lancee par la selection d'un nom dans un assistant de saisie. Lance
284
		 * la recherche d'informations complementaires (famille, numero
26 ddelon 285
		 * nomenclaturaux etc) et met a jour l'inventaire (addelement())
286
		 *
287
		 * @return void
288
		 */
27 ddelon 289
 
290
 
26 ddelon 291
		public void onValidate(SourcesAutoCompleteAsyncTextBoxEvents sender,
292
				  String str, String value) {
293
 
28 ddelon 294
		  	if (entryView.getOrdre()==null) { // Nouvelle observation
26 ddelon 295
				     onAddInventoryItem();
296
			  	}
297
			else {
28 ddelon 298
			     onModifyInventoryItem(entryView.getOrdre());   // Modification d'une observation
299
			     entryView.setOrdre(null);
26 ddelon 300
			 }
301
 
302
		}
303
 
304
 
27 ddelon 305
		// Action portant sur la liste des observations
26 ddelon 306
 
307
		/**
27 ddelon 308
		 * Action suite ajout, modification, suppression d'un element inventaire
14 ddelon 309
		 */
13 ddelon 310
 
14 ddelon 311
 
312
		public void onInventoryUpdated(String location) {
28 ddelon 313
 
314
			if (location.compareTo("")==0) {
315
				location="000null";
316
			}
14 ddelon 317
 
28 ddelon 318
			locationFilterPanel.setLocation(location); // Mise a jour filtre localite
319
			locationFilterPanel.updateCount();
14 ddelon 320
 
27 ddelon 321
			this.onLocationSelected(location); // Selection localite
14 ddelon 322
 
323
		}
324
 
325
 
13 ddelon 326
		/**
327
		 * Action sur selection d'une observation : affichage du detail
328
		 */
329
 
330
		public void onInventoryItemSelected(String ordre) {
331
 
28 ddelon 332
			entryView.setOrdre(ordre); // Mise a jour du formulaire de saisie avec l'element selectionne
333
			entryView.update();
13 ddelon 334
 
335
		}
12 ddelon 336
 
13 ddelon 337
 
338
		/**
27 ddelon 339
		 * Action sur deselection d'une observation : remise a zero
26 ddelon 340
		 */
341
 
28 ddelon 342
		public void onInventoryItemUnselected() {
26 ddelon 343
 
28 ddelon 344
			entryView.setOrdre(null); //  Mise a jour du formulaire de saisie avec l'element selectionne
26 ddelon 345
 
346
		}
347
 
348
 
349
 
27 ddelon 350
		// Action sur Filtrage
13 ddelon 351
 
27 ddelon 352
 
353
		// Filtre identification
12 ddelon 354
 
13 ddelon 355
 
10 ddelon 356
		/**
27 ddelon 357
		 * Action sur login : initialisation filtres pour cette utilisateur
14 ddelon 358
		 * @param user
359
		 */
360
 
361
 
362
		public void onLogin(String user) {
363
 
364
 
365
			this.user=user;
28 ddelon 366
			connexionView.getSignLabel().setText(user+ " (deconnexion)");
367
			inventoryListView.setUser(user);
368
			dateFilterPanel.setUser(user);
369
			stationFilterPanel.setUser(user);
370
			entryView.setUser(user);
371
			locationFilterPanel.setUser(user);
14 ddelon 372
			this.onInit();
373
 
12 ddelon 374
		}
375
 
14 ddelon 376
 
12 ddelon 377
		/**
14 ddelon 378
		 * Action sur logoff
379
		 * @param user
12 ddelon 380
		 */
381
 
14 ddelon 382
 
383
		public void onLogoff(String user) {
12 ddelon 384
 
14 ddelon 385
			this.user=user;
28 ddelon 386
			connexionView.getSignLabel().setText("Connexion");
387
			inventoryListView.setUser(user);
388
			dateFilterPanel.setUser(user);
389
			stationFilterPanel.setUser(user);
390
			entryView.setUser(user);
391
			locationFilterPanel.setUser(user);
14 ddelon 392
			this.onInit();
27 ddelon 393
		}
394
 
395
 
396
 
397
		// Filtre recherche contenu
398
 
399
		/**
400
		 * Action sur recherche  : affichage de la liste des taxons correspondants
401
		 */
402
 
403
		public void onSearch(String search) {
404
 
405
			if (search.trim().compareTo("")==0) {
406
				search="all";
407
			}
28 ddelon 408
			inventoryListView.setSearch(search);
409
			inventoryListView.updateCount();
14 ddelon 410
 
10 ddelon 411
		}
12 ddelon 412
 
27 ddelon 413
 
414
 
415
		// Filtre  selection lieu
416
 
10 ddelon 417
		/**
28 ddelon 418
		 * Action sur selection d'un lieu : affichage de la liste des taxons correspondants au filtrage
10 ddelon 419
		 */
420
 
27 ddelon 421
		public void onLocationSelected(String loc) {
28 ddelon 422
 
423
			// Positionnement Filtre affichage
424
			inventoryListView.setLocation(loc);
425
			inventoryListView.updateCount();
26 ddelon 426
 
28 ddelon 427
			// Affichage des filtres
428
			inventoryListView.displayFilter();
429
 
430
			// Positionnement Filtre affichage
431
 
432
			dateFilterPanel.setLocation(loc);
433
			dateFilterPanel.updateCount();
434
 
435
			// Positionnement Filtre affichage
436
 
437
			stationFilterPanel.setLocation(loc);
438
			stationFilterPanel.updateCount();
27 ddelon 439
 
10 ddelon 440
		}
27 ddelon 441
 
14 ddelon 442
 
27 ddelon 443
		// Filtre station
10 ddelon 444
 
445
		/**
27 ddelon 446
		 * Action sur selection d'une station : affichage de la liste des taxons correspondants
12 ddelon 447
		 */
14 ddelon 448
 
27 ddelon 449
		public void onStationSelected(String station) {
12 ddelon 450
 
28 ddelon 451
			inventoryListView.setStation(station);
452
			inventoryListView.updateCount();
26 ddelon 453
 
28 ddelon 454
			inventoryListView.displayFilter();
26 ddelon 455
 
12 ddelon 456
 
25 ddelon 457
 
12 ddelon 458
		}
14 ddelon 459
 
27 ddelon 460
		// Filtre date d'observation
25 ddelon 461
 
12 ddelon 462
 
463
		/**
27 ddelon 464
		 * Action sur selection d'une date : affichage de la liste des taxons correspondants
12 ddelon 465
		 */
466
 
27 ddelon 467
		public void onDateSelected(String date) {
468
 
28 ddelon 469
			inventoryListView.setDate(date);
470
			inventoryListView.updateCount();
12 ddelon 471
 
28 ddelon 472
			inventoryListView.displayFilter();
12 ddelon 473
 
474
 
13 ddelon 475
 
476
		}
477
 
27 ddelon 478
		// Declaration, enregistrement
28 ddelon 479
 
12 ddelon 480
 
481
 
482
 
483
		/**
28 ddelon 484
		 * Declaration date : date observation
485
		 * @param date
10 ddelon 486
		 */
487
 
28 ddelon 488
		public void registerDate(TextBox date) {
489
			this.date=date;
10 ddelon 490
 
491
		}
492
 
12 ddelon 493
 
10 ddelon 494
 
495
		/**
28 ddelon 496
		 * Declaration lieu dit : lieu dit d'observation
497
		 *
498
		 * @param milieu
12 ddelon 499
		 */
500
 
28 ddelon 501
		public void registerLieudit(TextBox lieudit) {
502
			this.lieudit=lieudit;
12 ddelon 503
 
504
		}
505
 
28 ddelon 506
 
12 ddelon 507
 
14 ddelon 508
		/**
28 ddelon 509
		 * Declaration milieu : milieu d'observation
510
		 *
511
		 * @param milieu
25 ddelon 512
		 */
513
 
28 ddelon 514
		public void registerMilieu(TextBox milieu) {
515
			this.milieu=milieu;
25 ddelon 516
 
517
		}
518
 
519
		/**
28 ddelon 520
		 * Declaration commentaire b
521
		 * @param commentaire
14 ddelon 522
		 */
12 ddelon 523
 
28 ddelon 524
		public void registerComment(TextBox comment) {
525
			this.comment=comment;
14 ddelon 526
 
527
		}
528
 
10 ddelon 529
 
11 ddelon 530
		/**
27 ddelon 531
		 * Declaration NameAssistant  : completion nom scientifique
11 ddelon 532
		 * @param nameassistant
533
		 */
534
 
535
		public void registerNameAssistant(NameAssistant nameAssistant) {
536
			this.nameAssistant=nameAssistant;
537
 
538
		}
539
 
28 ddelon 540
 
11 ddelon 541
		/**
28 ddelon 542
		 * Declaration DateFilterPanel : filtre date observation
543
		 * @param locationList
11 ddelon 544
		 */
545
 
28 ddelon 546
		public void registerDateFilterPanel(DateFilterPanel dateFilterPanel) {
11 ddelon 547
 
28 ddelon 548
			this.dateFilterPanel=dateFilterPanel;
11 ddelon 549
		}
12 ddelon 550
 
11 ddelon 551
 
28 ddelon 552
 
12 ddelon 553
		/**
28 ddelon 554
		 * Declaration LocationAssistant : completion commune
555
		 * @param locationassistant
12 ddelon 556
		 */
557
 
28 ddelon 558
		public void registerLocationAssistant(LocationAssistant locationAssistant) {
559
			this.locationAssistant=locationAssistant;
12 ddelon 560
 
561
		}
27 ddelon 562
 
12 ddelon 563
		/**
28 ddelon 564
		 * Declaration LocationFilterPanel : filtre lieu observation
565
		 * @param locationList
12 ddelon 566
		 */
567
 
28 ddelon 568
		public void registerLocationFilterPanel(LocationFilterPanel locationFilterPanel) {
12 ddelon 569
 
28 ddelon 570
			this.locationFilterPanel=locationFilterPanel;
12 ddelon 571
		}
28 ddelon 572
 
12 ddelon 573
 
27 ddelon 574
		/**
28 ddelon 575
		 * Declaration StationFilterPanel : filtre par station
576
		 * @param locationList
27 ddelon 577
		 */
12 ddelon 578
 
28 ddelon 579
		public void registerStationFilterPanel(StationFilterPanel stationFilterPanel) {
12 ddelon 580
 
28 ddelon 581
			this.stationFilterPanel=stationFilterPanel;
12 ddelon 582
		}
583
 
584
 
25 ddelon 585
 
27 ddelon 586
		// Accesseurs et setteurs
25 ddelon 587
 
10 ddelon 588
 
589
		/**
590
		 * Accesseur Url de base
591
		 * @return Url de base
592
		 */
593
 
594
		public String getServiceBaseUrl() {
595
 
596
			return serviceBaseUrl;
597
 
598
		}
599
 
27 ddelon 600
 
10 ddelon 601
		/**
602
		 *  Accesseur Utilisateur
26 ddelon 603
		 * @return utilisateur connecte ou identifiant de session
10 ddelon 604
		 */
605
 
606
		public String getUser() {
607
			return user;
608
		}
14 ddelon 609
 
610
		public void setUser(String user) {
611
			this.user=user;
612
		}
613
 
28 ddelon 614
		public WidgetContainer getCenterContainer() {
615
			return center;
616
		}
11 ddelon 617
 
28 ddelon 618
		public WidgetContainer getNorthContainer() {
619
			return north;
11 ddelon 620
		}
10 ddelon 621
 
28 ddelon 622
		public WidgetContainer getWestContainer() {
623
			return west;
11 ddelon 624
		}
10 ddelon 625
 
28 ddelon 626
		public WidgetContainer getSouthContainer() {
627
			return south;
12 ddelon 628
		}
629
 
630
 
28 ddelon 631
		public InventoryListView getInventoryListView() {
632
			return inventoryListView;
633
		}
634
 
635
		public LocationFilterPanel getLocationList() {
636
			return locationFilterPanel;
637
		}
638
 
11 ddelon 639
		public NameAssistant getNameAssistant() {
640
			return nameAssistant;
641
		}
642
 
643
		public LocationAssistant getLocationAssistant() {
644
			return locationAssistant;
645
		}
646
 
12 ddelon 647
		public InventoryItem getInventoryItem() {
648
			return inventoryItem;
649
		}
11 ddelon 650
 
28 ddelon 651
		public EntryView entryView() {
652
			return entryView;
12 ddelon 653
		}
11 ddelon 654
 
12 ddelon 655
 
28 ddelon 656
		public InventoryFilterView getInventoryFilterView() {
657
			return inventoryFilterView;
25 ddelon 658
		}
659
 
660
		public InfoPopup getInfoPopup() {
26 ddelon 661
			if (infoPopup==null) {
662
				infoPopup = new InfoPopup(this);
663
			}
25 ddelon 664
			return infoPopup;
665
		}
666
 
14 ddelon 667
		public void setConnected(boolean connected) {
668
 
669
			this.connected=connected;
670
		}
671
 
672
		public boolean getConnected() {
673
 
674
			return this.connected;
675
		}
12 ddelon 676
 
25 ddelon 677
 
28 ddelon 678
		public ActionView getActionView() {
25 ddelon 679
 
28 ddelon 680
			return this.actionView;
25 ddelon 681
		}
14 ddelon 682
 
10 ddelon 683
	}