Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
195 david 1
package org.tela_botanica.client.vues.image;
3 aperonnet 2
 
2726 aurelien 3
import java.util.HashMap;
61 jpm 4
import java.util.Iterator;
5
 
2615 aurelien 6
import org.tela_botanica.client.i18n.Msg;
3 aperonnet 7
import org.tela_botanica.client.image.ImageMediateur;
401 aurelien 8
import org.tela_botanica.client.interfaces.ListePaginable;
3 aperonnet 9
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 10
import org.tela_botanica.client.modeles.objets.ListeObservation;
11
import org.tela_botanica.client.modeles.objets.Observation;
2726 aurelien 12
import org.tela_botanica.client.modeles.objets.Ontologies;
721 aurelien 13
import org.tela_botanica.client.util.Util;
401 aurelien 14
import org.tela_botanica.client.vues.MiniBarrePaginationVue;
3 aperonnet 15
 
2726 aurelien 16
import com.google.gwt.user.client.Timer;
61 jpm 17
import com.google.gwt.user.client.Window;
99 jpm 18
import com.gwtext.client.data.Record;
3 aperonnet 19
import com.gwtext.client.data.SimpleStore;
20
import com.gwtext.client.data.Store;
21
import com.gwtext.client.dd.DragSource;
22
import com.gwtext.client.dd.DropTarget;
23
import com.gwtext.client.dd.DropTargetConfig;
24
import com.gwtext.client.widgets.Component;
155 aurelien 25
import com.gwtext.client.widgets.Container;
99 jpm 26
import com.gwtext.client.widgets.Toolbar;
3 aperonnet 27
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
99 jpm 28
import com.gwtext.client.widgets.form.ComboBox;
29
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
401 aurelien 30
import com.gwtext.client.widgets.grid.CellMetadata;
3 aperonnet 31
import com.gwtext.client.widgets.grid.ColumnConfig;
32
import com.gwtext.client.widgets.grid.ColumnModel;
33
import com.gwtext.client.widgets.grid.GridDragData;
34
import com.gwtext.client.widgets.grid.GridPanel;
401 aurelien 35
import com.gwtext.client.widgets.grid.Renderer;
2457 aurelien 36
import com.gwtext.client.widgets.grid.RowSelectionModel;
2726 aurelien 37
import com.gwtext.client.widgets.grid.event.GridHeaderListenerAdapter;
62 jpm 38
import com.gwtext.client.widgets.grid.event.GridListenerAdapter;
2457 aurelien 39
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
401 aurelien 40
import com.gwtext.client.widgets.menu.BaseItem;
41
import com.gwtext.client.widgets.menu.Item;
42
import com.gwtext.client.widgets.menu.Menu;
43
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
3 aperonnet 44
import com.gwtext.client.core.EventObject;
99 jpm 45
import com.gwtext.client.core.Ext;
46
import com.gwtext.client.core.ExtElement;
2726 aurelien 47
import com.gwtext.client.core.SortDir;
3 aperonnet 48
import com.gwtext.client.dd.DragData;
49
 
5 aperonnet 50
/**
63 jpm 51
 * liste d'observation pour l'association d'images aux observations
5 aperonnet 52
 * @author aurelien
53
 *
54
 */
