Rev 6788 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.catalog.dashboard.client;import java.util.Map.Entry;import in.shop2020.catalog.dashboard.shared.Item;import in.shop2020.catalog.dashboard.shared.Utils;import com.google.gwt.core.client.GWT;import com.google.gwt.event.dom.client.ClickEvent;import com.google.gwt.event.dom.client.ClickHandler;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.Button;import com.google.gwt.user.client.ui.DialogBox;import com.google.gwt.user.client.ui.HorizontalPanel;import com.google.gwt.user.client.ui.Label;import com.google.gwt.user.client.ui.ListBox;import com.google.gwt.user.client.ui.ResizeComposite;import com.google.gwt.user.client.ui.VerticalPanel;import com.google.gwt.user.client.ui.Widget;/*** Panel containing buttons for different actions on item.* e.g. update item, add new item, change item status, mark/unmark risky, push prices to production etc.* @author ankur**/public class ItemActions extends ResizeComposite{interface ItemActionsUiBinder extends UiBinder<Widget, ItemActions> {}private static ItemActionsUiBinder uiBinder = GWT.create(ItemActionsUiBinder.class);private final CatalogServiceAsync catalogService = GWT.create(CatalogService.class);private ItemDetails itemDetails;@UiField Button addItem, updateItem, pushItemToProd, phaseoutItem, activateItem, markAliveItem, pauseItem, partiallyActive;@UiField Button markRisky, unmarkRisky;@UiField Button generateMasterSheet;public ItemActions(){initWidget(uiBinder.createAndBindUi(this));//pushItemToProd.setEnabled(false);}@UiHandler("updateItem")void updateItem(ClickEvent event) {itemDetails.updateItem();}@UiHandler("partiallyActive")void partiallyActive(ClickEvent event) {if(itemDetails.getItem() == null) {Window.alert("Please select an item to update");return;}if(itemDetails.getItem().getItemStatusValue().equals(8) || itemDetails.getItem().getItemStatusValue().equals(4)) {new PartiallyActiveDialog(itemDetails.getItem());} else {Window.alert("Could not be marked Partially Active");}}/*** creates a new form to fill up item details and displays the form.* @param event*/@UiHandler("addItem")void addItem(ClickEvent event) {ItemForm itemForm = new ItemForm();itemForm.center();itemForm.show();}@UiHandler("phaseoutItem")void phaseoutItem(ClickEvent event) {final long itemId = validateStatusChange(Utils.PHASED_OUT);if(itemId <= 0) {return;}catalogService.phaseoutItem(itemId, new AsyncCallback<Void>() {@Overridepublic void onSuccess(Void result) {Window.alert("Item marked as PHASED OUT");}@Overridepublic void onFailure(Throwable caught) {Window.alert("Error while marking item " + itemId + " PHASED OUT");}});}@UiHandler("activateItem")void activateItem(ClickEvent event) {final long itemId = validateStatusChange(Utils.ACTIVE);if(itemId <= 0) {return;}catalogService.activateItem(itemId, new AsyncCallback<Void>() {@Overridepublic void onSuccess(Void result) {Window.alert("Item marked as ACTIVE");}@Overridepublic void onFailure(Throwable caught) {Window.alert("Error while marking item " + itemId + " ACTIVE");}});}@UiHandler("pauseItem")void pauseItem(ClickEvent event) {final long itemId = validateStatusChange(Utils.PAUSED);if(itemId <= 0) {return;}catalogService.pauseItem(itemId, new AsyncCallback<Void>() {@Overridepublic void onSuccess(Void result) {Window.alert("Item marked as PAUSED");}@Overridepublic void onFailure(Throwable caught) {Window.alert("Error while marking item " + itemId + " PAUSED");}});}@UiHandler("markAliveItem")void markAsAlive(ClickEvent event) {final long itemId = validateStatusChange(Utils.IN_PROCESS);if(itemId <= 0) {return;}catalogService.markInProcess(itemId, new AsyncCallback<Void>() {@Overridepublic void onSuccess(Void result) {Window.alert("Item marked as IN PROCESS");}@Overridepublic void onFailure(Throwable caught) {Window.alert("Error while marking item " + itemId + " IN PROCESS");}});}/*** Creates and pops up authentication dialog for push to production username and password* @param event*/@UiHandler("pushItemToProd")void pushItemToProduction(ClickEvent event) {if(itemDetails.getItem() == null) {Window.alert("Please select an item to update");return;}AuthenticateDialog authDialog = new AuthenticateDialog(itemDetails.getItem());authDialog.show();}@UiHandler("markRisky")void markRisky(ClickEvent event) {changeRiskyFlag(true);}@UiHandler("unmarkRisky")void unmarkRisky(ClickEvent event) {changeRiskyFlag(false);}@UiHandler("generateMasterSheet")void generateMasterSheet(ClickEvent event) {createDialog();}/*** Creates and pops up dialog box containing following options.* Categories: 1) Handsets 2) Accessories* Vendors: 1) Hotspot 2) Tulip 3) Sarvottam* Also creates submit and cancel buttons and add click event listeners to them.* On submit button click, request is sent to <code>in.shop2020.catalog.dashboard.server.FileDownloadServlet<code>*/private void createDialog() {VerticalPanel vp = new VerticalPanel();final DialogBox db = new DialogBox();db.setText("Master Sheet Download");final Label categoryLabel = new Label("Category");vp.add(categoryLabel);final ListBox category = new ListBox();category.addItem("ALL");category.addItem("ALL Handsets");category.addItem("ALL Accessories");for(String display_name : Utils.getAllCategories()){category.addItem(display_name);}vp.add(category);final Label vendorLabel = new Label("Vendor");vp.add(vendorLabel);final ListBox vendor = new ListBox();vendor.addItem("ALL");for(Entry<Long, String> e : Utils.getAllVendors().entrySet()){vendor.addItem(e.getValue());}vp.add(vendor);final Label brandLabel = new Label("Brand");vp.add(brandLabel);final ListBox brand = new ListBox();brand.addItem("ALL");for(String brand_name : Utils.getAllBrands()){brand.addItem(brand_name);}vp.add(brand);Button submitButton = new Button("OK");Button cancelButton = new Button("Cancel");HorizontalPanel hpButtons = new HorizontalPanel();hpButtons.setSpacing(5);hpButtons.add(submitButton);hpButtons.add(cancelButton);vp.add(hpButtons);db.add(vp);submitButton.addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {String Category = category.getItemText(category.getSelectedIndex());String Brand = brand.getItemText(brand.getSelectedIndex());long vendorId;if(vendor.getSelectedIndex() != 0){vendorId = Utils.getVendorId(vendor.getItemText(vendor.getSelectedIndex()));}else{vendorId = 0;}// Servlet mapping mastersheet/download is mapped to in.shop2020.catalog.dashboard.server.FileDownloadServletString link = GWT.getHostPageBaseURL() + "mastersheet/download?Category=" + Category + "&vendorId=" + vendorId + "&brand=" + Brand;Window.open(link, "_self", "Master Sheet Download");db.hide();}});cancelButton.addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {db.hide();}});db.center();db.setAnimationEnabled(true);db.show();}/*** validates and then calls service method changeItemRiskyFlag to change risky flag.* @param risky*/private void changeRiskyFlag(boolean risky) {Item item = itemDetails.getItem();if(item == null) {Window.alert("Please select an item to mark/unmark as risky");return;}if(risky && item.isRisky()) {Window.alert("Item already marked as risky");return;}if(!risky && !item.isRisky()) {Window.alert("Item not marked as risky");return;}catalogService.changeItemRiskyFlag(item.getId(), risky, new AsyncCallback<Boolean>() {@Overridepublic void onSuccess(Boolean result) {if(result) {Window.alert("Done!");} else {Window.alert("Error while marking/unmarking risky flag on staging/production server.");}}@Overridepublic void onFailure(Throwable caught) {Window.alert("Error");}});}public void setItemDetails(ItemDetails itemDetails) {this.itemDetails = itemDetails;}public void disableAllActions() {addItem.setEnabled(false);updateItem.setEnabled(false);pushItemToProd.setEnabled(false);phaseoutItem.setEnabled(false);activateItem.setEnabled(false);markAliveItem.setEnabled(false);pauseItem.setEnabled(false);markRisky.setEnabled(false);unmarkRisky.setEnabled(false);generateMasterSheet.setEnabled(false);;}/*** Validate item status change.* @param toStatus* @return item Id if validation is successful else -1*/private long validateStatusChange(int toStatus) {final Item item = itemDetails.getItem();if(item == null) {Window.alert(getAlertString(toStatus)[0]);return -1;}if(!Utils.validateStatusChange(item.getItemStatusValue(), toStatus)) {Window.alert(getAlertString(toStatus)[1]);return -1;}return item.getId();}/*** @param toStatus* @return messages to be show to the user if item status change validation fails.* <br>-first message will be shown if no item is selected in the list* <br>-second message is shown if validation for FromStatus to ToStatus fails.*/private String[] getAlertString(int toStatus) {String[] alertStr = {"", ""};switch(toStatus) {case Utils.PAUSED: {alertStr[0] = "Please select an ACTIVE item to mark PAUSED";alertStr[1] = "Cannot mark this item as PAUSED";break;}case Utils.IN_PROCESS: {alertStr[0] = "Please select a PHASED OUT item to mark IN PROCESS";alertStr[1] = "Cannot mark this item as IN PROCESS";break;}case Utils.ACTIVE: {alertStr[0] = "Please select a PAUSED item to mark ACTIVE";alertStr[1] = "Cannot mark this item as ACTIVE";break;}case Utils.PHASED_OUT: {alertStr[0] = "Please select an item to mark PHASED OUT";alertStr[1] = "Cannot mark this item as PHASED OUT";break;}}return alertStr;}}