Subversion Repositories eFlore/Applications.cel

Rev

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