401 aurelien 55
public class MiniListeObservationVue extends GridPanel implements Rafraichissable, ListePaginable {
3 aperonnet 56
 
5 aperonnet 57
	/**
58
	 * Le médiateur associé à la vue
59
	 */
3 aperonnet 60
	private ImageMediateur iMediateur = null ;
61
 
5 aperonnet 62
	/**
63
	 * Booléen d'instanciation
64
	 */
3 aperonnet 65
	private boolean estInstancie = false ;
66
 
5 aperonnet 67
	/**
68
	 * Le modèle de colonnes
69
	 */
70
	private ColumnModel colModel = null ;
71
 
61 jpm 72
	private SimpleStore store = null ;
73
 
408 aurelien 74
	private MiniBarrePaginationVue pgBar = new MiniBarrePaginationVue(this) ;
99 jpm 75
 
76
	private Toolbar bt = new Toolbar() ;
77
 
5 aperonnet 78
	/**
99 jpm 79
	 * Combobox permettant de selectionner le mode
80
	 * modification ou bien création
81
	 */
82
	private ComboBox selecteurMode = new ComboBox();
83
 
84
	Store storeMode = null ;
85
 
86
	private boolean liaison;
87
 
401 aurelien 88
	int pageEnCours = 0;
89
 
408 aurelien 90
	int nbElements = 0;
91
 
92
	int taillePage = 50;
93
 
2568 aurelien 94
	private String modeleLieu = "IDLOCLOCALITE, LIEUDIT, STATION";
638 aurelien 95
 
99 jpm 96
	/**
408 aurelien 97
	 * Nombre de pages totales
98
	 */
99
	private int pageMax = 1 ;
100
 
2726 aurelien 101
	private SortDir directionTri;
102
 
103
	private String champTri;
104
 
105
	private boolean triActif;
106
 
408 aurelien 107
	/**
5 aperonnet 108
	 * Constructeur avec arguments
109
	 * @param im le médiateur à associer à la vue
110
	 */
3 aperonnet 111
	public MiniListeObservationVue(ImageMediateur im)
112
	{
113
		iMediateur = im ;
114
 
2726 aurelien 115
		directionTri = SortDir.ASC;
116
 
3 aperonnet 117
		this.setId("x-view-mini-obs") ;
5 aperonnet 118
 
408 aurelien 119
		// on construit le modèle de colonnes
120
 
973 aurelien 121
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir)
408 aurelien 122
		Renderer colRend = new Renderer() {
123
 
1292 aurelien 124
			@Override
408 aurelien 125
			public String render(Object value, CellMetadata cellMetadata,
126
					Record record, int rowIndex, int colNum, Store store) {
127
 
128
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
129
 
130
					return "" ;
131
				}
132
 
133
				return value.toString() ;
134
			}
135
 
136
		} ;
137
 
138
		Renderer dateRend = new Renderer() {
139
 
1292 aurelien 140
			@Override
408 aurelien 141
			public String render(Object value, CellMetadata cellMetadata,
142
					Record record, int rowIndex, int colNum, Store store) {
143
 
144
				if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
145
 
146
					return "" ;
147
				}
148
				else
149
				{
150
					String dateEntiere = value.toString() ;
151
					String[] dateEtHeure = dateEntiere.split(" ", 2);
152
					if(verifierFormatDate(dateEtHeure[0])) {
153
						String[] dateFormateeTab = dateEtHeure[0].split("-",3);
154
						return dateFormateeTab[2]+"/"+dateFormateeTab[1]+"/"+dateFormateeTab[0] ;
155
					}
156
				}
157
 
158
				return value.toString() ;
159
			}
160
 
161
		} ;
162
 
5 aperonnet 163
		// on crée un store simple contenant un petit set de données et deux colonnes
2726 aurelien 164
		store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, getObs());
401 aurelien 165
		ColumnConfig[] columns = {
166
		new ColumnConfig("", "transmis", 30, true, new Renderer() {
167
 
1292 aurelien 168
			@Override
401 aurelien 169
			public String render(Object value, CellMetadata cellMetadata,
170
					Record record, int rowIndex, int colNum, Store store) {
171
				if(value.equals("1"))
172
				{
173
					return "<img src=\"tela.png\"/></img>" ;
174
				}
175
				else
176
				{
177
					return "" ;
178
				}
179
			}
180
 
638 aurelien 181
		}),
2726 aurelien 182
		new ColumnConfig(Msg.get("taxon"), "nomSaisi_observation", 145, true, colRend),
183
		new ColumnConfig(Msg.get("date"), "date_observation", 68, true, dateRend),
184
		new ColumnConfig(Msg.get("lieu"), "lieu_observation", 145, true, colRend),
185
		new ColumnConfig(Msg.get("numero"), "ordre_observation", 50, true, colRend), } ;
