Java tutorial
/* * GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 */ package hudson.gwtmarketplace.client.pages.product; import hudson.gwtmarketplace.client.commands.GetProductDetailsCommand; import hudson.gwtmarketplace.client.event.ProductCommentEvent; import hudson.gwtmarketplace.client.event.ProductCommentEvent.ProductCommentHandler; import hudson.gwtmarketplace.client.model.Product; import hudson.gwtmarketplace.client.model.ProductComment; import com.google.gwt.dom.client.HeadingElement; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.gwtpages.client.PageRequestSession; import com.google.gwt.gwtpages.client.Pages; import com.google.gwt.gwtpages.client.page.AsyncPageCallback; import com.google.gwt.gwtpages.client.page.impl.UiBoundPage; import com.google.gwt.gwtpages.client.page.parameters.PageParameters; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.TabPanel; public class ViewProductPage extends UiBoundPage<FlowPanel> implements SelectionHandler<Integer>, ProductCommentHandler { private Product product; @UiField HeadingElement siteTitle; @UiField TabPanel tabs; ProductDetailsPanel productDetails; ProductCommentsPanel productComments; @Override protected void onConstruct(FlowPanel view) { tabs.add(this.productDetails = new ProductDetailsPanel() { protected void onRateIt() { tabs.selectTab(1); }; }, "Details", false); tabs.add(this.productComments = new ProductCommentsPanel(), "Comments", false); tabs.addSelectionHandler(this); tabs.selectTab(0); Pages.get().getEventBus().addHandler(ProductCommentEvent.TYPE, this); } public void show(String alias, final AsyncPageCallback callback) { new GetProductDetailsCommand(alias) { @Override public void onSuccess(Product product) { show(product, callback); } }.execute(); } public void show(Product product, AsyncPageCallback callback) { this.product = product; tabs.selectTab(0); if (null != product) siteTitle.setInnerText(product.getName()); else siteTitle.setInnerText("Loading Details..."); productDetails.show(product); resetCommentTabTitle(); callback.onSuccess(); } private void resetCommentTabTitle() { if (null == product || product.getNumComments() == 0) tabs.getTabBar().setTabText(1, "Comments"); else tabs.getTabBar().setTabText(1, "Comments (" + product.getNumComments() + ")"); } @Override public void onSelection(SelectionEvent<Integer> event) { if (event.getSource().equals(tabs)) { if (event.getSelectedItem().equals(1)) productComments.show(product); } } @Override public void onProductCommentAdded(Product product, ProductComment comment) { if (null != product && comment.getProductId().getId() == product.getId().longValue()) { this.product = product; resetCommentTabTitle(); } } @Override public void onEnterPage(PageParameters parameters, PageRequestSession session, AsyncPageCallback callback) { callback.waitForAsync(); if (parameters.listSize() > 0) show(parameters.asString(0), callback); else if (!parameters.getHistoryToken().startsWith("_")) show(parameters.getHistoryToken(), callback); } }