Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
195 david 1
package org.tela_botanica.client.vues.image;
2 aperonnet 2
 
268 aurelien 3
 
2 aperonnet 4
import org.tela_botanica.client.image.ImageMediateur;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
408 aurelien 7
import com.google.gwt.core.client.GWT;
268 aurelien 8
import com.google.gwt.core.client.JavaScriptObject;
408 aurelien 9
import com.google.gwt.event.dom.client.ClickEvent;
10
import com.google.gwt.event.dom.client.ClickHandler;
11
import com.google.gwt.event.dom.client.LoadEvent;
12
import com.google.gwt.event.dom.client.LoadHandler;
13
import com.google.gwt.event.dom.client.MouseWheelEvent;
14
import com.google.gwt.event.dom.client.MouseWheelHandler;
2 aperonnet 15
import com.google.gwt.user.client.Event;
207 aurelien 16
import com.google.gwt.user.client.Timer;
17
import com.google.gwt.user.client.Window;
2 aperonnet 18
import com.google.gwt.user.client.ui.ClickListener;
19
import com.google.gwt.user.client.ui.Image;
268 aurelien 20
import com.google.gwt.user.client.ui.KeyboardListener;
21
import com.google.gwt.user.client.ui.KeyboardListenerCollection;
207 aurelien 22
import com.google.gwt.user.client.ui.LoadListener;
268 aurelien 23
import com.google.gwt.user.client.ui.MouseListener;
207 aurelien 24
import com.google.gwt.user.client.ui.MouseWheelListener;
25
import com.google.gwt.user.client.ui.MouseWheelVelocity;
268 aurelien 26
import com.google.gwt.user.client.ui.ToggleButton;
2 aperonnet 27
import com.google.gwt.user.client.ui.Widget;
207 aurelien 28
import com.gwtext.client.core.AnimationConfig;
268 aurelien 29
import com.gwtext.client.core.Direction;
30
import com.gwtext.client.core.DomConfig;
5 aperonnet 31
import com.gwtext.client.core.EventObject;
207 aurelien 32
import com.gwtext.client.core.Ext;
33
import com.gwtext.client.core.ExtElement;
268 aurelien 34
import com.gwtext.client.core.Function;
207 aurelien 35
 
2 aperonnet 36
import com.gwtext.client.core.RegionPosition;
5 aperonnet 37
import com.gwtext.client.dd.DragData;
38
import com.gwtext.client.dd.DragSource;
39
import com.gwtext.client.dd.DropTarget;
40
import com.gwtext.client.dd.DropTargetConfig;
268 aurelien 41
import com.gwtext.client.widgets.Button;
42
import com.gwtext.client.widgets.Component;
2 aperonnet 43
import com.gwtext.client.widgets.Container;
44
import com.gwtext.client.widgets.Panel;
99 jpm 45
import com.gwtext.client.widgets.ToolTip;
268 aurelien 46
import com.gwtext.client.widgets.Toolbar;
47
import com.gwtext.client.widgets.ToolbarButton;
48
import com.gwtext.client.widgets.ToolbarTextItem;
49
import com.gwtext.client.widgets.event.ButtonListener;
50
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
2 aperonnet 51
import com.gwtext.client.widgets.event.PanelListenerAdapter;
5 aperonnet 52
import com.gwtext.client.widgets.grid.GridDragData;
2 aperonnet 53
import com.gwtext.client.widgets.layout.BorderLayout;
54
import com.gwtext.client.widgets.layout.BorderLayoutData;
268 aurelien 55
import com.gwtext.client.widgets.menu.Menu;
2 aperonnet 56
 
57
/**
58
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
5 aperonnet 59
 *
2 aperonnet 60
 * @author aurelien
5 aperonnet 61
 *
2 aperonnet 62
 */