3 aperonnet 186
 
2615 aurelien 187
 
5 aperonnet 188
        ColumnModel columnModel = new ColumnModel(columns);
189
 
190
        colModel = columnModel ;
155 aurelien 191
 
5 aperonnet 192
 
2615 aurelien 193
        setTitle(Msg.get("observations"));
5 aperonnet 194
        // on associe le modèle de colonnes
195
        setColumnModel(columnModel);
62 jpm 196
        setAutoScroll(true) ;
197
        setHeight("100%") ;
198
		setAutoWidth(true) ;
5 aperonnet 199
        // on autorise le drag 'n drop pour un certain groupe
3 aperonnet 200
 		this.setEnableDragDrop(true);
201
 		this.setDdGroup("DragGroupName");
5 aperonnet 202
        store.load();
203
		setStore(store) ;
204
 
401 aurelien 205
		setBottomToolbar(pgBar) ;
2615 aurelien 206
		Object[][] mode = {{Msg.get("toutes-observations"),false} , {Msg.get("observations-liees"), true} };
99 jpm 207
		storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },
208
				mode);
209
		storeMode.load();
210
		selecteurMode.setStore(storeMode);
211
		selecteurMode.setDisplayField("nom_mode") ;
212
		selecteurMode.setLabel("mode ") ;
213
		selecteurMode.setForceSelection(true) ;
2615 aurelien 214
		selecteurMode.setValue(Msg.get("toutes-observations")) ;
99 jpm 215
		selecteurMode.setEditable(false) ;
100 jpm 216
		selecteurMode.setCls("x-selec-consult") ;
99 jpm 217
 
218
		bt = new Toolbar() ;
219
		bt.addField(selecteurMode) ;
220
 
155 aurelien 221
		//this.setAutoExpandColumn("plante");
222
 
99 jpm 223
		setTopToolbar(bt) ;
224
 
2726 aurelien 225
		this.addGridHeaderListener(new GridHeaderListenerAdapter() {
226
			@Override
227
			public void onHeaderClick(GridPanel grid, int colIndex, EventObject e) {
228
				triActif = true;
229
				Timer t = new Timer() {
230
 
231
					@Override
232
					public void run() {
233
						enregistrerEtatTri();
234
						// Trier ne change pas le nombre de pages, on peut donc se passer d'un appel
235
						// au comptage (ce serait mieux si ces deux appels étaient combinés)
236
						obtenirMiniListeObservations();
237
					}
238
				};
239
				// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite
240
				// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas)
241
				// #mondeDeMerde
242
				t.schedule(200);
243
			}
244
		});
245
 
99 jpm 246
		selecteurMode.addListener(new ComboBoxListenerAdapter() {
247
 
1292 aurelien 248
			@Override
99 jpm 249
			public void onSelect(ComboBox comboBox, Record record, int index) {
250
 
251
				// et on met la valeur à jour dans la combobox
252
				comboBox.setValue(record.getAsString("nom_mode"));
253
				setModification(record.getAsString("mode")) ;
254
			}
255
 
256
		});
257
 
62 jpm 258
		setAutoScroll(true) ;
5 aperonnet 259
		// on configure le drag 'n drop
260
		configDragAndDrop() ;
61 jpm 261
 
2457 aurelien 262
 
