Subversion Repositories eFlore/Applications.cel

Rev

Rev 680 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
669 aurelien 1
package org.tela_botanica.client.vues.image.filtres;
2 aperonnet 2
 
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Filtrable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
7
import com.google.gwt.user.client.ui.Label;
638 aurelien 8
import com.gwtext.client.core.EventCallback;
9
import com.gwtext.client.core.EventObject;
10
import com.gwtext.client.widgets.Button;
2 aperonnet 11
import com.gwtext.client.widgets.Panel;
638 aurelien 12
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
2 aperonnet 13
import com.gwtext.client.widgets.form.DateField;
638 aurelien 14
import com.gwtext.client.widgets.layout.HorizontalLayout;
2 aperonnet 15
 
16
/**
7 aperonnet 17
 * Classe implémentant un filtre qui permet de rechercher une image par rapport
5 aperonnet 18
 * à la date associée, des critères plus fins viendront compléter cela
19
 *
2 aperonnet 20
 * @author aurelien
5 aperonnet 21
 *
2 aperonnet 22
 */
23
public class DateFiltreVue extends Panel implements Rafraichissable, Filtrable {
24
 
25
	/**
26
	 * Le médiateur associé à la vue
27
	 */
5 aperonnet 28
	private ImageMediateur iMediateur = null;
29
 
2 aperonnet 30
	/**
31
	 * Le widget calendrier
32
	 */
5 aperonnet 33
	private DateField filtreDate = null;
2 aperonnet 34
 
638 aurelien 35
	private Button boutonRechercher = null;
36
 
37
	private final int KEY_ENTER = 13;
38
 
2 aperonnet 39
	/**
40
	 * Booleen d'état du filtre
41
	 */
5 aperonnet 42
	private boolean filtreModifie = false;
2 aperonnet 43
 
44
	/**
45
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
46
	 */
47
	@SuppressWarnings("unused")
5 aperonnet 48
	private DateFiltreVue() {
49
		super();
2 aperonnet 50
	}
5 aperonnet 51
 
2 aperonnet 52
	/**
53
	 * Constructeur avec arguments
5 aperonnet 54
	 *
55
	 * @param im
56
	 *            le médiateur à associer
2 aperonnet 57
	 */
5 aperonnet 58
	public DateFiltreVue(ImageMediateur im) {
638 aurelien 59
 
5 aperonnet 60
		super();
638 aurelien 61
		setLayout(new HorizontalLayout(3));
5 aperonnet 62
		setPaddings(5);
63
		setCollapsible(true);
64
		setBorder(false);
65
		iMediateur = im;
638 aurelien 66
 
67
		boutonRechercher = new Button("OK");
5 aperonnet 68
 
69
		// on crée le calendrier et on définit le format de la date "jj/mm/aaaa"
70
		filtreDate = new DateField();
71
		filtreDate.setAutoWidth(true);
72
		filtreDate.setFormat("d/m/Y");
73
 
2 aperonnet 74
		add(filtreDate);
638 aurelien 75
		add(boutonRechercher);
2 aperonnet 76
	}
5 aperonnet 77
 
2 aperonnet 78
	/**
79
	 * Ajoute les listeners
80
	 */
5 aperonnet 81
	public void ajouterListeners() {
638 aurelien 82
 
83
		boutonRechercher.addListener(new ButtonListenerAdapter() {
84
 
85
			public void onClick(Button button, EventObject e) {
86
				valider();
87
				iMediateur.obtenirPhotoGalerie(iMediateur.getGalerieImage());
88
			}
89
		});
90
 
91
		filtreDate.addKeyPressListener(new EventCallback()	{
92
 
93
    	    public void execute(EventObject e) {
94
 
95
	    		switch(e.getKey()) {
96
	    			case KEY_ENTER:
97
	    				valider();
98
	    				iMediateur.obtenirPhotoGalerie(iMediateur.getGalerieImage());
99
	    			break;
100
	    		}
101
    	    }
102
		});
2 aperonnet 103
	}
5 aperonnet 104
 
2 aperonnet 105
	/**
106
	 * Méthode héritée de l'interface rafraichissable
107
	 */
108
	public void rafraichir(Object nouvelleDonnees,
109
			boolean repandreRaffraichissement) {
5 aperonnet 110
 
111
		filtreModifie = false;
112
 
2 aperonnet 113
	}
5 aperonnet 114
 
2 aperonnet 115
	/**
116
	 * Méthode héritée de l'interface filtrable
117
	 */
118
	public void valider() {
5 aperonnet 119
 
120
		filtreModifie = true;
121
 
2 aperonnet 122
	}
123
 
124
	/**
125
	 * Accesseur pour le médiateur
5 aperonnet 126
	 *
2 aperonnet 127
	 * @return le médiateur associé à la vue
128
	 */
129
	@SuppressWarnings("unused")
130
	private ImageMediateur getIMediateur() {
5 aperonnet 131
 
132
		return iMediateur;
2 aperonnet 133
	}
134
 
135
	/**
136
	 * Méthode héritée de l'interface filtrable
137
	 */
138
	public boolean renvoyerEtatFiltre() {
5 aperonnet 139
 
140
		return filtreModifie;
2 aperonnet 141
	}
142
 
143
	/**
144
	 * Méthode héritée de l'interface filtrable
145
	 */
146
	public String renvoyerNomFiltre() {
5 aperonnet 147
 
148
		return "Recherche par date";
2 aperonnet 149
	}
150
 
151
	/**
152
	 * Méthode héritée de l'interface filtrable
153
	 */
154
	public String[] renvoyerValeursAFiltrer() {
5 aperonnet 155
 
2 aperonnet 156
		// si la date est valide
5 aperonnet 157
		if (filtreDate.isValid()) {
2 aperonnet 158
			// on en sépare les composants
5 aperonnet 159
			String dt = filtreDate.getRawValue();
160
			String[] dates = dt.split("/");
161
			if (dates.length == 3) {
162
				// qu'on réassemble dans un autre format (américain) pour la
163
				// base de donnée "aaaa-mm-jj"
164
				String dateFormatee = dates[2] + "-" + dates[1] + "-"
165
						+ dates[0];
166
				String[] valeursFiltres = { "ci_meta_date", dateFormatee };
167
				return valeursFiltres;
2 aperonnet 168
			}
169
		}
5 aperonnet 170
 
171
		// si la date n'estp as valide on renvoie une chaine vide (ce qui
172
		// correspond à n'importe qu'elle date)
173
		String dateFormatee = "";
174
		String[] valeursFiltres = { "ci_meta_date", dateFormatee };
175
		return valeursFiltres;
176
 
2 aperonnet 177
	}
178
 
680 aurelien 179
	public void viderFiltre() {
180
		filtreDate.setValue("");
181
	}
182
 
2 aperonnet 183
}