Subversion Repositories eFlore/Applications.cel

Rev

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