63
public class ZoomImageVue extends Panel implements Rafraichissable {
5 aperonnet 64
 
2 aperonnet 65
	/**
66
	 * Le médiateur associé à la vue
67
	 */
5 aperonnet 68
	private ImageMediateur iMediateur = null;
69
 
2 aperonnet 70
	/**
71
	 * Panneau conteneur pour l'image
72
	 */
5 aperonnet 73
	private Panel imageConteneur = null;
2 aperonnet 74
	/**
75
	 * l'image à afficher
76
	 */
5 aperonnet 77
	private Image image = new Image("vide.jpg");
2 aperonnet 78
	/**
79
	 * Bouton précédent
80
	 */
81
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
82
	/**
83
	 * Bouton suivant
84
	 */
85
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
5 aperonnet 86
 
2 aperonnet 87
	/**
88
	 * Taille originale Y de l'image
89
	 */
5 aperonnet 90
	private int imageHeight = 0;
91
 
2 aperonnet 92
	/**
93
	 * Taille originale X de l'image
94
	 */
5 aperonnet 95
	private int imageWidth = 0;
2 aperonnet 96
 
97
	/**
5 aperonnet 98
	 * Identifiant de l'image
99
	 */
100
	private String idImage = "0" ;
101
 
102
	/**
2 aperonnet 103
	 * Booleen d'initalisation général
104
	 */
5 aperonnet 105
	private boolean initialise = false;
408 aurelien 106
 
107
	private Panel infosTaxon = new Panel();
5 aperonnet 108
 
2 aperonnet 109
	/**
110
	 * Booleen d'initalisation du conteneur d'image
111
	 */
5 aperonnet 112
	private boolean conteneurInitialise = false;
99 jpm 113
 
114
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour revenir à la vue précédente, utilisez la roulette ou les boutons fléchés pour faire défiler les images </div>") ;
207 aurelien 115
 
116
	/**.
117
	 * boolean de gestion du double clic
118
	 */
119
	private boolean enClic = false;
120
 
268 aurelien 121
	private ToolbarButton modeZoom = null;
122
 
123
	private ToolbarTextItem valeurZoom = new ToolbarTextItem("x 1");
124
 
125
	protected boolean scroll = false;
126
 
207 aurelien 127
	/**
2 aperonnet 128
	 * Constructeur sans argument (privé car ne doit être utilisé)
129
	 */
130
	@SuppressWarnings("unused")
5 aperonnet 131
	private ZoomImageVue() {
132
		super();
2 aperonnet 133
	}
5 aperonnet 134
 
2 aperonnet 135
	/**
136
	 * Constructeur avec argument
5 aperonnet 137
	 *
138
	 * @param im
139
	 *            le médiateur à associer à la vue
2 aperonnet 140
	 */
5 aperonnet 141
	public ZoomImageVue(ImageMediateur im) {
2 aperonnet 142
		super("Zoom");
5 aperonnet 143
		setId("x-view-zoom-panel");
2 aperonnet 144
		// on associe le médiateur
5 aperonnet 145
		iMediateur = im;
2 aperonnet 146
 
5 aperonnet 147
		prev.setStylePrimaryName("x-view-zoom-button-p");
148
		suiv.setStylePrimaryName("x-view-zoom-button-s");
149
 
2 aperonnet 150
		// on crée une image qui gère le double clic et la roulette de la souris
207 aurelien 151
		image = new Image();
152
 
5 aperonnet 153
		this.setHeader(false);
154
 
207 aurelien 155
		imageConteneur = new Panel();
156
 
2 aperonnet 157
		imageConteneur.setBorder(false);
5 aperonnet 158
 
159
		imageConteneur.add(image);
160
		imageConteneur.setId("x-view-zoom-img");
161
 
162
		// il n'existe pas de méthode pour ajouter un listener pour le double
163
		// clic sur une image
2 aperonnet 164
		// alors on lui dit manuellement de capter l'évènement double clic
207 aurelien 165
		//imageConteneur.sinkEvents(Event.ONMOUSEWHEEL);
5 aperonnet 166
 
2 aperonnet 167
		// l'image de base est vide
168
		image.setUrl("vide.jpg");
5 aperonnet 169
 
2 aperonnet 170
		this.setLayout(new BorderLayout());
5 aperonnet 171
 
2 aperonnet 172
		prev.setWidth("60px");
173
		suiv.setWidth("60px");
5 aperonnet 174
 
268 aurelien 175
 
176
		modeZoom = new ToolbarButton("Mode Zoom");
177
		Toolbar tb = new Toolbar();
178
		tb.addButton(modeZoom);
179
		tb.addItem(valeurZoom);
180
 
181
		//setTopToolbar(tb);
182
 
408 aurelien 183
		infosTaxon = new Panel();
184
		infosTaxon.setHeader(false);
185
		//infosTaxon.setBorder(false);
186
		infosTaxon.setHeight("30px");
187
 
5 aperonnet 188
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
189
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
190
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
408 aurelien 191
		this.add(infosTaxon, new BorderLayoutData(RegionPosition.SOUTH));
5 aperonnet 192
 
193
		imageConteneur.setMaskDisabled(true);
2 aperonnet 194
		this.setBorder(false);
5 aperonnet 195
 
196
		conteneurInitialise = true;
197
		initialise = true;
2 aperonnet 198
 
5 aperonnet 199
		configDragAndDrop() ;
200
 
2 aperonnet 201
		// on ajoute les listeners
202
		ajouterListeners();
99 jpm 203
 
268 aurelien 204
		tp.setDismissDelay(1050);
99 jpm 205
		tp.applyTo(image.getElement()) ;
2 aperonnet 206
 
207
	}
208
 
209
	/**
210
	 * Méthode héritée de l'interface rafraichissable
5 aperonnet 211
	 *
212
	 * @param nouvelleDonnees
213
	 *            les nouvelles données
214
	 * @param repandreRafraichissement
215
	 *            le booleen qui dit si on doit répnadre l'évènement
2 aperonnet 216
	 */
5 aperonnet 217
	public void rafraichir(Object nouvelleDonnees,
218
			boolean repandreRafraichissement) {
219
 
268 aurelien 220
		//niveauZoom = 1;
2 aperonnet 221
		// si on reçoit une string
5 aperonnet 222
		if (nouvelleDonnees instanceof String[] && initialise
223
				&& conteneurInitialise) {
408 aurelien 224
 
5 aperonnet 225
			String[] infos = (String[]) nouvelleDonnees;
408 aurelien 226
 
2 aperonnet 227
			// c'est l'url de l'image qu'on associe à la vue
5 aperonnet 228
			if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) {
229
				getImage().setUrl(infos[0]);
230
				int x = Integer.parseInt(infos[1]);
231
				int y = Integer.parseInt(infos[2]);
232
 
233
				setTailleImage(x, y);
2 aperonnet 234
 
5 aperonnet 235
				setIdImage(infos[3]) ;
408 aurelien 236
 
237
				String infosTaxon = "" ;
238
 
239
				if(infos.length == 5 && infos[4] != null)  {
240
					infosTaxon = infos[4];
241
				}
242
 
243
				setInfosTaxon(infosTaxon);
5 aperonnet 244
 
408 aurelien 245
				verifierEtRetaillerImage();
2 aperonnet 246
			}
5 aperonnet 247
		} else {
2 aperonnet 248
			// sinon on met une image vide
40 david 249
			getImage().setUrl("vide.jpg");
2 aperonnet 250
		}
251
	}
