/**
*
*/
package org.inbio.m3s.gwt.client.widgets.galleries;
import org.inbio.m3s.gwt.client.dto.util.SearchFilterEntity;
import org.inbio.m3s.gwt.client.widgets.galleries.listener.SearchFilterListener;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
/**
* The graphical element that allows the user to selected the desired
* filter/criteria for the search. The constructor of this class has to be done
* in a unwired way. When a filter/criteria is selected the widget fires a
* fileterSelected event.
*
* @author jgutierrez
*
*/
public class SearchFilter extends Composite implements ClickListener {
private HorizontalPanel main;
private ListBox filter;
private ListBox criteria;
private TextBox value;
private Button addFilter;
private SearchFilterListener listener;
/**
* Constructor The filters and criterias are wired!!
*
* @param listener
*/
public SearchFilter(SearchFilterListener listener) {
main = new HorizontalPanel();
main.setHorizontalAlignment(HorizontalPanel.ALIGN_LEFT);
main.setSpacing(5);
// filters
filter = new ListBox();
filter.addItem(SearchFilterEntity.MEDIA_ID.getKeyword(),
String.valueOf(SearchFilterEntity.MEDIA_ID.getId()));
//SearchFilterValues.MEDIA_ID.toString());
filter.addItem(SearchFilterEntity.TAXON.getKeyword(),
String.valueOf(SearchFilterEntity.TAXON.getId()));
filter.addItem(SearchFilterEntity.AUTHOR.getKeyword(),
String.valueOf(SearchFilterEntity.AUTHOR.getId()));
filter.addItem(SearchFilterEntity.KEYWORD.getKeyword(),
String.valueOf(SearchFilterEntity.KEYWORD.getId()));
filter.addItem(SearchFilterEntity.PROJECT.getKeyword(),
String.valueOf(SearchFilterEntity.PROJECT.getId()));
filter.addItem(SearchFilterEntity.FAMILY.getKeyword(),
String.valueOf(SearchFilterEntity.FAMILY.getId()));
filter.addItem(SearchFilterEntity.GENUS.getKeyword(),
String.valueOf(SearchFilterEntity.GENUS.getId()));
filter.addItem(SearchFilterEntity.SPECIES.getKeyword(),
String.valueOf(SearchFilterEntity.SPECIES.getId()));
main.add(filter);
// criterias
criteria = new ListBox();
criteria.addItem(SearchCriteriaValues
.getLiteralValue(SearchCriteriaValues.IS),
SearchCriteriaValues.IS.toString());
main.add(criteria);
/*
criteria.addItem(SearchCriteriaValues.
getLiteralValue(SearchCriteriaValues.LIKE),
SearchCriteriaValues.LIKE.toString());
*/
value = new TextBox();
main.add(value);
addFilter = new Button("agregar", this);
main.add(addFilter);
this.listener = listener;
initWidget(main);
}
/**
* Event fired when a user wants to add the filter/criteria selected, if the
* requiered values are ok then a filterSelected event is fired.
*
* @param sender
* is the Button widget that was clicked.
* @return void but fires a filterSelected event with a new
* SearchCriteriaTriplet object as param
*
* TODO: improve the verification of filter/criteria
*/
public void onClick(Widget sender) {
String valueItem = value.getText();
if (valueItem.compareTo("") != 0) {
Integer filterItem = new Integer(filter.getValue(filter
.getSelectedIndex()));
Integer criteriaItem = new Integer(criteria.getValue(criteria
.getSelectedIndex()));
SearchCriteriaTriplet triplete = new SearchCriteriaTriplet(
filterItem, criteriaItem, valueItem);
listener.filterSelected(triplete);
} else {
listener.invalidFilter("InformaciĆ³n insuficiente "
+ "para establecer filtro");
}
}
}