/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.examples.test.client;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.web.bindery.autobean.shared.AutoBean;
import com.google.web.bindery.autobean.shared.AutoBean.PropertyName;
import com.google.web.bindery.autobean.shared.AutoBeanFactory;
import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.client.loader.HttpProxy;
import com.sencha.gxt.data.client.loader.XmlReader;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.PropertyAccess;
import com.sencha.gxt.data.shared.loader.ListLoadResultBean;
import com.sencha.gxt.data.shared.loader.ListLoadConfig;
import com.sencha.gxt.data.shared.loader.ListLoadResult;
import com.sencha.gxt.data.shared.loader.ListLoader;
import com.sencha.gxt.data.shared.loader.LoadResultListStoreBinding;
import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
public class XmlGridTest implements EntryPoint {
interface XmlAutoBeanFactory extends AutoBeanFactory {
static XmlAutoBeanFactory instance = GWT.create(XmlAutoBeanFactory.class);
AutoBean<EmailCollection> items();
AutoBean<ListLoadConfig> loadConfig();
}
public interface Email {
@PropertyName("Name")
String getName();
@PropertyName("Email")
String getEmail();
@PropertyName("Phone")
String getPhone();
@PropertyName("State")
String getState();
@PropertyName("Zip")
String getZip();
}
interface EmailCollection {
@PropertyName("record")
List<Email> getValues();
}
interface EmailProperties extends PropertyAccess<Email> {
ValueProvider<Email, String> name();
ValueProvider<Email, String> email();
ValueProvider<Email, String> phone();
ValueProvider<Email, String> state();
ValueProvider<Email, String> zip();
}
@Override
public void onModuleLoad() {
String path = "data/data.xml";
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
HttpProxy<ListLoadConfig> proxy = new HttpProxy<ListLoadConfig>(builder);
XmlReader<ListLoadResult<Email>, EmailCollection> reader = new XmlReader<ListLoadResult<Email>, EmailCollection>(
XmlAutoBeanFactory.instance, EmailCollection.class) {
protected com.sencha.gxt.data.shared.loader.ListLoadResult<Email> createReturnData(Object loadConfig,
EmailCollection records) {
return new ListLoadResultBean<Email>(records.getValues());
};
};
ListStore<Email> store = new ListStore<Email>(new ModelKeyProvider<Email>() {
@Override
public String getKey(Email item) {
return item.getEmail() + item.getName();
}
});
final ListLoader<ListLoadConfig, ListLoadResult<Email>> loader = new ListLoader<ListLoadConfig, ListLoadResult<Email>>(
proxy, reader);
loader.useLoadConfig(XmlAutoBeanFactory.instance.create(ListLoadConfig.class).as());
loader.addLoadHandler(new LoadResultListStoreBinding<ListLoadConfig, Email, ListLoadResult<Email>>(store));
EmailProperties props = GWT.create(EmailProperties.class);
ColumnConfig<Email, String> cc1 = new ColumnConfig<Email, String>(props.name(), 100, "Sender");
ColumnConfig<Email, String> cc2 = new ColumnConfig<Email, String>(props.email(), 165, "Email");
ColumnConfig<Email, String> cc3 = new ColumnConfig<Email, String>(props.phone(), 100, "Phone");
ColumnConfig<Email, String> cc4 = new ColumnConfig<Email, String>(props.state(), 50, "State");
ColumnConfig<Email, String> cc5 = new ColumnConfig<Email, String>(props.zip(), 65, "Zip Code");
List<ColumnConfig<Email, ?>> l = new ArrayList<ColumnConfig<Email, ?>>();
l.add(cc1);
l.add(cc2);
l.add(cc3);
l.add(cc4);
l.add(cc5);
ColumnModel<Email> cm = new ColumnModel<Email>(l);
Grid<Email> view = new Grid<Email>(store, cm);
view.getView().setForceFit(true);
view.setBorders(true);
view.setLoadMask(true);
view.setLoader(loader);
FramedPanel cp = new FramedPanel();
cp.setHeadingText("Xml Grid Example");
cp.setWidget(view);
cp.setPixelSize(500, 400);
cp.setCollapsible(true);
cp.setAnimCollapse(true);
cp.addStyleName("margin-10");
cp.setButtonAlign(BoxLayoutPack.CENTER);
cp.addButton(new TextButton("Load Xml", new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
loader.load();
}
}));
RootPanel.get().add(cp);
}
}