package com.sencha.gxt.explorer.client.grid; 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.IsWidget; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; 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.explorer.client.model.Example.Detail; 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 XmlGridExample implements IsWidget, EntryPoint { interface XmlAutoBeanFactory extends AutoBeanFactory { static XmlAutoBeanFactory instance = GWT.create(XmlAutoBeanFactory.class); AutoBean
items(); AutoBean
loadConfig(); } 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
getValues(); } interface EmailProperties extends PropertyAccess
{ ValueProvider
name(); ValueProvider
email(); ValueProvider
phone(); ValueProvider
state(); ValueProvider
zip(); } @Override public void onModuleLoad() { RootPanel.get().add(this); } @Override public Widget asWidget() { String path = "data/data.xml"; RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path); HttpProxy
proxy = new HttpProxy
(builder); XmlReader
, EmailCollection> reader = new XmlReader
, EmailCollection>( XmlAutoBeanFactory.instance, EmailCollection.class) { protected com.sencha.gxt.data.shared.loader.ListLoadResult
createReturnData(Object loadConfig, EmailCollection records) { return new ListLoadResultBean
(records.getValues()); }; }; ListStore
store = new ListStore
(new ModelKeyProvider
() { @Override public String getKey(Email item) { return item.getEmail() + item.getName(); } }); final ListLoader
> loader = new ListLoader
>( proxy, reader); loader.useLoadConfig(XmlAutoBeanFactory.instance.create(ListLoadConfig.class).as()); loader.addLoadHandler(new LoadResultListStoreBinding
>(store)); EmailProperties props = GWT.create(EmailProperties.class); ColumnConfig
cc1 = new ColumnConfig
(props.name(), 100, "Sender"); ColumnConfig
cc2 = new ColumnConfig
(props.email(), 165, "Email"); ColumnConfig
cc3 = new ColumnConfig
(props.phone(), 100, "Phone"); ColumnConfig
cc4 = new ColumnConfig
(props.state(), 50, "State"); ColumnConfig
cc5 = new ColumnConfig
(props.zip(), 65, "Zip Code"); List
> l = new ArrayList
>(); l.add(cc1); l.add(cc2); l.add(cc3); l.add(cc4); l.add(cc5); ColumnModel
cm = new ColumnModel
(l); Grid
grid = new Grid
(store, cm); grid.getView().setForceFit(true); grid.setBorders(true); grid.setLoadMask(true); grid.setLoader(loader); grid.getView().setEmptyText("Please hit the load button."); FramedPanel cp = new FramedPanel(); cp.setHeadingText("Xml Grid Example"); cp.setWidget(grid); 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(); } })); return cp; } }