5 aperonnet 252
 
2 aperonnet 253
	/**
254
	 * Desactive visuellement le panneau et les boutons
255
	 */
5 aperonnet 256
	public void desactiverPanneau() {
257
		getImage().setUrl("vide.jpeg");
258
		prev.setEnabled(false);
2 aperonnet 259
		suiv.setEnabled(false);
260
	}
5 aperonnet 261
 
2 aperonnet 262
	/**
263
	 * Active visuellement le panneau et les boutons
264
	 */
5 aperonnet 265
	public void activerPanneau() {
2 aperonnet 266
		prev.setEnabled(true);
267
		suiv.setEnabled(true);
268
	}
225 aurelien 269
 
270
	public void masquerChargement() {
271
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
324 aurelien 272
		if(imgEl != null) {
225 aurelien 273
			imgEl.mask("Chargement");
274
		}
275
	}
276
 
277
	public void demasquerChargement() {
278
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
324 aurelien 279
		if(imgEl != null) {
225 aurelien 280
			imgEl.unmask();
281
		}
282
	}
5 aperonnet 283
 
2 aperonnet 284
	/**
285
	 * Ajoute les listeners pour la gestions d'évènement
286
	 */
5 aperonnet 287
	public void ajouterListeners() {
207 aurelien 288
 
408 aurelien 289
		image.addClickHandler(new ClickHandler() {
207 aurelien 290
 
408 aurelien 291
			public void onClick(ClickEvent event) {
268 aurelien 292
				if(!scroll) {
207 aurelien 293
					if(enClic) {
294
						getIMediateur().doubleClicZoomImage();
295
					} else {
296
						Timer t = new Timer() {
297
							public void run() {
298
								enClic = false;
299
							}
300
 
301
						};
302
						enClic = true;
303
						t.schedule(800);
304
					}
268 aurelien 305
				}
207 aurelien 306
			}
307
		});
308
 
408 aurelien 309
		image.addLoadHandler(new LoadHandler() {
310
 
311
			public void onLoad(LoadEvent event) {
207 aurelien 312
 
408 aurelien 313
				verifierEtRetaillerImage();
314
				Ext.get(image.getElement()).center(imageConteneur.getElement());
315
				demasquerChargement();
207 aurelien 316
			}
317
		});
318
 
408 aurelien 319
		image.addMouseWheelHandler(new MouseWheelHandler() {
320
 
321
			public void onMouseWheel(MouseWheelEvent event) {
268 aurelien 322
 
408 aurelien 323
				if(event.isNorth()) {
324
					masquerChargement();
325
					getIMediateur().clicBoutonZoomImage("suiv");
326
				} else {
327
					masquerChargement();
328
					getIMediateur().clicBoutonZoomImage("prev");
329
				}
268 aurelien 330
			}
331
		});
332
 
2 aperonnet 333
		// gestion du clic sur le bouton précedent
408 aurelien 334
		prev.addClickHandler(new ClickHandler() {
2 aperonnet 335
 
336
			// en cas de clic
408 aurelien 337
			public void onClick(ClickEvent event) {
2 aperonnet 338
				// on notifie le médiateur
225 aurelien 339
				masquerChargement();
2 aperonnet 340
				getIMediateur().clicBoutonZoomImage("prev");
341
			}
342
		});
5 aperonnet 343
 
2 aperonnet 344
		// gestion du clic sur le bouton suivant
408 aurelien 345
		suiv.addClickHandler(new ClickHandler() {
2 aperonnet 346
 
347
			// en cas de clic
408 aurelien 348
			public void onClick(ClickEvent event) {
5 aperonnet 349
				// on notifie le médiateur
225 aurelien 350
				masquerChargement();
2 aperonnet 351
				getIMediateur().clicBoutonZoomImage("suiv");
352
			}
5 aperonnet 353
 
2 aperonnet 354
		});
5 aperonnet 355
 
2 aperonnet 356
		// gestion du redimensionnement
357
		this.addListener(new PanelListenerAdapter() {
5 aperonnet 358
 
2 aperonnet 359
			// lors d'un redimensionnement de l'application
5 aperonnet 360
 
361
			public void onBodyResize(Panel panel, java.lang.String width,
362
					java.lang.String height) {
2 aperonnet 363
				// on vérifie et on retaille l'image
5 aperonnet 364
				verifierEtRetaillerImage();
2 aperonnet 365
			}
5 aperonnet 366
		});
367
 
2 aperonnet 368
		// gestion du redimensionnement lors de l'affichage du conteneur
369
		imageConteneur.addListener(new PanelListenerAdapter() {
5 aperonnet 370
 
2 aperonnet 371
			// avant de finir d'afficher
5 aperonnet 372
 
373
			public void onAfterLayout(Container self) {
2 aperonnet 374
				// on redimensionne
5 aperonnet 375
				verifierEtRetaillerImage();
2 aperonnet 376
			}
5 aperonnet 377
		});
2 aperonnet 378
	}