62 jpm 263
		this.addGridListener(new GridListenerAdapter() {
264
 
1292 aurelien 265
			@Override
62 jpm 266
			public void onContextMenu(EventObject e) {
267
 
2726 aurelien 268
				// si pas de selection, on selectionne au moins la ligne sur laquelle on a fait le clic
401 aurelien 269
				if(getSelectionModel().getSelections().length <= 0) {
270
					int index = getView().findRowIndex(e);
271
			  		Record rddrop = getStore().getRecordAt(index) ;
272
					getSelectionModel().selectRecords(rddrop);
273
				}
274
 
62 jpm 275
				e.stopEvent() ;
104 jpm 276
				MenuLiaisonVue mlv = new MenuLiaisonVue(iMediateur,liaison) ;
62 jpm 277
				mlv.showAt(e.getXY()) ;
278
 
279
			}
280
 
401 aurelien 281
		}) ;
408 aurelien 282
 
2457 aurelien 283
		// TODO: voir s'il existe un autre moyen de désactiver la multiselection
284
		// ça semble bien compliqué de faire comme ça
285
		getSelectionModel().addListener(new RowSelectionListenerAdapter() {
286
			@Override
287
			public boolean doBeforeRowSelect(RowSelectionModel sm, int rowIndex,
288
					boolean keepExisting, Record record) {
289
				sm.clearSelections();
290
				return true;
291
			}
292
		});
293
 
408 aurelien 294
		obtenirNombreMiniListeObservations();
3 aperonnet 295
	}
296
 
5 aperonnet 297
	/**
298
	 * Configure le drag 'n drop pour la liste
299
	 */
300
	private void configDragAndDrop()
3 aperonnet 301
	{
302
		// on choisit le texte qui sera affiché lors d'un drag 'n drop
2615 aurelien 303
		setDragDropText(Msg.get("glissez-deposer-obs-images")) ;
3 aperonnet 304
 
305
		//On active le drag 'n drop
306
		this.setEnableDragDrop(true);
307
 
308
		// on fabrique la nouvelle configuration
309
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
310
		this.setDdGroup("DragGroupName");
311
		DropTargetConfig dtc = new DropTargetConfig();
312
		dtc.setdDdGroup("DragGroupName");
313
 
314
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
315
		@SuppressWarnings("unused")
316
		DropTarget tg = new DropTarget(this, dtc)
317
		{
1292 aurelien 318
			@Override
62 jpm 319
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){
3 aperonnet 320
 
321
				// si on reçoit des données provenant d'une grille
322
				if(data instanceof GridDragData)
323
		    	  {
324
					// on la convertit
325
		    		  	GridDragData gdd = (GridDragData)data ;
326
		    		  	// et on vérifie que les données ne viennent pas de l'élément courant
327
		    		  	if(gdd.getGrid().getId().equals("x-view-mini-obs"))
328
		    		  	{
329
		    		  		return false ;
330
		    		  	}
331
		    		  	else
332
		    		  	{
333
		    		  		// on appelle le médiateur
334
		    		  		return iMediateur.lierImagesDD(source, e, data) ;
335
		    		  	}
336
		    	  }
337
				return false ;
338
			}
339
 
1292 aurelien 340
			@Override
3 aperonnet 341
			public String notifyOver(DragSource source, EventObject e, DragData data){
342
			    return "x-dd-drop-ok";
343
			}
344
		};
345
 
346
	}
347
 
5 aperonnet 348
	/**
349
	 * Méthode héritée de l'interface rafraichissable
350
	 */
1292 aurelien 351
	@Override
