org.ednovo.gooru.client.mvp.folders.edit.EditFolderView.java Source code

Java tutorial

Introduction

Here is the source code for org.ednovo.gooru.client.mvp.folders.edit.EditFolderView.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.folders.edit;

import java.util.List;

import org.ednovo.gooru.client.gin.AppClientFactory;
import org.ednovo.gooru.client.gin.BaseViewWithHandlers;
import org.ednovo.gooru.client.mvp.folders.edit.tab.info.FolderCBundle;
import org.ednovo.gooru.client.mvp.folders.newfolder.FolderDeleteConfirmationPopUp;
import org.ednovo.gooru.client.mvp.search.event.SetHeaderZIndexEvent;
import org.ednovo.gooru.client.mvp.shelf.ShelfCBundle;
import org.ednovo.gooru.client.mvp.shelf.collection.CollectionTabTitleVc;
import org.ednovo.gooru.client.mvp.shelf.event.RefreshCollectionInShelfListEvent;
import org.ednovo.gooru.client.mvp.shelf.event.RefreshType;
import org.ednovo.gooru.client.uc.FolderEditableLabelUc;
import org.ednovo.gooru.client.uc.FolderEditableTextAreaUc;
import org.ednovo.gooru.client.ui.HTMLEventPanel;
import org.ednovo.gooru.shared.model.content.CollectionDo;

import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.storage.client.Storage;
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.ui.FlowPanel;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.proxy.PlaceRequest;

/**
 * @fileName : EditFolderView.java
 *
 * @description : 
 *
 *
 * @version : 1.0
 *
 * @date: Apr 20, 2013
 *
 * @Author Gooru Team
 *
 * @Reviewer: 
 */
