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.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.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.Position;
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.form.Checkbox;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.MultiFieldPanel;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.layout.FormLayout;
public class AdvancedSearchForm implements Form{
private Panel firstTab;
private TabPanel tabPanel;
private VerticalPanel searchResultPanel;
private Checkbox activeArticleCheckBox;
private Checkbox pictureArticlesCheckBox;
private TextField searchField;
private TextField artikelStandort;
private ComboBox categoryComboBox;
public AdvancedSearchForm(TabPanel outerTabPanel) {
categoryComboBox = new ComboBox("Kategorie");
final FormPanel containerFormPanel = new FormPanel();
containerFormPanel.setId("advanced-panel");
containerFormPanel.setTitle("Erweiterte Suche");
containerFormPanel.setLabelAlign(Position.TOP);
Panel firstColumn = new Panel();
firstColumn.setBorder(false);
firstColumn.setLayout(new FormLayout());
firstColumn.setPaddings(10);
searchField = new TextField("Suche", "searchField", 120);
artikelStandort = new TextField("Artikelstandort", "searchPhrase", 120);
firstColumn.add(searchField);
firstColumn.add(artikelStandort);
Panel secondColumn = new Panel();
secondColumn.setLayout(new FormLayout());
secondColumn.setBorder(false);
secondColumn.setPaddings(10,10,0,0);
SwapWeb.getCategories(secondColumn, categoryComboBox);
categoryComboBox.setFieldLabel("Kategorie");
Object[][] optionsCondition = new Object[][] {
new Object[] { "b", "Beliebig" }, new Object[] { "n", "Neu" },
new Object[] { "g", "Gebraucht" } };
Store conditionStore = new SimpleStore(new String[] { "d", "options" },
optionsCondition);
conditionStore.load();
final ComboBox conditionComboBox = new ComboBox();
conditionComboBox.setFieldLabel("Artikel Zustand");
conditionComboBox.setStore(conditionStore);
conditionComboBox.setDisplayField("options");
conditionComboBox.setMode(ComboBox.LOCAL);
conditionComboBox.setTriggerAction(ComboBox.ALL);
conditionComboBox.setForceSelection(true);
conditionComboBox.setEmptyText(optionsCondition[0][1].toString());
conditionComboBox.setReadOnly(true);
conditionComboBox.setWidth(120);
conditionComboBox.setLazyRender(true);
secondColumn.add(conditionComboBox);
Panel thirdColumn = new Panel();
thirdColumn.setLayout(new FormLayout());
thirdColumn.setBorder(false);
thirdColumn.setPaddings(10,10,0,0);
Object[][] optionsDelivery = new Object[][] {
new Object[] { "b", "Beliebig" },
new Object[] { "p", "Postversand" },
new Object[] { "a", "Abholung" },
new Object[] { "t", "Treffen" }, };
Store deliveryStore = new SimpleStore(new String[] { "b", "options" },
optionsDelivery);
deliveryStore.load();
final ComboBox versandComboBox = new ComboBox();
versandComboBox.setFieldLabel("Versandart");
versandComboBox.setStore(deliveryStore);
versandComboBox.setDisplayField("options");
versandComboBox.setMode(ComboBox.LOCAL);
versandComboBox.setTriggerAction(ComboBox.ALL);
versandComboBox.setForceSelection(true);
versandComboBox.setEmptyText(optionsDelivery[0][1].toString());
versandComboBox.setReadOnly(true);
versandComboBox.setWidth(120);
thirdColumn.add(versandComboBox);
Panel fourthColumn = new Panel();
fourthColumn.setLayout(new FormLayout());
fourthColumn.setBorder(false);
fourthColumn.setPaddings(23,10,0,0);
Panel checkBoxPanel = new Panel();
checkBoxPanel.setBorder(false);
pictureArticlesCheckBox = new Checkbox("Nur mit Bild anzeigen");
checkBoxPanel.add(pictureArticlesCheckBox);
fourthColumn.add(checkBoxPanel);
Panel buttonPanel = new Panel();
buttonPanel.setBorder(false);
buttonPanel.setPaddings(10, 0, 0, 0);
Button searchButton = new Button("Suchen",
new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
final ExtElement element = Ext.get("advanced-panel");
element.mask("sucht...");
System.out.println("gedrueckt");
ArticleSearchQuery sq = new ArticleSearchQuery();
sq.setSearchPhrase(searchField.getText());
sq.setLocation(artikelStandort.getText());
sq.setCategory(categoryComboBox.getText());
sq.setCondition(conditionComboBox.getText());
sq.setShippingMethods(versandComboBox.getText());
sq.setPicturesOnly(pictureArticlesCheckBox.getValue());
SearchHandlerAsync searchHandler = GWT
.create(SearchHandler.class);
searchHandler.search(sq,
new AsyncCallback<ArrayList<SearchResult>>() {
public void onFailure(Throwable caught) {
System.out.println("RPC AdvancedSearchForm FAILED");
}
public void onSuccess(ArrayList<SearchResult> results) {
System.out.println("success");
element.unmask();
Panel cp = SwapWeb.getContentPanel();
cp.clear();
Panel listView = new Panel();
for (SearchResult r : results) {
listView.add( (ArticleSearchResultView) r.getView());
}
cp.setTitle("Suchergebnisse");
cp.add(listView);
cp.doLayout();
}
});
}
});
searchButton.setIconCls("icon-search");
buttonPanel.add(searchButton);
fourthColumn.add(buttonPanel);
MultiFieldPanel multiPanel = new MultiFieldPanel();
multiPanel.setPaddings(5);
multiPanel.setBorder(false);
multiPanel.addToRow(firstColumn, 140);
multiPanel.addToRow(secondColumn, 140);
multiPanel.addToRow(thirdColumn, 140);
multiPanel.addToRow(fourthColumn, 310);
containerFormPanel.add(multiPanel);
outerTabPanel.add(containerFormPanel);
}
/**
* Schickt die validierten Formulardaten an den Article-Search Modul, und
* wartet auf Rueckmeldung
*/
public boolean submit() {
if (Validation.validateAdvancedSearchForm(this)) {
// Sende Daten an Server
return true;
} else {
// Hinweis auf Fehler
return false;
}
}
}