379
 
380
	/**
5 aperonnet 381
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
382
	 * echeant
2 aperonnet 383
	 */
5 aperonnet 384
	public void verifierEtRetaillerImage() {
408 aurelien 385
 
2 aperonnet 386
		// si l'image est nulle
5 aperonnet 387
		if (image == null) {
2 aperonnet 388
			// on ne fait rien
5 aperonnet 389
			return;
390
		}
408 aurelien 391
 
2 aperonnet 392
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
268 aurelien 393
		int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
394
 
395
		int[] tailleImage = new int[2];
396
 
408 aurelien 397
		if(Ext.isIE()) {
398
			image.setHeight(calculerDimensions(getTailleImage(),max,max)[1]+"px");
399
			image.setWidth(calculerDimensions(getTailleImage(),max,max)[0]+"px");
268 aurelien 400
		} else {
408 aurelien 401
 
402
			if(max == imageConteneur.getHeight()) {
403
				tailleImage[0] = getTailleImage()[0];
404
				tailleImage[1] = max;
405
				image.setHeight(max+"px");
406
 
407
			} else {
408
				tailleImage[1] = getTailleImage()[0];
409
				tailleImage[0] = max;
410
				image.setWidth(max+"px");
411
			}
268 aurelien 412
		}
2 aperonnet 413
	}
