Subversion Repositories SmartDukaan

Rev

Rev 2066 | Rev 2119 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.catalog.dashboard.client;

import in.shop2020.catalog.dashboard.shared.Item;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
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.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTMLTable.Cell;
import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.Widget;

public class ItemList extends ResizeComposite{

    public static final int VISIBLE_ITEMS_COUNT = 10;
    
    public interface Listener {
        void onItemSelected(long itemId);
      }
    
    //Map<Long, Item> itemsMap = new HashMap<Long, Item>();
    
    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 FlexTable header;
    @UiField FlexTable itemDescriptionTable;
    @UiField SelectionStyle selectionStyle;
    private Listener listener;
    private int selectedRow = -1;
    
    
    private List<Item> items;
    
    public ItemList() {
        initWidget(uiBinder.createAndBindUi(this));
        initHeader();
        initItemList();
    }
    
    private void initItemList() {
        loadBestDeals();
        //loadDummyItems();
        //updateItemDescriptionTable(items);
    }
    
    private void initHeader(){
        // Initialize the header.
        header.getColumnFormatter().setWidth(0, "80px");
        header.getColumnFormatter().setWidth(1, "128px");
        header.getColumnFormatter().setWidth(2, "150px");
        header.getColumnFormatter().setWidth(3, "200px");
        header.getColumnFormatter().setWidth(4, "200px");
        header.getColumnFormatter().setWidth(5, "128px");
        header.getColumnFormatter().setWidth(6, "220px");

        header.setText(0, 0, "Item Id");
        header.setText(0, 1, "Product Group");
        header.setText(0, 2, "Brand");
        header.setText(0, 3, "Model Number");
        header.setText(0, 4, "Model Name");
        header.setText(0, 5, "Color");
        header.setText(0, 6, "Category");
    }
    
    private void updateItemDescriptionTable(List<Item> items){
        itemDescriptionTable.removeAllRows();
        itemDescriptionTable.getColumnFormatter().setWidth(0, "80px");
        itemDescriptionTable.getColumnFormatter().setWidth(1, "128px");
        itemDescriptionTable.getColumnFormatter().setWidth(2, "150px");
        itemDescriptionTable.getColumnFormatter().setWidth(3, "200px");
        itemDescriptionTable.getColumnFormatter().setWidth(4, "200px");
        itemDescriptionTable.getColumnFormatter().setWidth(5, "128px");
        itemDescriptionTable.getColumnFormatter().setWidth(6, "220px");
        
        int i=0;
        for(final Item item : items){
            //itemsMap.put(item.getId(), item);
            int col = 0;
            itemDescriptionTable.setText(i, col++, item.getId() + "");
            itemDescriptionTable.setText(i, col++, item.getProductGroup());
            itemDescriptionTable.setText(i, col++, item.getBrand());
            itemDescriptionTable.setText(i, col++, item.getModelNumber());
            itemDescriptionTable.setText(i, col++, item.getModelName());
            itemDescriptionTable.setText(i, col++, item.getColor());
            itemDescriptionTable.setText(i, col++, item.getContentCategory()+"");
            i++;
        }
    }
    
    public void setListener(Listener listener) {
        this.listener = listener;
      }
    
    @UiHandler("itemDescriptionTable")
    void onClick(ClickEvent event) {

        Cell cell = itemDescriptionTable.getCellForEvent(event);
        int newRowIndex = cell.getRowIndex();
        selectRow(newRowIndex);
        String itemId = itemDescriptionTable.getText(newRowIndex, 0);
        listener.onItemSelected(Long.parseLong(itemId));
    }

    private void selectRow(int row) {
        String style = selectionStyle.selectedRow();
        if(selectedRow != -1){
            itemDescriptionTable.getRowFormatter().removeStyleName(selectedRow, style);
        }
            
        itemDescriptionTable.getRowFormatter().addStyleName(row, style);
        selectedRow = row;
    }
    
    private void loadDummyItems() {
        
        Item i = new Item(1, "Handset", "Spice", "mi310", "phone", "White", 324, "comments", 1, 1, 
                "", 3000.50, 3000.00, 3000, 3000, 12, 12345, 12345, 12345, 12345, "status", null, "best", 2990, 1, true, null, null);
        List<Item> items = new ArrayList<Item>();
        items.add(i);
        this.items = items;
        //itemsMap.put(i.getId(), i);
        
    }
    
    public void loadAllItems() {
        catalogService.getAllItems(new AsyncCallback<List<Item>>() {
            public void onFailure(Throwable caught) {
                Window.alert("Could not get all items...");
            }
            public void onSuccess(List<Item> result) {
                updateItemDescriptionTable(result);
                //setItems(result);
            }
        });
    }
    
    public void loadBestDeals() {
        catalogService.getBestDeals(new AsyncCallback<List<Item>>() {
            public void onFailure(Throwable caught) {
                Window.alert("Could not load best deals.");
            }
            public void onSuccess(List<Item> result) {
                updateItemDescriptionTable(result);
                //setItems(result);
            }
        });
    }
    
    public void loadLatestArrivals() {
        catalogService.getLatestArrivals(new AsyncCallback<List<Item>>() {
            public void onFailure(Throwable caught) {
                Window.alert("Could not load latest arrivals.");
            }
            public void onSuccess(List<Item> result) {
                updateItemDescriptionTable(result);
                //setItems(result);
            }
        });
    }
    
    public void loadBestSellers() {
        catalogService.getBestSellers(new AsyncCallback<List<Item>>() {
            public void onFailure(Throwable caught) {
                Window.alert("Could not load best sellers.");
            }
            public void onSuccess(List<Item> result) {
                updateItemDescriptionTable(result);
                //setItems(result);
            }
        });
    }
    
}