public class EditFolderView extends BaseViewWithHandlers<EditFolderUiHandlers>
        implements IsEditFolderView, ClickHandler {

    @UiField
    SimplePanel shelfTabSimPanel;

    @UiField
    SimplePanel collectionMetaDataSimPanel;

    @UiField
    CollectionTabTitleVc infoTabVc, contentTabVc;

    @UiField
    FocusPanel simplePencilFocPanel;

    @UiField
    Label collectionEditImageLbl/*, folderPanelRedirect*/;

    @UiField
    HTMLPanel workspaceFoldersList, info, clearPanel;

    @UiField(provided = true)
    FolderEditableLabelUc folderTitle;

    @UiField(provided = true)
    FolderEditableTextAreaUc folderDescription;

    @UiField
    HTMLEventPanel folderDeleteLabel, editFolderSaveButton, editFolderSaveButtonCancel, editFolderDescSaveButton,
            editFolderDescSaveButtonCancel, simplePencilPanel, collectionDescriptionTitleContainer, editFolderDesc,
            editFolderTitle, myFolderRightContainer;

    @UiField
    Label foldersBreadCrumps, titleAlertMessageLbl, descriptionAlertMessageLbl, collectionDescriptionTitle;

    @UiField
    HTML backToSearchPreHtml, backToSearchHtml;

    @UiField
    FlowPanel backToSearchFloPanel;

    @UiField(provided = true)
    ShelfCBundle res;

    private CollectionDo collectionDo = null;

    /*HTML5 Storage implementation for tab persistance*/
    private Storage stockStore = null;

    private PlaceRequest searchRequest = null;

    private static final String PRE_SEARCH_LINK = "Back To Search \"";

    private FolderDeleteConfirmationPopUp folderDeleteConfirmationPopUp;

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

    interface EditFolderViewUiBinder extends UiBinder<Widget, EditFolderView> {
    }

    @Inject
    public EditFolderView() {
        this.res = ShelfCBundle.INSTANCE;
        folderDescription = new FolderEditableTextAreaUc() {
            @Override
            public void onEditDisabled(String text) {
                descriptionAlertMessageLbl.addStyleName("titleAlertMessageDeActive");
                descriptionAlertMessageLbl.removeStyleName("titleAlertMessageActive");
                editFolderDescSaveButton.getElement().getStyle().setDisplay(Display.NONE);
                editFolderDescSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
                collectionDo.setGoals(text);
                getUiHandlers().updateCollectionInfo(collectionDo.getGooruOid(), null, text);
            }

            @Override
            public void checkCharacterLimit(String text) {
                if (text.length() >= 415) {
                    descriptionAlertMessageLbl.addStyleName("titleAlertMessageActive");
                    descriptionAlertMessageLbl.removeStyleName("titleAlertMessageDeActive");
                } else {
                    descriptionAlertMessageLbl.addStyleName("titleAlertMessageDeActive");
                    descriptionAlertMessageLbl.removeStyleName("titleAlertMessageActive");
                }
            }
        };

        folderTitle = new FolderEditableLabelUc() {
            @Override
            public void onEditDisabled(String text) {
                titleAlertMessageLbl.addStyleName("titleAlertMessageDeActive");
                titleAlertMessageLbl.removeStyleName("titleAlertMessageActive");
                collectionDo.setTitle(text);
                editFolderSaveButton.getElement().getStyle().setDisplay(Display.NONE);
                editFolderSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
                getUiHandlers().updateCollectionInfo(collectionDo.getGooruOid(), text, null);
            }

            @Override
            public void checkCharacterLimit(String text) {
                if (text.length() >= 50) {
                    titleAlertMessageLbl.addStyleName("titleAlertMessageActive");
                    titleAlertMessageLbl.removeStyleName("titleAlertMessageDeActive");
                } else {
                    titleAlertMessageLbl.addStyleName("titleAlertMessageDeActive");
                    titleAlertMessageLbl.removeStyleName("titleAlertMessageActive");
                }
            }
        };
        FolderCBundle.INSTANCE.css().ensureInjected();
        res.css().ensureInjected();
        setWidget(uiBinder.createAndBindUi(this));

        simplePencilFocPanel.addMouseOverHandler(new hideEditPencil());
        simplePencilFocPanel.addMouseOutHandler(new showEditPencil());
        collectionEditImageLbl.addClickHandler(new OnEditImageClick());
        editFolderTitle.addClickHandler(new OnEditImageClick());

        editFolderSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        editFolderSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
        editFolderDescSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        editFolderDescSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
        simplePencilPanel.getElement().getStyle().setDisplay(Display.NONE);
        backToSearchFloPanel.getElement().getStyle().setDisplay(Display.NONE);

        collectionDescriptionTitleContainer.addMouseOverHandler(new OnCollectionDescriptionClick());
        collectionDescriptionTitleContainer.addMouseOutHandler(new OnCollectionDescriptionOut());
        simplePencilPanel.addClickHandler(new OpenCollectionEditDescription());
        editFolderDesc.addClickHandler(new OpenCollectionEditDescription());

        myFolderRightContainer.addMouseOverHandler(new ActionPanelHover());
        myFolderRightContainer.addMouseOutHandler(new ActionPanelOut());

        folderDeleteLabel.setVisible(false);
        infoTabVc.addClickHandler(this);
        contentTabVc.addClickHandler(this);
        backToSearchHtml.addClickHandler(new BackToSearchHtmlClick());
        collectionEditImageLbl.setVisible(false);
    }

    /**
     * 
     * To show the ResourceMetaDataInfo Edit,Copy and Remove buttons
     */
    private class ActionPanelHover implements MouseOverHandler {
        @Override
        public void onMouseOver(MouseOverEvent event) {
            folderDeleteLabel.setVisible(true);
        }
    }

    /**
     * 
     * To hide the ResourceMetaDataInfo Edit,Copy and Remove buttons
     */
    private class ActionPanelOut implements MouseOutHandler {
        @Override
        public void onMouseOut(MouseOutEvent event) {
            folderDeleteLabel.setVisible(false);
        }
    }

    public class BackToSearchHtmlClick implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            Object source = event.getSource();
            if (source.equals(backToSearchHtml)) {
                AppClientFactory.getPlaceManager().revealPlace(false, searchRequest);
            }
        }
    }

    public class OpenCollectionEditDescription implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            folderDescription.switchToEdit();
            editFolderDescSaveButton.getElement().getStyle().setDisplay(Display.BLOCK);
            editFolderDescSaveButtonCancel.getElement().getStyle().setDisplay(Display.BLOCK);
        }
    }

    public class OnCollectionDescriptionClick implements MouseOverHandler {
        @Override
        public void onMouseOver(MouseOverEvent event) {
            simplePencilPanel.getElement().getStyle().setDisplay(Display.BLOCK);
        }
    }

    public class OnCollectionDescriptionOut implements MouseOutHandler {
        @Override
        public void onMouseOut(MouseOutEvent event) {
            simplePencilPanel.getElement().getStyle().setDisplay(Display.NONE);
        }
    }

    public class hideEditPencil implements MouseOverHandler {
        @Override
        public void onMouseOver(MouseOverEvent event) {
            collectionEditImageLbl.setVisible(true);
        }
    }

    public class showEditPencil implements MouseOutHandler {
        @Override
        public void onMouseOut(MouseOutEvent event) {
            collectionEditImageLbl.setVisible(false);
        }
    }

    private class OnEditImageClick implements ClickHandler {
        @Override
        public void onClick(ClickEvent event) {
            editFolderSaveButton.getElement().getStyle().setDisplay(Display.BLOCK);
            editFolderSaveButtonCancel.getElement().getStyle().setDisplay(Display.BLOCK);
            folderTitle.switchToEdit();
        }
    }

    @UiHandler("editFolderSaveButton")
    public void clickedOnEditFolderSaveButton(ClickEvent event) {
        titleAlertMessageLbl.setVisible(false);
        folderTitle.switchToLabel();
        //editFolderSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        //editFolderSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
    }

    @UiHandler("editFolderDescSaveButton")
    public void clickedOneditFolderDescSaveButton(ClickEvent event) {
        descriptionAlertMessageLbl.setVisible(false);
        folderDescription.switchToLabel();
        //editFolderDescSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        //editFolderDescSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
    }

    @UiHandler("editFolderSaveButtonCancel")
    public void clickedOnEditFolderSaveButtonCancelButton(ClickEvent event) {
        titleAlertMessageLbl.setVisible(false);
        titleAlertMessageLbl.addStyleName("titleAlertMessageDeActive");
        titleAlertMessageLbl.removeStyleName("titleAlertMessageActive");
        folderTitle.switchToTitleCancelLabel();
        editFolderSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        editFolderSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
    }

    @UiHandler("editFolderDescSaveButtonCancel")
    public void clickedOnEditFolderDescSaveButtonCancel(ClickEvent event) {
        descriptionAlertMessageLbl.setVisible(false);
        descriptionAlertMessageLbl.addStyleName("titleAlertMessageDeActive");
        descriptionAlertMessageLbl.removeStyleName("titleAlertMessageActive");
        folderDescription.switchToDescCancelLabel();
        editFolderDescSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        editFolderDescSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
    }

    @Override
    public void setData(List<CollectionDo> collectionDoList) {

    }

    @Override
    public void setInSlot(Object slot, Widget content) {
        if (content != null) {
            if (slot == EditFolderUiHandlers.TYPE_FOLDERS_SHELF_VIEW) {
                shelfTabSimPanel.setWidget(content);
            }
        }
    }

    @Override
    public void addToSlot(Object slot, Widget content) {
        if (content != null) {
            if (slot == EditFolderUiHandlers.TYPE_FOLDER_CONTENT_TAB) {
                collectionMetaDataSimPanel.setWidget(content);
            } else if (slot == EditFolderUiHandlers.TYPE_FOLDER_INFO_TAB) {
                collectionMetaDataSimPanel.setWidget(content);
            }
        }
    }

    @Override
    public void addFolder(CollectionDo collectionDo) {

    }

    @Override
    public void setFolderMetaData(CollectionDo collectionDo) {
        folderTitle.setText(collectionDo.getTitle());
        folderDescription.setText(collectionDo.getGoals());
        foldersBreadCrumps.setText("Folders > " + collectionDo.getTitle());
    }

    @Override
    public void setCollection(CollectionDo collectionDo) {
        this.collectionDo = collectionDo;
        getUiHandlers().clearTabSlot();
        setTab(getPersistantTabObjectUsingTabFlag());
    }

    public void setTab(Object tab) {
        if (tab.equals(infoTabVc)) {
            setPersistantTabFlag("infoTab");
            infoTabVc.setSelected(true);
            getUiHandlers().revealTab(EditFolderUiHandlers.TYPE_FOLDER_INFO_TAB, collectionDo);
        } else if (tab.equals(contentTabVc)) {
            setPersistantTabFlag("contentTab");
            contentTabVc.setSelected(true);
            getUiHandlers().revealTab(EditFolderUiHandlers.TYPE_FOLDER_CONTENT_TAB, collectionDo);
        }
    }

    public void setPersistantTabFlag(String flag) {
        stockStore = Storage.getLocalStorageIfSupported();
        if (stockStore != null) {
            stockStore.setItem("tabKey", flag);
        }

    }

    @Override
    public void reset() {
        super.reset();
        this.collectionDo = null;
        collectionMetaDataSimPanel.clear();
        editFolderDescSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        editFolderDescSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
        editFolderSaveButton.getElement().getStyle().setDisplay(Display.NONE);
        editFolderSaveButtonCancel.getElement().getStyle().setDisplay(Display.NONE);
        folderDescription.switchToDescCancelLabel();
        folderTitle.switchToTitleCancelLabel();
    }

    private CollectionTabTitleVc getPersistantTabObjectUsingTabFlag() {
        CollectionTabTitleVc objectToReturn = contentTabVc;
        stockStore = Storage.getLocalStorageIfSupported();
        String tabFlag = stockStore.getItem("tabKey");
        if (stockStore != null) {
            if (stockStore != null) {
                if (tabFlag.equalsIgnoreCase("infoTab")) {
                    objectToReturn = infoTabVc;
                } else if (tabFlag.equalsIgnoreCase("contentTab")) {
                    objectToReturn = contentTabVc;
                }
            } else {
                objectToReturn = contentTabVc;
            }
        }
        return objectToReturn;
    }

    @Override
    public void onClick(ClickEvent event) {
        Object source = event.getSource();
        getUiHandlers().clearTabSlot();
        setTab(source);
    }

    @Override
    public void onPostCollectionUpdate() {
        AppClientFactory.fireEvent(new RefreshCollectionInShelfListEvent(collectionDo, RefreshType.UPDATE));

    }

    @Override
    public void clearPanels() {
        clearPanel.clear();

    }

    /*   @UiHandler("folderPanelRedirect")
       public void OnClickFolderPanelRedirect(ClickEvent event) {
     getUiHandlers().initFolderRedirect();
       }
        
    */ @Override
    public void setBackToSearch() {
        boolean visible = false;
        searchRequest = AppClientFactory.getPlaceManager().getPreviousRequest();
        if (searchRequest != null) {
            String query = searchRequest.getParameter("query", null);
            visible = searchRequest != null && query != null;
            backToSearchFloPanel.getElement().getStyle().setDisplay(Display.BLOCK);
            if (visible) {
                if (query.length() > 50) {
                    query = query.substring(0, 50) + "...";
                    backToSearchHtml.setHTML(PRE_SEARCH_LINK + query + "\"");
                } else {
                    backToSearchHtml.setHTML(PRE_SEARCH_LINK + query + "\"");
                }
            }
        }
        backToSearchPreHtml.setVisible(visible);
        backToSearchHtml.setVisible(visible);
    }

    /**
     * create delete confirmation pop and delete the collection if user wants
     * 
     * @param clickEvent
     *            instance of {@link ClickEvent}
     */
    @UiHandler("folderDeleteLabel")
    public void deleteCollectionPopup(ClickEvent clickEvent) {
        folderDeleteConfirmationPopUp = new FolderDeleteConfirmationPopUp("Are you sure?",
                "\"" + collectionDo.getTitle() + "\"" + " Folder.") {

            @Override
            public void onTextConfirmed() {
                getUiHandlers().deleteMyFolder(collectionDo.getGooruOid(), collectionDo);
                folderDeleteConfirmationPopUp.hide();
                Window.enableScrolling(true);
                AppClientFactory.fireEvent(new SetHeaderZIndexEvent(0, true));

                //               AppClientFactory.fireEvent(new RefreshCollectionInShelfListEvent(collectionDo, RefreshType.DELETE));
            }
        };
    }

}