package ppj09.gwt.swapweb.client.gui;
import java.util.ArrayList;
import ppj09.gwt.swapweb.client.SwapWeb;
import ppj09.gwt.swapweb.client.Validation;
import ppj09.gwt.swapweb.client.datatype.ArticleSearchQuery;
import ppj09.gwt.swapweb.client.datatype.SearchResult;
import ppj09.gwt.swapweb.client.serverInterface.GuiHelper;
import ppj09.gwt.swapweb.client.serverInterface.GuiHelperAsync;
import ppj09.gwt.swapweb.client.serverInterface.SearchHandler;
import ppj09.gwt.swapweb.client.serverInterface.SearchHandlerAsync;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.KeyListener;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.TextField;
/**
* Formularfelder und Submit der Artikelsuche. Implementiert das Interface Form.
*
* @author Christian Happ
* @author Projekt Team 4711
* @version 0.1, 15.06.09
*/
public class ArticleSearchForm implements Form {
private HorizontalPanel searchPanel;
private final Panel containerFormPanel;
private Panel buttonPanel;
private ComboBox categoryComboBox;
private TextField searchField;
private Button quickSearchButton;
public ArticleSearchForm(TabPanel outerTabPanel) {
categoryComboBox = new ComboBox();
containerFormPanel = new FormPanel();
containerFormPanel.setTitle("Ich suche");
containerFormPanel.setId("mask-panel");
searchPanel = new HorizontalPanel();
searchPanel.setSpacing(8);
Label searchLabel = new Label("Suche: ");
searchField = new TextField("", "phrase", 120);
searchField.addKeyListener(13, new KeyListener() {
public void onKey(int key, EventObject e) {
quickSearchButton.focus();
}
});
searchPanel.add(searchLabel);
searchPanel.add(searchField);
// holt via rpc die Kategorienliste aus der Datenbank
buttonPanel = new Panel();
buttonPanel.setBorder(false);
searchPanel.add(buttonPanel);
SwapWeb.getCategories(buttonPanel, categoryComboBox);
quickSearchButton = new Button("Suchen",
new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
final ArticleSearchQuery sq = new ArticleSearchQuery();
sq.setSearchPhrase(searchField.getText());
sq.setCategory(categoryComboBox.getText());
final ExtElement element = Ext.get("mask-panel");
element.mask("sucht...");
SearchHandlerAsync searchHandler = GWT
.create(SearchHandler.class);
searchHandler.search(sq,
new AsyncCallback<ArrayList<SearchResult>>() {
public void onFailure(Throwable caught) {
System.out
.println("RPC ArticleSearchForm: fehler im quickserach ");
}
public void onSuccess(
ArrayList<SearchResult> results) {
element.unmask();
Panel cp = SwapWeb.getContentPanel();
cp.clear();
Panel listView = new Panel();
for (SearchResult r : results) {
listView
.add((ArticleSearchResultView) r
.getView());
}
cp.add(listView);
cp.setTitle("Suchergebnisse für \""+searchField.getText()+"\"");
cp.doLayout();
}
});
}
});
quickSearchButton.setIconCls("icon-search");
searchPanel.add(quickSearchButton);
containerFormPanel.add(searchPanel);
outerTabPanel.add(containerFormPanel);
}
/**
* Schickt die validierten Formulardaten an den Article-Search Modul, und
* wartet auf Rueckmeldung
*/
public boolean submit() {
if (Validation.validateArticleSearchForm(this)) {
// Sende Daten an Server
return true;
} else {
// Hinweis auf Fehler
return false;
}
}
}