3 aperonnet 352
	public void rafraichir(Object nouvelleDonnees,
353
			boolean repandreRaffraichissement) {
354
 
61 jpm 355
		if(nouvelleDonnees instanceof ListeObservation)
356
		{
63 jpm 357
			if(this.getView() != null)
61 jpm 358
			{
63 jpm 359
				ListeObservation data = (ListeObservation)nouvelleDonnees ;
973 aurelien 360
				String[][] listeObs = new String[data.size()][6] ;
63 jpm 361
				int i = 0 ;
61 jpm 362
 
63 jpm 363
				for (Iterator it = data.keySet().iterator(); it.hasNext();)
364
				{
365
 
1292 aurelien 366
					Observation obs=data.get(it.next());
63 jpm 367
 
638 aurelien 368
					listeObs[i][0] = obs.getTransmis();
369
					listeObs[i][1] = obs.getNomSaisi();
370
					listeObs[i][2] = obs.getDate() ;
371
					listeObs[i][3] = Util.formaterLieu(obs, modeleLieu);
372
					listeObs[i][4] = obs.getNumeroOrdre();
973 aurelien 373
					listeObs[i][5] = obs.getId();
61 jpm 374
 
63 jpm 375
					i++ ;
376
				}
377
 
2726 aurelien 378
				store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, listeObs);
379
				store.sort(champTri, directionTri);
63 jpm 380
				store.load();
381
				this.reconfigure(store, colModel) ;
61 jpm 382
			}
63 jpm 383
			else
384
			{
385
				addListener(new ContainerListenerAdapter() {
386
 
1292 aurelien 387
					@Override
63 jpm 388
					public void onShow(Component c)
389
					{
408 aurelien 390
						obtenirNombreMiniListeObservations() ;
63 jpm 391
					}
392
 
1292 aurelien 393
					@Override
173 aurelien 394
					public void onAfterLayout(Container c)
395
					{
408 aurelien 396
						obtenirNombreMiniListeObservations() ;
173 aurelien 397
					}
398
 
63 jpm 399
				}) ;
400
			}
61 jpm 401
 
402
		}
403
 
408 aurelien 404
		// Si on reçoit un tableau d'entiers
405
		// c'est un tableau d'un seul entier qui est le nombre d'observation correspondant aux critères
406
		if(nouvelleDonnees instanceof int[])
407
		{
408
			int[] pages = (int[])nouvelleDonnees ;
409
 
410
			// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
411
			pageMax  = calculerNbPages(pages[0]) ;
412
			nbElements = pages[0];
413
 
414
			// et on notifie de le mediateur du changement des valeurs
415
			changerPageMaxEtCourante(pageMax,pageEnCours,taillePage,nbElements) ;
416
 
417
			masquerChargement();
418
			obtenirMiniListeObservations();
419
		}
420
 
421
		redimensionner();
422
 
99 jpm 423
		deMasquerChargement() ;
424
 
3 aperonnet 425
	}
426
 
61 jpm 427
	private void obtenirMiniListeObservations()
428
	{
408 aurelien 429
		iMediateur.obtenirMiniListeObservations(this, taillePage, pageEnCours) ;
61 jpm 430
	}
431
 
408 aurelien 432
	private void obtenirNombreMiniListeObservations()
433
	{
434
		iMediateur.obtenirNombreMiniListeObservations(this) ;
435
	}
436
 
5 aperonnet 437
	/**
438
	 * Renvoie le faux set de données pour le store
439
	 * @return un tableau à deux colonnes int - String
440
	 */
441
	private Object[][] getObs() {
3 aperonnet 442
	         return new Object[][]{
61 jpm 443
 
3 aperonnet 444
	         } ;
445
	 }
61 jpm 446
 
1292 aurelien 447
	@Override
62 jpm 448
	public Store getStore()
449
	{
450
		return store ;
451
	}
61 jpm 452
 
401 aurelien 453
	public MiniBarrePaginationVue getBarrePagination()
99 jpm 454
	{
455
		return pgBar ;
401 aurelien 456
	}
62 jpm 457
 
99 jpm 458
	private void setModification(String mode)
459
	{
460
		if(mode.equals("true")) {
3 aperonnet 461
 
99 jpm 462
			liaison = true ;
463
			selecteurMode.removeClass("x-selec-consult") ;
464
			selecteurMode.setCls("x-selec-liaison") ;
408 aurelien 465
			getBarrePagination().disable();
466
			doLayout();
99 jpm 467
		}
468
		else
469
		{
470
			liaison = false ;
471
			selecteurMode.removeClass("x-selec-liaison") ;
472
			selecteurMode.setCls("x-selec-consult") ;
408 aurelien 473
			getBarrePagination().enable();
474
			doLayout();
99 jpm 475
		}
476
 
477
		store.removeAll() ;
478
		iMediateur.changerModeLiaison(liaison) ;
479
 
480
	}