5 aperonnet 414
 
207 aurelien 415
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
416
 
417
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
418
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
419
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
420
        float[] XYresize = new float[2];
421
 
422
        if(maxTaille == tailleXY[0]) {
423
            float rapport = tailleXYf[1]/tailleXYf[0] ;
424
            XYresize[0] = tailleOr ;
425
            XYresize[1] = tailleOr*rapport ;
426
        }else {
427
            float rapport = tailleXYf[0]/tailleXYf[1] ;
428
            XYresize[1] = tailleOr ;
429
            XYresize[0] = tailleOr*rapport ;
430
        }
431
 
408 aurelien 432
        int[] res = {(int)Math.round(XYresize[0]),(int) Math.round(XYresize[1])} ;
207 aurelien 433
 
434
        return res;
435
    }
436
 
5 aperonnet 437
	public void configDragAndDrop()
438
	{
2 aperonnet 439
 
5 aperonnet 440
		// on fabrique la nouvelle configuration
441
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
442
		DropTargetConfig dtc = new DropTargetConfig();
443
		dtc.setdDdGroup("DragGroupName");
444
 
445
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
446
		@SuppressWarnings("unused")
447
		DropTarget tg = new DropTarget(this, dtc)
448
		{
449
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){
450
 
451
				// si on reçoit des données provenant d'une grille
452
				if(data instanceof GridDragData)
453
		    	  {
454
		    		  		// on appelle le médiateur
455
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;
456
		    	  }
457
				return false ;
458
			}
459
 
460
			public String notifyOver(DragSource source, EventObject e, DragData data){
461
			    return "x-dd-drop-ok";
462
			}
463
		};
464
 
465
	}
466
 
2 aperonnet 467
	/**
468
	 * Accesseur pour le médiateur
5 aperonnet 469
	 *
2 aperonnet 470
	 * @return le médiateur associé à la vue
471
	 */
472
	public ImageMediateur getIMediateur() {
473
		return iMediateur;
474
	}
475
 
476
	/**
477
	 * Accesseur au conteneur de l'image
5 aperonnet 478
	 *
2 aperonnet 479
	 * @return le conteneur de l'image
480
	 */
481
	public Image getImage() {
482
		return image;
483
	}
5 aperonnet 484
 
485
	/**
486
	 * Acesseurs pour l'identifiant de l'image
487
	 * @return l'id de l'image
488
	 */
489
	public String getIdImage()
490
	{
491
		return idImage ;
492
	}
2 aperonnet 493
 
494
	/**
495
	 * Accesseur pour le bouton précédent
5 aperonnet 496
	 *
2 aperonnet 497
	 * @return le bouton précédent
498
	 */
499
	public com.google.gwt.user.client.ui.Button getPrev() {
500
		return prev;
501
	}
502
 
503
	/**
504
	 * Accesseur pour le bouton suivant
5 aperonnet 505
	 *
2 aperonnet 506
	 * @return le bouton suivant
507
	 */
508
	public com.google.gwt.user.client.ui.Button getSuiv() {
509
		return suiv;
510
	}
