org.ednovo.gooru.client.mvp.classpages.assignments.AddAssignmentContainerView.java Source code

Java tutorial

Introduction

Here is the source code for org.ednovo.gooru.client.mvp.classpages.assignments.AddAssignmentContainerView.java

Source

/*******************************************************************************
 * Copyright 2013 Ednovo d/b/a Gooru. All rights reserved.
 * 
 *  http://www.goorulearning.org/
 * 
 *  Permission is hereby granted, free of charge, to any person obtaining
 *  a copy of this software and associated documentation files (the
 *  "Software"), to deal in the Software without restriction, including
 *  without limitation the rights to use, copy, modify, merge, publish,
 *  distribute, sublicense, and/or sell copies of the Software, and to
 *  permit persons to whom the Software is furnished to do so, subject to
 *  the following conditions:
 * 
 *  The above copyright notice and this permission notice shall be
 *  included in all copies or substantial portions of the Software.
 * 
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 ******************************************************************************/
package org.ednovo.gooru.client.mvp.classpages.assignments;

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

import org.ednovo.gooru.client.SimpleAsyncCallback;
import org.ednovo.gooru.client.gin.AppClientFactory;
import org.ednovo.gooru.client.mvp.settings.CustomAnimation;
import org.ednovo.gooru.client.mvp.shelf.list.TreeMenuImages;
import org.ednovo.gooru.client.uc.DateBoxUcCustomizedForAssign;
import org.ednovo.gooru.shared.model.folder.FolderDo;
import org.ednovo.gooru.shared.model.folder.FolderListDo;
import org.ednovo.gooru.shared.util.MessageProperties;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.ScrollEvent;
import com.google.gwt.event.dom.client.ScrollHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.EventBus;
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.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.PopupViewWithUiHandlers;