481
 
482
	public boolean getMode() {
483
		return liaison ;
484
	}
485
 
486
	/**
487
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
488
	 */
489
	public void masquerChargement()
490
	{
491
			ExtElement masked = Ext.get(getId()) ;
492
 
493
			if (masked!=null) {
2615 aurelien 494
				masked.mask(Msg.get("chargement")) ;
99 jpm 495
			}
496
	}
497
 
498
	/**
499
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
500
	 */
501
	public void deMasquerChargement()
502
	{
503
			ExtElement masked = Ext.get(getId()) ;
504
 
505
			if (masked!=null) {
506
				masked.unmask() ;
507
			}
508
	}
509
 
104 jpm 510
	public String getIdSelectionnees() {
511
 
512
		Record[] sels = getSelectionModel().getSelections() ;
513
 
408 aurelien 514
		String id = "";
515
 
516
		for(int i = 0; i < sels.length; i++) {
517
			id += ","+sels[i].getAsString("id_obs") ;
518
		}
519
 
520
		id = id.replaceFirst(",", "");
521
 
104 jpm 522
		return id ;
523
 
524
	}
99 jpm 525
 
104 jpm 526
	public void supprimerLiaison() {
527
 
528
 
529
		Record[] rdObs = getSelectionModel().getSelections() ;
530
 
531
		for(int i = 0 ; i < rdObs.length ; i++) {
532
 
533
			getStore().remove(rdObs[i]) ;
534
			this.getView().refresh() ;
535
 
536
		}
537
 
538
	}
539
 
155 aurelien 540
	public void redimensionner() {
541
		if(getView() != null) {
408 aurelien 542
 
543
			int taille = 400;
544
 
545
			if(Window.getClientHeight() > 800 ) {
546
				taille = Window.getClientHeight() - 350;
547
			}
548
			setHeight(taille);
549
			getView().setForceFit(true);
550
			doLayout();
155 aurelien 551
		}
552
		else {
408 aurelien 553
 
155 aurelien 554
		}
555
	}
401 aurelien 556
 
557
	/**
558
	 * Montre le menu de liaison aux coordonnées indiquées
559
	 * @param e
560
	 */
561
	public void montrerContextMenuLiaison(EventObject e) {
562
 
563
		final Menu liObs = new Menu();
2615 aurelien 564
 
565
		final Item lierObservation = new Item(Msg.get("lier-images-selectionnes"));
401 aurelien 566
		liObs.addItem(lierObservation);
567
 
568
		liObs.addListener(new MenuListenerAdapter() {
569
 
570
			// gestion du clic sur un item
1292 aurelien 571
			@Override
401 aurelien 572
			public void onItemClick(BaseItem item, EventObject ev) {
573
 
574
				// si c'est la suppression
575
				if (item.equals(lierObservation)) {
576
					// on notifie le médiateur
577
 
578
				}
579
 
580
				// enfin, on cache le menu
581
				liObs.hide();
582
 
583
			}
584
 
585
		});
586
 
587
		liObs.showAt(e.getXY());
588
	}
589
 
1292 aurelien 590
	@Override
401 aurelien 591
	public void changerNumeroPage(int pageCourante) {
592
 
593
		pageEnCours = pageCourante ;
594
		masquerChargement();
595
 
596
		// On lance le chargerment des observations
408 aurelien 597
		iMediateur.obtenirNombreMiniListeObservations(this);
401 aurelien 598
 
408 aurelien 599
	}
600
 
601
	/**
602
	 * Appelle le modèle pour qu'il change la taille de page utilisée
603
	 * @param nouvelleTaillePage la nouvelle taille de page
604
	 */