5 aperonnet 511
 
2 aperonnet 512
	/**
513
	 * Setter pour la taille de l'image
5 aperonnet 514
	 *
7 aperonnet 515
	 * @param x
5 aperonnet 516
	 *            la largeur en pixels
7 aperonnet 517
	 * @param y
5 aperonnet 518
	 *            la hauteur en pixels
2 aperonnet 519
	 */
5 aperonnet 520
	public void setTailleImage(int x, int y) {
521
		imageHeight = y;
522
		imageWidth = x;
2 aperonnet 523
	}
524
 
525
	/**
5 aperonnet 526
	 * Setteur pour l'identifiant de l'image
527
	 * @param id le nouvel identifiant
528
	 */
529
	public void setIdImage(String id)
530
	{
531
		idImage = id ;
532
	}
408 aurelien 533
 
534
	public void setInfosTaxon(String nomTaxon) {
535
 
536
		if(nomTaxon != null && !nomTaxon.equals("")) {
537
			nomTaxon = getNomsObservationsFormatees(nomTaxon);
538
		}
539
 
540
		infosTaxon.setHtml("<div id='infos_taxon'><span class='texte_info_taxon'>"+nomTaxon+"</span></div>");
541
		infosTaxon.doLayout();
542
	}
5 aperonnet 543
 
544
	/**
2 aperonnet 545
	 * renvoie la taille originale de l'image
5 aperonnet 546
	 *
2 aperonnet 547
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
548
	 */
5 aperonnet 549
	public int[] getTailleImage() {
550
		int[] taille = { imageHeight, imageWidth };
551
 
552
		return taille;
2 aperonnet 553
	}
5 aperonnet 554
 
408 aurelien 555
	public boolean estPortrait() {
556
		return imageHeight > imageWidth;
557
	}
558
 
559
	public boolean estPaysage() {
560
		return !estPortrait();
561
	}
562
 
5 aperonnet 563
	/**
564
	 * Accesseur pour le conteneur de l'image
565
	 * @return le conteur de l'image
566
	 */
567
	public Panel getImageConteneur() {
2 aperonnet 568
 
5 aperonnet 569
		return imageConteneur;
570
 
2 aperonnet 571
	}
268 aurelien 572
 
408 aurelien 573
	private String getNomsObservationsFormatees(String nomObs) {
574
 
575
		String htmlInfobulle = "";
576
 
577
		String[][] obs = getObservationsAssociees(nomObs);
578
 
579
		for(int i = 0; i < obs.length; i++) {
580
 
581
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
582
				htmlInfobulle += ", "+obs[i][1];
268 aurelien 583
			}
584
		}
408 aurelien 585
 
586
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
587
 
588
		return htmlInfobulle;
268 aurelien 589
	}
408 aurelien 590
 
591
	private String[][] getObservationsAssociees(String nomObs) {
592
 
593
		if(nomObs.trim().equals("")) {
594
			return new String[0][0];
268 aurelien 595
		}
408 aurelien 596
 
597
		String[] obsTab = nomObs.split(";;");
598
		String[][] obsAnalysees = new String[obsTab.length][3];
599
 
600
		for(int i = 0; i < obsTab.length; i++) {
601
 
602
			obsAnalysees[i] = obsTab[i].split("#");
603
 
604
		}
605
 
606
		return obsAnalysees;
268 aurelien 607
	}
608
 
408 aurelien 609
	private boolean[] estAssocieeTransmise(String nomObs) {
268 aurelien 610
 
408 aurelien 611
		String[][] obs = getObservationsAssociees(nomObs);
612
		boolean[] associeesTranmises = {false, false};
268 aurelien 613
 
408 aurelien 614
		if(obs.length > 0) {
615
			associeesTranmises[0] = true;
268 aurelien 616
		}
617
 
408 aurelien 618
		for(int i = 0; i < obs.length; i++) {
268 aurelien 619
 
408 aurelien 620
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
621
				associeesTranmises[1] = true;
268 aurelien 622
			}
623
		}
408 aurelien 624
 
625
		return associeesTranmises;
268 aurelien 626
	}
2 aperonnet 627
}