public class AddAssignmentContainerView extends PopupViewWithUiHandlers<AddAssignmentContainerUiHandlers>
        implements IsAddAssignmentContainerView, MessageProperties {

    private static AddAssignmentContainerViewUiBinder uiBinder = GWT
            .create(AddAssignmentContainerViewUiBinder.class);

    interface AddAssignmentContainerViewUiBinder extends UiBinder<Widget, AddAssignmentContainerView> {
    }

    @UiField
    SimplePanel datePanelContainer;
    @UiField
    HTMLPanel floderTreeContainer;
    @UiField
    Button addResourceBtnLbl, cancelResourcePopupBtnLbl;
    @UiField
    ScrollPanel dropdownListContainerScrollPanel;
    @UiField
    Label dropdownListPlaceHolder, addingText, chooseCollectionErrorLabel, directionErrorLabel,
            addCollectionPopupHeader, assignmentTitleLabel, chooseCollectionHelpText, assignmentDirectionLabel,
            assignmentDueDateLabel;
    @UiField
    TextArea assignmentDirectionsTxtArea;
    private int offset = 0;
    private int limit = 20;
    private int totalHitCount = 0;
    private int pageNum = 1;

    protected PopupPanel appPopUp;
    private DateBoxUcCustomizedForAssign dateBoxUc;
    private Tree folderTreePanel = new Tree(new TreeMenuImages()) {
        @Override
        public void onBrowserEvent(Event event) {
            int eventType = DOM.eventGetType(event);
            if (!(eventType == Event.ONKEYUP || eventType == Event.ONKEYPRESS || eventType == Event.ONKEYDOWN)) {
                super.onBrowserEvent(event);
            }
        }
    };
    private CollectionTreeItem cureentcollectionTreeItem = null;
    private CollectionTreeItem previousSelectedItem = null;

    @Inject
    public AddAssignmentContainerView(EventBus eventBus) {
        super(eventBus);
        appPopUp = new PopupPanel();
        appPopUp.setWidget(uiBinder.createAndBindUi(this));
        AddAssignmentContainerCBundle.INSTANCE.css().ensureInjected();
        appPopUp.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().popupContainer());
        setStaticTexts();
        assignmentDirectionsTxtArea
                .addStyleName(AddAssignmentContainerCBundle.INSTANCE.css().assignmentsystemMessage());
        assignmentDirectionsTxtArea.getElement().setAttribute("maxlength", "400");
        dropdownListContainerScrollPanel.setVisible(false);
        addingText.setVisible(false);
        appPopUp.setGlassEnabled(true);
        appPopUp.setAutoHideOnHistoryEventsEnabled(true);

        datePanelContainer.clear();
        dateBoxUc = new DateBoxUcCustomizedForAssign(false, false, false);
        datePanelContainer.add(dateBoxUc);
        dateBoxUc.getDoneButton().addClickHandler(new OnDoneClick());
        dropdownListPlaceHolder.addClickHandler(new OnDropdownListPlaceHolderClick());
        dropdownListContainerScrollPanel.addScrollHandler(new ScrollDropdownListContainer());
        folderTreePanel.addSelectionHandler(new SelectionHandler<TreeItem>() {
            @Override
            public void onSelection(SelectionEvent<TreeItem> event) {
                final TreeItem item = (TreeItem) event.getSelectedItem();
                Widget folderWidget = item.getWidget();
                FolderTreeItem folderTreeItemWidget = null;
                if (folderWidget instanceof FolderTreeItem) {
                    folderTreeItemWidget = (FolderTreeItem) folderWidget;
                    if (folderTreeItemWidget.isOpen()) {
                        folderTreeItemWidget.removeStyleName(AddAssignmentContainerCBundle.INSTANCE.css().open());
                        folderTreeItemWidget.setOpen(false);
                    } else {
                        folderTreeItemWidget.addStyleName(AddAssignmentContainerCBundle.INSTANCE.css().open());
                        folderTreeItemWidget.setOpen(true);
                    }
                    TreeItem parent = item.getParentItem();
                    item.getTree().setSelectedItem(parent, false); // TODO FIX ME
                    if (!folderTreeItemWidget.isApiCalled()) {
                        folderTreeItemWidget.setApiCalled(true);
                        getFolderItems(item, folderTreeItemWidget.getGooruOid());
                    }
                    if (parent != null)
                        parent.setSelected(false); // TODO FIX ME
                    item.setState(!item.getState(), false);
                } else if (folderWidget instanceof CollectionTreeItem) {
                    if (previousSelectedItem != null) {
                        previousSelectedItem
                                .removeStyleName(AddAssignmentContainerCBundle.INSTANCE.css().selected());
                    }
                    cureentcollectionTreeItem = (CollectionTreeItem) folderWidget;
                    previousSelectedItem = cureentcollectionTreeItem;
                    cureentcollectionTreeItem.addStyleName(AddAssignmentContainerCBundle.INSTANCE.css().selected());
                    setSelectedCollectionTitle();
                    closeDropDown();
                }
            }
        });
        floderTreeContainer.clear();
        floderTreeContainer.add(folderTreePanel);
        folderTreePanel.addItem(loadingTreeItem());

    }

    public void setStaticTexts() {
        addCollectionPopupHeader.setText(GL1375);
        assignmentTitleLabel.setText(GL1376);
        dropdownListPlaceHolder.setText(GL1377);
        chooseCollectionHelpText.setText(GL1378);
        assignmentDirectionLabel.setText(GL1379);
        assignmentDueDateLabel.setText(GL1380);
        cancelResourcePopupBtnLbl.setText(GL0142);
        addResourceBtnLbl.setText(GL0104);
        addingText.setText(GL1172);
        assignmentDirectionsTxtArea.setText(GL1389);
        assignmentDueDateLabel.setText(GL1380);
    }

    public void setSelectedCollectionTitle() {
        if (cureentcollectionTreeItem != null) {
            dropdownListPlaceHolder.setText(cureentcollectionTreeItem.getCollectionName());
            chooseCollectionErrorLabel.setText("");
        }
    }

    public void closeDropDown() {
        new CustomAnimation(dropdownListContainerScrollPanel).run(300);
    }

    public void setFolderItems(TreeItem item, FolderListDo folderListDo) {
        displayWorkspaceData(item, folderListDo);
    }

    public void getFolderItems(TreeItem item, String parentId) {
        getUiHandlers().getFolderItems(item, parentId);
    }

    @UiHandler("addResourceBtnLbl")
    public void addButtonEvent(ClickEvent event) {
        addResourceBtnLbl.setEnabled(false);
        addCollectionToAssign();
    }

    @UiHandler("cancelResourcePopupBtnLbl")
    public void cancelButtonEvent(ClickEvent event) {
        directionErrorLabel.setText("");
        hide();
    }

    @UiHandler("assignmentDirectionsTxtArea")
    public void diectionFocusEvent(FocusEvent event) {
        String directionText = assignmentDirectionsTxtArea.getText().trim();
        if (directionText.equalsIgnoreCase(GL1389)) {
            assignmentDirectionsTxtArea.setText("");
        }
        assignmentDirectionsTxtArea
                .removeStyleName(AddAssignmentContainerCBundle.INSTANCE.css().assignmentsystemMessage());
    }

    @UiHandler("assignmentDirectionsTxtArea")
    public void diectionKeyUpEvent(KeyUpEvent event) {
        String directionText = assignmentDirectionsTxtArea.getText().trim();
        if (directionText.length() >= 400) {
            directionErrorLabel.setText(GL0143);
            //event.preventDefault();

        } else {
            directionErrorLabel.setText("");
        }
    }

    @UiHandler("assignmentDirectionsTxtArea")
    public void diectionBlurEvent(BlurEvent event) {
        String directionText = assignmentDirectionsTxtArea.getText().trim();
        if (!directionText.equalsIgnoreCase(GL1389) && directionText.length() > 0) {
            if (directionText.length() >= 400) {
                directionErrorLabel.setText(GL0143);
            } else {
                Map<String, String> parms = new HashMap<String, String>();
                parms.put("text", directionText);
                AppClientFactory.getInjector().getResourceService().checkProfanity(parms,
                        new SimpleAsyncCallback<Boolean>() {
                            @Override
                            public void onSuccess(Boolean isFound) {
                                if (isFound && appPopUp.isShowing()) {
                                    directionErrorLabel.setText(GL0554);
                                } else {
                                    directionErrorLabel.setText("");
                                }
                            }
                        });
            }
        } else {
            assignmentDirectionsTxtArea.setText(GL1389);
            assignmentDirectionsTxtArea
                    .addStyleName(AddAssignmentContainerCBundle.INSTANCE.css().assignmentsystemMessage());
        }
    }

    public void addCollectionToAssign() {
        if (cureentcollectionTreeItem != null) {
            final String directions = assignmentDirectionsTxtArea.getText().trim().equals(GL1389) ? null
                    : assignmentDirectionsTxtArea.getText().trim();
            final String dueDate = dateBoxUc.getDateBox().getValue() == null
                    || dateBoxUc.getDateBox().getValue().equals("") ? null : dateBoxUc.getDateBox().getValue();
            Map<String, String> parms = new HashMap<String, String>();
            parms.put("text", assignmentDirectionsTxtArea.getText());
            AppClientFactory.getInjector().getResourceService().checkProfanity(parms,
                    new SimpleAsyncCallback<Boolean>() {
                        @Override
                        public void onSuccess(Boolean isFound) {
                            if (isFound) {
                                directionErrorLabel.setText(GL0554);
                                addResourceBtnLbl.setVisible(true);
                                cancelResourcePopupBtnLbl.setVisible(true);
                                addingText.setVisible(false);
                                addResourceBtnLbl.setEnabled(true);
                            } else {
                                directionErrorLabel.setText("");
                                addResourceBtnLbl.setVisible(false);
                                cancelResourcePopupBtnLbl.setVisible(false);
                                addingText.setVisible(true);
                                getUiHandlers().addCollectionToAssign(cureentcollectionTreeItem.getGooruOid(),
                                        directions, dueDate);
                                addResourceBtnLbl.setEnabled(true);
                            }
                        }
                    });
        } else {
            chooseCollectionErrorLabel.setText(GL1475);
            //         chooseCollectionErrorLabel.getElement().getStyle().setMarginTop(0, Unit.PX);
            addResourceBtnLbl.setEnabled(true);
        }

    }

    public class FolderTreeItem extends Composite {
        private FlowPanel folderContainer = null;
        private String gooruOid = null;
        Label floderName = null;
        Label arrowLabel = null;
        private boolean isOpen = false;
        private boolean isApiCalled = false;
        private int folerLevel = 1;

        public FolderTreeItem() {
            initWidget(folderContainer = new FlowPanel());
            folderContainer.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().folderLevel());
            Label arrowLabel = new Label();
            arrowLabel.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().arrow());
            folderContainer.add(arrowLabel);
            floderName = new Label();
            floderName.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().title());
            folderContainer.add(floderName);
        }

        public FolderTreeItem(String levelStyleName, String folderTitle, String gooruOid) {
            this();
            if (levelStyleName != null) {
                folderContainer.addStyleName(levelStyleName);
            }
            this.gooruOid = gooruOid;
            floderName.setText(folderTitle);
        }

        public boolean isOpen() {
            return isOpen;
        }

        public void setOpen(boolean isOpen) {
            this.isOpen = isOpen;
        }

        public String getGooruOid() {
            return gooruOid;
        }

        public boolean isApiCalled() {
            return isApiCalled;
        }

        public void setApiCalled(boolean isApiCalled) {
            this.isApiCalled = isApiCalled;
        }

        public int getFolerLevel() {
            return folerLevel;
        }

        public void setFolerLevel(int folerLevel) {
            this.folerLevel = folerLevel;
        }
    }

    public class CollectionTreeItem extends Composite {
        private FlowPanel folderContainer = null;
        Label folderName = null;
        private String collectionName = null;
        private String gooruOid = null;
        private boolean isOpen = false;

        public CollectionTreeItem() {
            initWidget(folderContainer = new FlowPanel());
            folderContainer.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().foldercollection());
            folderName = new Label();
            folderName.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().title());
            folderContainer.add(folderName);
        }

        public CollectionTreeItem(String levelStyleName) {
            this();
            folderContainer.addStyleName(levelStyleName);
        }

        public CollectionTreeItem(String levelStyleName, String folderTitle, String gooruOid) {
            this();
            if (levelStyleName != null) {
                folderContainer.addStyleName(levelStyleName);
            }
            this.gooruOid = gooruOid;
            this.collectionName = folderTitle;
            folderName.setText(folderTitle);
        }

        public boolean isOpen() {
            return isOpen;
        }

        public void setOpen(boolean isOpen) {
            this.isOpen = isOpen;
        }

        public String getGooruOid() {
            return gooruOid;
        }

        public String getCollectionName() {
            return collectionName;
        }

    }

    @Override
    public void displayWorkspaceData(FolderListDo folderListDo, boolean clearShelfPanel) {
        if (clearShelfPanel) {
            folderTreePanel.clear();
        }
        if (folderListDo != null) {
            List<FolderDo> foldersArrayList = folderListDo.getSearchResult();
            setPagination(folderListDo.getCount());
            if (foldersArrayList != null && foldersArrayList.size() > 0) {
                for (int i = 0; i < foldersArrayList.size(); i++) {
                    FolderDo floderDo = foldersArrayList.get(i);
                    if (floderDo.getType().equals("folder")) {
                        TreeItem folderItem = new TreeItem(
                                new FolderTreeItem(null, floderDo.getTitle(), floderDo.getGooruOid()));
                        folderTreePanel.addItem(folderItem);
                        adjustTreeItemStyle(folderItem);
                    } else if (floderDo.getType().equals("scollection")) {
                        TreeItem folderItem = new TreeItem(
                                new CollectionTreeItem(null, floderDo.getTitle(), floderDo.getGooruOid()));
                        folderTreePanel.addItem(folderItem);
                        adjustTreeItemStyle(folderItem);
                    }
                }
            }
        }
    }

    public void displayWorkspaceData(TreeItem item, FolderListDo folderListDo) {
        if (folderListDo != null) {
            List<FolderDo> foldersArrayList = folderListDo.getSearchResult();
            if (foldersArrayList != null && foldersArrayList.size() > 0) {
                FolderTreeItem folderTreeItemWidget = (FolderTreeItem) item.getWidget();
                int folderLevel = folderTreeItemWidget.getFolerLevel();
                for (int i = 0; i < foldersArrayList.size(); i++) {
                    FolderDo floderDo = foldersArrayList.get(i);
                    if (floderDo.getType().equals("folder")) {
                        String styleName = folderLevel == 1 ? AddAssignmentContainerCBundle.INSTANCE.css().parent()
                                : AddAssignmentContainerCBundle.INSTANCE.css().child();
                        FolderTreeItem innerFolderTreeItem = new FolderTreeItem(styleName, floderDo.getTitle(),
                                floderDo.getGooruOid());
                        innerFolderTreeItem.setFolerLevel(folderLevel + 1);
                        TreeItem folderItem = new TreeItem(innerFolderTreeItem);
                        item.addItem(folderItem);
                        adjustTreeItemStyle(folderItem);
                    } else if (floderDo.getType().equals("scollection")) {
                        TreeItem folderItem = new TreeItem(new CollectionTreeItem(getTreeItemStyleName(folderLevel),
                                floderDo.getTitle(), floderDo.getGooruOid()));
                        item.addItem(folderItem);
                        adjustTreeItemStyle(folderItem);
                    }
                }
                item.setState(folderTreeItemWidget.isOpen());
            }
        }
    }

    private String getTreeItemStyleName(int folderLevel) {
        if (folderLevel == 1) {
            return AddAssignmentContainerCBundle.INSTANCE.css().parent();
        } else if (folderLevel == 2) {
            return AddAssignmentContainerCBundle.INSTANCE.css().child();
        } else {
            return AddAssignmentContainerCBundle.INSTANCE.css().innerchild();
        }
    }

    private void adjustTreeItemStyle(final UIObject uiObject) {
        if (uiObject instanceof TreeItem) {
            if (uiObject != null && uiObject.getElement() != null) {
                Element element = uiObject.getElement();
                element.getStyle().setPadding(0, Unit.PX);
                element.getStyle().setMarginLeft(0, Unit.PX);
            }
        } else {
            if (uiObject != null && uiObject.getElement() != null
                    && uiObject.getElement().getParentElement() != null
                    && uiObject.getElement().getParentElement().getParentElement() != null
                    && uiObject.getElement().getParentElement().getParentElement().getStyle() != null) {
                Element element = uiObject.getElement().getParentElement().getParentElement();
                element.getStyle().setPadding(0, Unit.PX);
                element.getStyle().setMarginLeft(0, Unit.PX);
            }
        }
    }

    public void setPagination(int count) {
        totalHitCount = count;
    }

    private class OnDropdownListPlaceHolderClick implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            new CustomAnimation(dropdownListContainerScrollPanel).run(300);
        }
    }

    private class ScrollDropdownListContainer implements ScrollHandler {
        @Override
        public void onScroll(ScrollEvent event) {
            if ((dropdownListContainerScrollPanel.getVerticalScrollPosition() == dropdownListContainerScrollPanel
                    .getMaximumVerticalScrollPosition()) && (totalHitCount > pageNum * limit)) {
                getUiHandlers().getWorkspaceData(pageNum * limit, limit, false);
                pageNum++;
            }
        }
    }

    private class OnDoneClick implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            if (dateBoxUc.dateValidation()) {
                if (!(dateBoxUc.getValue() == null || dateBoxUc.getDateBox().getText().isEmpty())
                        && dateBoxUc.hasValidateDate()) {
                    Date date = dateBoxUc.getValue();

                } else {
                    dateBoxUc.getDatePickerUc().hide();
                }
            }
        }
    }

    @Override
    public Widget asWidget() {
        return appPopUp;
    }

    @Override
    public void reset() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLoad() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUnload() {
        appPopUp.hide();
    }

    public void hide() {
        dropdownListContainerScrollPanel.setVisible(false);
        addingText.setVisible(false);
        addResourceBtnLbl.setVisible(true);
        cancelResourcePopupBtnLbl.setVisible(true);
        chooseCollectionErrorLabel.setText("");
        directionErrorLabel.setText("");
        assignmentDirectionsTxtArea.setText(GL1389);
        assignmentDirectionsTxtArea
                .addStyleName(AddAssignmentContainerCBundle.INSTANCE.css().assignmentsystemMessage());
        dateBoxUc.getDateBox().setValue("");
        Window.enableScrolling(true);
        super.hide();
    }

    @Override
    public void clearShelfData() {
        addingText.setVisible(false);
        folderTreePanel.clear();
        folderTreePanel.addItem(loadingTreeItem());
        cureentcollectionTreeItem = null;
        previousSelectedItem = null;
        dropdownListPlaceHolder.setText(GL1377);
        offset = 0;
        limit = 20;
        totalHitCount = 0;
        pageNum = 1;
    }

    @Override
    public void hideAddCollectionPopup(String collectionTitle) {
        hide();
        clearShelfData();
        new SuccessMessagePopupView(collectionTitle);
    }

    public TreeItem loadingTreeItem() {
        Label loadingText = new Label(GL1452);
        loadingText.setStyleName(AddAssignmentContainerCBundle.INSTANCE.css().loadingText());
        return new TreeItem(loadingText);
    }

}