605
 
1292 aurelien 606
	@Override
408 aurelien 607
	public void changerTaillePage(int nouvelleTaillePage)
608
	{
609
 
610
		taillePage = nouvelleTaillePage ;
611
		pageEnCours = calculerPageCourante(nbElements) ;
612
 
613
		masquerChargement();
614
 
615
		// On lance le chargerment des observations
616
		iMediateur.obtenirNombreMiniListeObservations(this);
401 aurelien 617
 
408 aurelien 618
 
619
		// et on met à jour la taille de page dans les barres d'outils
620
		pgBar.selectionnerTaillePage(nouvelleTaillePage);
621
 
622
 
401 aurelien 623
	}
408 aurelien 624
 
625
	/**
626
	 * Met à jour les barre d'outils avec des nouvelles valeurs
627
	 * @param pageMax le nombre de pages
628
	 * @param pageEncours la page en cours
629
	 * @param taillePage la taille de page
630
	 * @param nbElement le nombre d'élements par page
631
	 */
632
	public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement)
633
	{
634
 
635
		int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
636
		pgBar.rafraichir(pages, false) ;
637
 
638
	}
639
 
640
	/**
641
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
642
	 * en cours
643
	 * @param nbElements le nombre d'élements total
644
	 * @return le nombre de pages
645
	 */
646
	public int calculerNbPages(int nbElements)
647
	{
648
		// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
649
		// pour eviter qu'il arrondisse mal la division
650
		// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur
651
 
652
		double nPage = (1.0*nbElements)/(1.0*taillePage) ;
653
		double nPageRound = Math.ceil(nPage) ;
654
		Double nPageInt = new Double(nPageRound) ;
655
 
656
		// on convertit en entier
657
		return nPageInt.intValue() ;
658
	}
401 aurelien 659
 
408 aurelien 660
 
661
	/**
662
	 * Recalcule la page en cours lors du changement du nombre d'élements
663
	 * @param nbElements le nombre d'élements total
664
	 * @return la nouvelle page encours
665
	 */
666
	public int calculerPageCourante(int nbElements)
667
	{
668
		// on calcule le nombre de page
669
		int nouvelNbPages = calculerNbPages(nbElements) ;
670
		// la nouvelle page en cours
671
		double nPageCourante = (1.0*pageEnCours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
401 aurelien 672
 
408 aurelien 673
		// on arrondit au supérieur
674
		double nPageRound = Math.ceil(nPageCourante) ;
675
		Double nPageInt = new Double(nPageRound) ;
676
 
677
		// on convertit en entier
678
		return Math.abs(nPageInt.intValue()) ;
401 aurelien 679
	}
408 aurelien 680
 
681
	public boolean verifierFormatDate(String date) {
682
 
683
		String regex = "[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}" ;
684
		if(date.matches(regex) && !date.equals("0000-00-00")) {
685
			return true ;
686
		}
687
		else {
688
			return false;
689
		}
690
	}
2726 aurelien 691
 
692
	private void enregistrerEtatTri() {
693
		if(triActif) {
694
			this.directionTri = store.getSortState().getDirection();
695
			this.champTri = store.getSortState().getField();
696
		}
697
 
698
	}
699
 
700
	public String renvoyerTri() {
701
		String tri = "ordre";
702
		if(triActif) {
703
			HashMap<String, String> corr = Ontologies.getCorrespondanceGrilleObservationChampsTri();
704
			if(corr.containsKey(champTri)) {
705
				tri = corr.get(champTri);
706
			}
707
		}
708
		return tri;
709
	}
710
 
711
	public String renvoyerDirectionTri() {
712
		String triDir = "ASC";
713
		try {
714
			triDir = (triActif) ? directionTri.getDirection() : "ASC";
715
		} catch (Exception e) {
716
			triDir = "ASC";
717
		}
718
		return triDir;
719
	}
3 aperonnet 720
}