/**
*
*/
package org.inbio.m3s.gwt.client;
import java.util.List;
import org.inbio.m3s.gwt.client.widgets.galleries.SearchCriteriaForm;
import org.inbio.m3s.gwt.client.widgets.galleries.SearchResultPanel;
import org.inbio.m3s.gwt.client.widgets.galleries.listener.LayoutSelectedListener;
import org.inbio.m3s.gwt.client.widgets.galleries.listener.NumberOfPagesListener;
import org.inbio.m3s.gwt.client.widgets.galleries.listener.PaginationListener;
import org.inbio.m3s.gwt.client.widgets.galleries.listener.ResultsPerPageSelectedListener;
import org.inbio.m3s.gwt.client.widgets.galleries.listener.SearchListener;
import org.inbio.m3s.gwt.client.widgets.galleries.ui.LayoutSelector;
import org.inbio.m3s.gwt.client.widgets.galleries.ui.Pagination;
import org.inbio.m3s.gwt.client.widgets.galleries.ui.ResultsPerPage;
import org.inbio.m3s.gwt.client.widgets.login.LoginManager;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TabPanel;
/**
* @author jgutierrez
*
*/
public class SearchMedia extends Composite implements LayoutSelectedListener,
ResultsPerPageSelectedListener, PaginationListener, SearchListener,
NumberOfPagesListener {
private HTMLPanel main;
// Title: label, string & Div
private String title = "Busqueda de Im\u00E1genes";// this has to
private String titleDiv = HTMLPanel.createUniqueId();
// Layout selector
private LayoutSelector layoutSelectorWidget;
private String layoutSelectorDiv = HTMLPanel.createUniqueId();
// Results per page
private ResultsPerPage resultsPerPageWidget;
private String resultsPerPageDiv = HTMLPanel.createUniqueId();
// Pagination widget
private Pagination upperPaginationWidget = new Pagination(this);
private String upperPaginationDiv = HTMLPanel.createUniqueId();
private Pagination bottomPaginationWidget = new Pagination(this);
private String bottomPaginationDiv = HTMLPanel.createUniqueId();
// Tabs: Container, tabpanel and div
private DockPanel tabPanelContainer = new DockPanel();
private TabPanel tabPanel;
private String tabPanelDiv = HTMLPanel.createUniqueId();
// Tabs of the tabpanel
private final int QUERY_CREATOR_TAB = 0;
private SearchCriteriaForm searchCriteriaWidget;
private final int QUERY_RESULT_TAB = 1;
private SearchResultPanel searchResults = new SearchResultPanel(this);
private String username;
public SearchMedia() {
// the MainPanel
main = new HTMLPanel(
"<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
+ "<tr>"
+ "<td width=\"85%\" align=\"left\" valign=\"top\" bgcolor=\"#4B619A\" class=\"MainPanel\">"
+ "<tr>"
+ "<td height=\"18\">"
+ "<!-- Zona Superior de la Pagina...-->"
+ "<table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\">"
+ "<!-- Titulo de la Pagina-->"
+ "<tr>"
+ "<td>"
+ "<div id=\""
+ titleDiv
+ "\"></div>"
+ "</td>"
+ "<!-- Selector del Layout de la pagina-->"
+ "<td width=\"320\" align=\"right\"> "
+ "<div id=\""
+ layoutSelectorDiv
+ "\"></div> "
+ "</td>"
+ "</tr>"
+ "<!-- PaginaciĆ³n-->"
+ "<tr>"
+ "<td align=\"left\" valign=\"top\">"
+ "<div id=\""
+ upperPaginationDiv
+ "\"></div>"
+ "</td>"
+ "<!-- Numero de Resultados por pagina-->"
+ "<td valign=\"top\" class=\"imaName\">"
+ "<div id=\""
+ resultsPerPageDiv
+ "\"></div>"
+ "</td>"
+ "</tr>"
+ "</table>"
+ "<!-- Zona del panel principal -->"
+ "<table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\" >"
+ "<tr>" + "<td>" + "<div id=\"" + tabPanelDiv
+ "\"></div>" + "</td>" + "</tr>" + "</table>"
+ "<!-- PaginaciĆ³n-->" + "<tr>"
+ "<td align=\"center\" valign=\"middle\">"
+ "<div id=\"" + bottomPaginationDiv + "\"></div>"
+ "</td>" + "</tr>"
+ "<!-- Fin-->" + "</table>" + "</td>" + "</tr>"
+ "</td>" + "</tr>" + "</table>");
initWidget(main);
setUsername(LoginManager.getUserName());
// adds all the stuff here...
// Adding widgets to the divs defined in the mainPanel:
Label theTitle = new Label(title);
theTitle.setStyleName("MainPanel-Title");
main.add(theTitle, titleDiv);
// Layout selector
layoutSelectorWidget = new LayoutSelector(this);
main.add(layoutSelectorWidget, layoutSelectorDiv);
// Paginatiors...
// upperPaginationWidget = new Pagination(this);
// upperPaginationWidget.setPages(10);
main.add(upperPaginationWidget, upperPaginationDiv);
// bottomPaginationWidget = new Pagination(this);
// bottomPaginationWidget.setPages(10);
main.add(bottomPaginationWidget, bottomPaginationDiv);
// Results per Page
resultsPerPageWidget = new ResultsPerPage("8", "16", "24", this);
searchResults.setMaxResultsPerPage(8);
main.add(resultsPerPageWidget, resultsPerPageDiv);
// init the tab panel
tabPanel = new TabPanel();
tabPanelContainer.setWidth("100%");
tabPanelContainer.setHeight("500px");
tabPanelContainer.add(tabPanel, DockPanel.NORTH);
main.add(tabPanelContainer, tabPanelDiv);
// sets the tabs init
searchCriteriaWidget = new SearchCriteriaForm(this);
tabPanel.add(searchCriteriaWidget, "Criterios de Busqueda");
tabPanel.add(searchResults, "Resultados de Busqueda");
tabPanel.selectTab(this.QUERY_CREATOR_TAB);
}
/**
* Fires this event when a new Layout is selected, and sends a message to
* the search Results panel to reload the graphical elements in the desired
* layout
*/
public void layoutSelected(int layoutConstant) {
if (layoutConstant == LayoutSelector.BIG_LAYOUT) {
searchResults.setLayout(SearchResultPanel.BIG_SIZE);
} else if (layoutConstant == LayoutSelector.THUMP_LAYOUT) {
searchResults.setLayout(SearchResultPanel.THUMB_SIZE);
}
// searchResults.reloadResults();
}
/**
* event fired when a layout is selected on the Results per page Widget
*/
public void resultsPerPageSelected(int results) {
searchResults.setMaxResultsPerPage(results);
}
/**
* event fired when the a page is selected in the Pagination Widget
*/
public void pageSelected(int page) {
searchResults.showResultsForPage(page);
}
/**
* event fired when the searchCriteria tab if completed with information and
* the user click "search" button
*/
public void executeSearch(List querySummary) {
tabPanel.selectTab(this.QUERY_RESULT_TAB);
searchResults.showResults(querySummary);
}
/**
* @param username
* the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* Event fired when the SearchResultsPanel receives a number of results for
* a query, then that class makes tha calculation of the number of pages,
* based on the selected results per query, and generates this event.
*/
public void notifyNumberOfPages(int pages) {
upperPaginationWidget.setPages(pages);
// setActualPage(int page);
bottomPaginationWidget.setPages(pages);
}
}