Subversion Repositories eFlore/Applications.cel

Rev

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