Rev 6530 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.catalog.dashboard.client;import in.shop2020.catalog.dashboard.shared.Item;import in.shop2020.catalog.dashboard.shared.ItemStatus;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import com.google.gwt.core.client.GWT;import com.google.gwt.dom.client.Style.Unit;import com.google.gwt.resources.client.CssResource;import com.google.gwt.uibinder.client.UiBinder;import com.google.gwt.uibinder.client.UiField;import com.google.gwt.user.cellview.client.CellTable;import com.google.gwt.user.cellview.client.SimplePager;import com.google.gwt.user.cellview.client.TextColumn;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.rpc.AsyncCallback;import com.google.gwt.user.client.ui.Label;import com.google.gwt.user.client.ui.ResizeComposite;import com.google.gwt.user.client.ui.Widget;import com.google.gwt.view.client.AsyncDataProvider;import com.google.gwt.view.client.HasData;import com.google.gwt.view.client.ListDataProvider;import com.google.gwt.view.client.Range;import com.google.gwt.view.client.SelectionChangeEvent;import com.google.gwt.view.client.SingleSelectionModel;/*** List of items. List contains item Id, product group, brand, model number, model name, color and category* Dashboard user can select an item in this list and its details are shown in ItemDetails widget.**/public class ItemList extends ResizeComposite{private static String LEGEND = "Currently Showing: ";private final CatalogServiceAsync catalogService = GWT.create(CatalogService.class);interface ItemListUiBinder extends UiBinder<Widget, ItemList> { }private static final ItemListUiBinder uiBinder = GWT.create(ItemListUiBinder.class);interface SelectionStyle extends CssResource{String selectedRow();String alertsRow();}@UiField CellTable<Item> itemDescriptionTable;// Create paging controls.@UiField SimplePager pager = new SimplePager();@UiField SelectionStyle selectionStyle;@UiField Label currentlyShowing;private ItemDetails itemDetails;private String currentTreeItemSelection = null;private String searchText = "";private List<String> searchTerms = new ArrayList<String>();private TextColumn<Item> idColumn = new TextColumn<Item>() {@Overridepublic String getValue(Item item) {return item.getId() + "";}};private TextColumn<Item> pgColumn = new TextColumn<Item>() {@Overridepublic String getValue(Item item) {return item.getProductGroup();}};private TextColumn<Item> brandColumn = new TextColumn<Item>(){@Overridepublic String getValue(Item item) {return item.getBrand();}};private TextColumn<Item> modelNumberColumn = new TextColumn<Item>(){@Overridepublic String getValue(Item item) {return item.getModelNumber();}};private TextColumn<Item> modelNameColumn = new TextColumn<Item>(){@Overridepublic String getValue(Item item) {return item.getModelName();}};private TextColumn<Item> colorColumn = new TextColumn<Item>(){@Overridepublic String getValue(Item item) {return item.getColor();}};private TextColumn<Item> categoryColumn = new TextColumn<Item>(){@Overridepublic String getValue(Item item) {return item.getContentCategory()+"";}};// Create a data provider.ListDataProvider<Item> dataProvider = new ListDataProvider<Item>();AsyncDataProvider<Item> asyncDataProvider = new AsyncDataProvider<Item>() {@Overrideprotected void onRangeChanged(HasData<Item> display) {Range range = display.getVisibleRange();int start = range.getStart();int limit = range.getLength();if(currentTreeItemSelection == null)currentTreeItemSelection = CatalogTree.RISKY_ITEMS;if(currentTreeItemSelection.equals(CatalogTree.ALL_ITEMS))loadAllItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.ALL_ACTIVE_ITEMS))loadAllActiveItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.ALL_PAUSED_ITEMS))loadAllPausedItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.ALL_PHASED_OUT_ITEMS))loadAllPhasedOutItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.IN_PROCESS_ITEMS))loadAllInProcessItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.CONTENT_COMPLETE_ITEMS))loadAllContentCompleteItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.BEST_DEALS))loadBestDeals(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.BEST_SELLERS))loadBestSellers(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.LATEST_ARRIVALS))loadLatestArrivals(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.RISKY_ITEMS))loadAllRiskyItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.SEARCH))loadSearchItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.INVENTORY_OUTOFSYNC_ITEM_LIST))loadInventoryOutofSyncItems(start, limit);else if(currentTreeItemSelection.equals(CatalogTree.PRIVATE_DEALS))loadPrivateDealItems(start,limit);}};public ItemList() {initWidget(uiBinder.createAndBindUi(this));initItemList();}protected void loadInventoryOutofSyncItems(final int offset, final int limit) {catalogService.getInventoryOutofSyncItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get Inventory Out of Sync Items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "Inventory Out-of-Sync Items");}});catalogService.getInventoryOutofSyncItemsCount(new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}protected void loadPrivateDealItems(final int offset, final int limit){catalogService.getPrivateDealItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not Private Deal Items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "Private Deals");}});catalogService.getPrivateDealItemsCount(new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void initItemList() {// Add the columns.itemDescriptionTable.addColumn(idColumn, "Item Id");itemDescriptionTable.addColumn(pgColumn, "Product Group");itemDescriptionTable.addColumn(brandColumn, "Brand");itemDescriptionTable.addColumn(modelNumberColumn, "Model Number");itemDescriptionTable.addColumn(modelNameColumn, "Model Name");itemDescriptionTable.addColumn(colorColumn, "Color");itemDescriptionTable.addColumn(categoryColumn, "Category");//Set the widthsitemDescriptionTable.setWidth("100%");itemDescriptionTable.setColumnWidth(idColumn, 80.0, Unit.PX);itemDescriptionTable.setColumnWidth(pgColumn, 128.0, Unit.PX);itemDescriptionTable.setColumnWidth(brandColumn, 150.0, Unit.PX);itemDescriptionTable.setColumnWidth(modelNumberColumn, 200.0, Unit.PX);itemDescriptionTable.setColumnWidth(modelNameColumn, 200.0, Unit.PX);itemDescriptionTable.setColumnWidth(colorColumn, 128.0, Unit.PX);itemDescriptionTable.setColumnWidth(categoryColumn, 220.0, Unit.PX);// Connect the table to the data provider.//dataProvider.addDataDisplay(itemDescriptionTable);asyncDataProvider.addDataDisplay(itemDescriptionTable);//Add paging supportpager.setDisplay(itemDescriptionTable);// Add a selection model to handle item selection.final SingleSelectionModel<Item> selectionModel = new SingleSelectionModel<Item>();itemDescriptionTable.setSelectionModel(selectionModel);selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {@Overridepublic void onSelectionChange(SelectionChangeEvent event) {Item selectedItem = selectionModel.getSelectedObject();catalogService.getItem(selectedItem.getId(), new AsyncCallback<Item>() {@Overridepublic void onSuccess(Item result) {itemDetails.setItemDetails(result);}@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Unable to fetch item details.");}});}});loadAllRiskyItems();}public void loadAllItems() {currentTreeItemSelection = CatalogTree.ALL_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadAllActiveItems() {currentTreeItemSelection = CatalogTree.ALL_ACTIVE_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadAllPhasedOutItems() {currentTreeItemSelection = CatalogTree.ALL_PHASED_OUT_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadAllPausedItems() {currentTreeItemSelection = CatalogTree.ALL_PAUSED_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadAllInProcessItems() {currentTreeItemSelection = CatalogTree.IN_PROCESS_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadAllContentCompleteItems(){currentTreeItemSelection = CatalogTree.CONTENT_COMPLETE_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadAllRiskyItems() {currentTreeItemSelection = CatalogTree.RISKY_ITEMS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadBestDeals() {currentTreeItemSelection = CatalogTree.BEST_DEALS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadBestSellers() {currentTreeItemSelection = CatalogTree.BEST_SELLERS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadLatestArrivals() {currentTreeItemSelection = CatalogTree.LATEST_ARRIVALS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void searchForItems(String searchText) {currentTreeItemSelection = CatalogTree.SEARCH;this.searchText = searchText.trim().replaceAll("\\s+", " ");searchTerms = Arrays.asList(this.searchText.split(" "));itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}private void updateItemDescriptionTableRowCount(Integer count){asyncDataProvider.updateRowCount(count, true);}private void updateAsyncItemDescriptionTable(int start, List<Item> items){// Add the data to the data provider, which automatically pushes it to the// widget.asyncDataProvider.updateRowData(start, items);}private void loadAllItems(final int offset, final int limit) {catalogService.getAllItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get all items..");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "All Items");}});catalogService.getItemCountByStatus(false, ItemStatus.ACTIVE, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void loadAllActiveItems(final int offset, final int limit) {catalogService.getAllActiveItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get all active items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "Active Items");}});catalogService.getItemCountByStatus(true, ItemStatus.ACTIVE, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void loadAllPhasedOutItems(final int offset, int limit){catalogService.getAllPhasedOutItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load phased out items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "Phased Out Items");}});catalogService.getItemCountByStatus(true, ItemStatus.PHASED_OUT, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void loadAllPausedItems(final int offset, int limit) {catalogService.getAllPausedItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load paused items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "Paused Items");}});catalogService.getItemCountByStatus(true, ItemStatus.PAUSED, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void loadAllInProcessItems(final int offset, int limit) {catalogService.getAllInProcessItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load IN_PROCESS items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "In Process Items");}});catalogService.getItemCountByStatus(true, ItemStatus.IN_PROCESS, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void loadAllContentCompleteItems(final int offset, int limit) {catalogService.getAllContentCompleteItems(offset, limit, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load CONTENT_COMPLETE items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(offset, result);currentlyShowing.setText(LEGEND + "Content Complete Items");}});catalogService.getItemCountByStatus(true, ItemStatus.CONTENT_COMPLETE, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}private void loadAllRiskyItems(final int start, final int limit) {catalogService.getRiskyItems(new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load RISKY items...");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(start, result.subList(start, Math.min(start + limit, result.size())));updateItemDescriptionTableRowCount(result.size());currentTreeItemSelection = CatalogTree.RISKY_ITEMS;currentlyShowing.setText(LEGEND + "Risky Items");}});}private void loadBestDeals(final int start, final int limit) {catalogService.getBestDeals(new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load best deals.");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(start, result.subList(start, Math.min(start + limit, result.size())));updateItemDescriptionTableRowCount(result.size());currentlyShowing.setText(LEGEND + "Best Deals");}});}private void loadBestSellers(final int start, final int limit) {catalogService.getBestSellers(new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load best sellers.");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(start, result.subList(start, Math.min(start + limit, result.size())));updateItemDescriptionTableRowCount(result.size());currentlyShowing.setText(LEGEND + "Best Sellers");}});}private void loadLatestArrivals(final int start, final int limit) {catalogService.getLatestArrivals(new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load latest arrivals.");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(start, result.subList(start, Math.min(start + limit, result.size())));updateItemDescriptionTableRowCount(result.size());currentlyShowing.setText(LEGEND + "Latest Arrivals");}});}private void loadSearchItems(final int start, final int limit) {catalogService.searchItems(start, limit, searchTerms, new AsyncCallback<List<Item>>() {public void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not load the search results.");}public void onSuccess(List<Item> result) {updateAsyncItemDescriptionTable(start, result);currentlyShowing.setText(LEGEND + "Search results for " + searchText);}});catalogService.getSearchResultCount(searchTerms, new AsyncCallback<Integer>() {@Overridepublic void onFailure(Throwable caught) {caught.printStackTrace();Window.alert("Could not get the count of items...");}@Overridepublic void onSuccess(Integer count) {updateItemDescriptionTableRowCount(count);}});}public void setItemDetails(ItemDetails itemDetails) {this.itemDetails = itemDetails;}/*** This method is called when item is updated in ItemDetails.java to update* attributes in the list also.* @param item*/public void updateItem(Item item) {//TODO: Update the item in the list when its details are updated// itemDescriptionTable.setText(selectedRow, INDEX_PRODUCT_GROUP, item.getProductGroup());// itemDescriptionTable.setText(selectedRow, INDEX_BRAND, item.getBrand());// itemDescriptionTable.setText(selectedRow, INDEX_MODEL_NUMBER, item.getModelNumber());// itemDescriptionTable.setText(selectedRow, INDEX_MODEL_NAME, item.getModelName());// itemDescriptionTable.setText(selectedRow, INDEX_COLOR, item.getColor());}public void loadInventoryOutofSyncItems() {currentTreeItemSelection = CatalogTree.INVENTORY_OUTOFSYNC_ITEM_LIST;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}public void loadPrivateDealItems(){currentTreeItemSelection = CatalogTree.PRIVATE_DEALS;itemDescriptionTable.setVisibleRangeAndClearData(new Range(0, pager.getPageSize()), true);}}