com.ephesoft.gxt.foldermanager.client.presenter.FolderManagementOptionsPresenter.java Source code

Java tutorial

Introduction

Here is the source code for com.ephesoft.gxt.foldermanager.client.presenter.FolderManagementOptionsPresenter.java

Source

/********************************************************************************* 
* Ephesoft is a Intelligent Document Capture and Mailroom Automation program 
* developed by Ephesoft, Inc. Copyright (C) 2015 Ephesoft Inc. 
* 
* This program is free software; you can redistribute it and/or modify it under 
* the terms of the GNU Affero General Public License version 3 as published by the 
* Free Software Foundation with the addition of the following permission added 
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK 
* IN WHICH THE COPYRIGHT IS OWNED BY EPHESOFT, EPHESOFT DISCLAIMS THE WARRANTY 
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. 
* 
* This program is distributed in the hope that it will be useful, but WITHOUT 
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
* FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more 
* details. 
* 
* You should have received a copy of the GNU Affero General Public License along with 
* this program; if not, see http://www.gnu.org/licenses or write to the Free 
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
* 02110-1301 USA. 
* 
* You can contact Ephesoft, Inc. headquarters at 111 Academy Way, 
* Irvine, CA 92617, USA. or at email address info@ephesoft.com. 
* 
* The interactive user interfaces in modified source and object code versions 
* of this program must display Appropriate Legal Notices, as required under 
* Section 5 of the GNU Affero General Public License version 3. 
* 
* In accordance with Section 7(b) of the GNU Affero General Public License version 3, 
* these Appropriate Legal Notices must retain the display of the "Ephesoft" logo. 
* If the display of the logo is not reasonably feasible for 
* technical reasons, the Appropriate Legal Notices must display the words 
* "Powered by Ephesoft". 
********************************************************************************/

package com.ephesoft.gxt.foldermanager.client.presenter;

import java.util.ArrayList;
import java.util.List;

import com.ephesoft.gxt.core.client.i18n.LocaleDictionary;
import com.ephesoft.gxt.core.client.ui.widget.Message;
import com.ephesoft.gxt.core.client.ui.widget.Tree;
import com.ephesoft.gxt.core.client.ui.widget.listener.DialogAdapter;
import com.ephesoft.gxt.core.client.ui.widget.property.TreeNode;
import com.ephesoft.gxt.core.client.ui.widget.window.ConfirmationDialog;
import com.ephesoft.gxt.core.client.ui.widget.window.DialogIcon;
import com.ephesoft.gxt.core.client.ui.widget.window.MessageDialog;
import com.ephesoft.gxt.core.client.util.DialogUtil;
import com.ephesoft.gxt.core.client.util.ScreenMaskUtility;
import com.ephesoft.gxt.core.shared.dto.FileType;
import com.ephesoft.gxt.core.shared.dto.FolderManagerDTO;
import com.ephesoft.gxt.core.shared.util.CollectionUtil;
import com.ephesoft.gxt.core.shared.util.StringUtil;
import com.ephesoft.gxt.foldermanager.client.controller.FolderManagementController;
import com.ephesoft.gxt.foldermanager.client.event.FolderCutEvent;
import com.ephesoft.gxt.foldermanager.client.event.FolderTreeRefreshEvent;
import com.ephesoft.gxt.foldermanager.client.event.FolderUpEvent;
import com.ephesoft.gxt.foldermanager.client.i18n.FolderManagementConstants;
import com.ephesoft.gxt.foldermanager.client.i18n.FolderManagementMessages;
import com.ephesoft.gxt.foldermanager.client.view.FolderManagementNavigatorView;
import com.ephesoft.gxt.foldermanager.client.view.FolderManagementOptionsView;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.web.bindery.event.shared.binder.EventBinder;
import com.sencha.gxt.widget.core.client.Dialog.PredefinedButton;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;

public class FolderManagementOptionsPresenter extends FolderManagementBasePresenter<FolderManagementOptionsView> {

    interface CustomEventBinder extends EventBinder<FolderManagementOptionsPresenter> {
    }

    public static final CustomEventBinder eventBinder = GWT.create(CustomEventBinder.class);

    public FolderManagementOptionsPresenter(final FolderManagementController controller,
            final FolderManagementOptionsView view, String baseFolderUrl) {
        super(controller, view);
        this.baseHttpURL = baseFolderUrl;

    }

    private static final String OPEN_WINDOW_OPTIONS = "menubar=yes,location=no,resizable=yes,scrollbars=yes,status=no,toolbar=true";
    private static final String HEIGHT = ",height=";
    private static final String WIDTH = ",width=";
    private List<String> cutOrCopyFileList;
    private List<FolderManagerDTO> cutFilesDTOsList;
    private List<TreeNode> selectedTreeNodes;
    private FileOperation lastFileOperation;
    private String baseHttpURL;
    final String uploadFormAction = "filesUploadDownload";

    private enum FileOperation {
        CUT, COPY, PASTE;
    }

    @Override
    public void bind() {

    }

    @Override
    public void injectEvents(EventBus eventBus) {
        eventBinder.bindEventHandlers(this, eventBus);
    }

    public void onNewFolderClicked(String folderPath) {
        ScreenMaskUtility.maskScreen();
        controller.getRpcService().createNewFolder(folderPath, new AsyncCallback<String>() {

            @Override
            public void onFailure(Throwable error) {
                String errorMsg = LocaleDictionary
                        .getMessageValue(FolderManagementMessages.FAILED_TO_CREATE_A_NEW_FOLDER);
                String localizedMessage = error.getLocalizedMessage();
                if (localizedMessage != null && !localizedMessage.isEmpty()) {
                    errorMsg += localizedMessage;
                }
                DialogUtil.showMessageDialog(
                        LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE), errorMsg,
                        DialogIcon.ERROR);
                ScreenMaskUtility.unmaskScreen();
            }

            @Override
            public void onSuccess(String newFolderName) {
                ScreenMaskUtility.unmaskScreen();
                Message.display(LocaleDictionary.getConstantValue(FolderManagementConstants.SUCCESS_TITLE),
                        LocaleDictionary.getMessageValue(
                                FolderManagementMessages.SUCCESSFULLY_CREATED_THE_NEW_FOLDER, newFolderName));
                controller.getEventBus().fireEvent(new FolderTreeRefreshEvent(null, newFolderName));
                TreeNode currentTreeNode = getCurrentTreeNode();
                refreshExpandedTree(currentTreeNode);
            }
        });
    }

    public void onRefreshClicked() {
        controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
        TreeNode currentTreeNode = getCurrentTreeNode();
        refreshExpandedTree(currentTreeNode);
    }

    public void onFileCopy(String absoluteFilePath) {
        cutOrCopyFileList = new ArrayList<String>();
        cutOrCopyFileList.add(absoluteFilePath);
        lastFileOperation = FileOperation.COPY;
        view.setPasteEnabled(true);
    }

    public void onCopyClicked() {
        cutOrCopyFileList = view.getSelectedFileList();
        if (cutOrCopyFileList.isEmpty() || cutOrCopyFileList == null) {
            DialogUtil.showMessageDialog(LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                    LocaleDictionary.getMessageValue(
                            FolderManagementMessages.NO_FILES_FOLDERS_SELECTED_FOR_OPERATION,
                            LocaleDictionary.getConstantValue(FolderManagementConstants.COPY_PASTE)),
                    DialogIcon.ERROR);
            view.setPasteEnabled(false);
        } else {
            view.setPasteEnabled(true);
            lastFileOperation = FileOperation.COPY;
        }
    }

    public void onFileCut(FolderManagerDTO folderManagerDTO) {
        cutOrCopyFileList = new ArrayList<String>();
        cutOrCopyFileList.add(folderManagerDTO.getPath());
        selectedTreeNodes = new ArrayList<TreeNode>();
        selectedTreeNodes.add(FolderManagementNavigatorView.treeData.get(folderManagerDTO.getPath()));
        lastFileOperation = FileOperation.CUT;
        view.setPasteEnabled(true);
    }

    public void onCutClicked() {
        cutOrCopyFileList = view.getSelectedFileList();
        cutFilesDTOsList = view.getSelectedDTOsList();
        selectedTreeNodes = getSelectedTreeNodes(cutFilesDTOsList);
        if (cutOrCopyFileList.isEmpty() || cutOrCopyFileList == null) {
            DialogUtil.showMessageDialog(LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                    LocaleDictionary.getMessageValue(
                            FolderManagementMessages.NO_FILES_FOLDERS_SELECTED_FOR_OPERATION,
                            LocaleDictionary.getConstantValue(FolderManagementConstants.CUT_PASTE)),
                    DialogIcon.ERROR);
            view.setPasteEnabled(false);
        } else {
            view.setPasteEnabled(true);
            lastFileOperation = FileOperation.CUT;
        }
    }

    private List<TreeNode> getSelectedTreeNodes(List<FolderManagerDTO> cutFilesDTOsList) {
        List<TreeNode> selectedTreeNodes = new ArrayList<TreeNode>();
        for (FolderManagerDTO dto : cutFilesDTOsList) {
            TreeNode selectedNode = FolderManagementNavigatorView.treeData.get(dto.getPath());
            selectedTreeNodes.add(selectedNode);
        }
        return selectedTreeNodes;
    }

    public List<FolderManagerDTO> getSelectedModels() {
        return controller.getFolderManagementView().getFolderManagementGridPresenter().getView()
                .getSelectedModels();

    }

    public void onPasteClicked(String folderPath) {
        if (cutOrCopyFileList != null && !cutOrCopyFileList.isEmpty()) {
            switch (lastFileOperation) {
            case COPY:
                ScreenMaskUtility.maskScreen();
                controller.getRpcService().copyFiles(cutOrCopyFileList, folderPath,
                        new AsyncCallback<List<String>>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                ScreenMaskUtility.unmaskScreen();
                                String localizedMessage = caught.getLocalizedMessage();
                                if (localizedMessage != null && !localizedMessage.isEmpty()) {
                                    DialogUtil.showMessageDialog(
                                            LocaleDictionary
                                                    .getConstantValue(FolderManagementConstants.ERROR_TITLE),
                                            localizedMessage, DialogIcon.ERROR);
                                    // controller.getEventBus().fireEvent(new
                                    // FolderTreeRefreshEvent());
                                } else {
                                    DialogUtil.showMessageDialog(
                                            LocaleDictionary
                                                    .getConstantValue(FolderManagementConstants.ERROR_TITLE),
                                            LocaleDictionary.getMessageValue(
                                                    FolderManagementMessages.UNABLE_TO_COMPLETE_COPY_PASTE_OPERATION),
                                            DialogIcon.ERROR);
                                    // controller.getEventBus().fireEvent(new
                                    // FolderTreeRefreshEvent());
                                }
                            }

                            @Override
                            public void onSuccess(List<String> result) {
                                ScreenMaskUtility.unmaskScreen();
                                if (null != result) {
                                    if (result.size() == 0) {
                                        controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                                        TreeNode currentTreeNode = getCurrentTreeNode();
                                        refreshExpandedTree(currentTreeNode);
                                    } else if (result.size() == cutOrCopyFileList.size()) {
                                        showFileNotCopyOrCut(result, LocaleDictionary
                                                .getConstantValue(FolderManagementConstants.COPY_PASTE));
                                    } else {
                                        showFileNotCopyOrCut(result, LocaleDictionary
                                                .getConstantValue(FolderManagementConstants.COPY_PASTE));
                                        controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                                        TreeNode currentTreeNode = getCurrentTreeNode();
                                        refreshExpandedTree(currentTreeNode);
                                    }
                                }
                            }
                        });
                break;
            case CUT:
                view.setPasteEnabled(false);
                lastFileOperation = FileOperation.PASTE;
                boolean isPastingInSameFolder = checkIfPastingInSameFolder(cutOrCopyFileList, folderPath);
                if (!isPastingInSameFolder) {
                    ScreenMaskUtility.maskScreen();
                    controller.getRpcService().cutFiles(cutOrCopyFileList, folderPath,
                            new AsyncCallback<List<String>>() {

                                @Override
                                public void onFailure(Throwable caught) {
                                    ScreenMaskUtility.unmaskScreen();
                                    String localizedMessage = caught.getLocalizedMessage();
                                    if (localizedMessage != null && !localizedMessage.isEmpty()) {
                                        DialogUtil.showMessageDialog(
                                                LocaleDictionary
                                                        .getConstantValue(FolderManagementConstants.ERROR_TITLE),
                                                localizedMessage, DialogIcon.ERROR);
                                        // controller.getEventBus().fireEvent(new
                                        // FolderTreeRefreshEvent());
                                    } else {
                                        DialogUtil.showMessageDialog(
                                                LocaleDictionary
                                                        .getConstantValue(FolderManagementConstants.ERROR_TITLE),
                                                LocaleDictionary.getMessageValue(
                                                        FolderManagementMessages.UNABLE_TO_COMPLETE_CUT_PASTE_OPERATION),
                                                DialogIcon.ERROR);
                                        // controller.getEventBus().fireEvent(new
                                        // FolderTreeRefreshEvent());
                                    }
                                }

                                @Override
                                public void onSuccess(List<String> result) {
                                    ScreenMaskUtility.unmaskScreen();
                                    if (null != result) {
                                        if (result.size() == 0) {
                                            controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                                            TreeNode currentTreeNode = getCurrentTreeNode();
                                            refreshExpandedTree(currentTreeNode);
                                            controller.getEventBus()
                                                    .fireEvent(new FolderCutEvent(selectedTreeNodes));
                                        } else if (result.size() == cutOrCopyFileList.size()) {
                                            showFileNotCopyOrCut(result, LocaleDictionary
                                                    .getConstantValue(FolderManagementConstants.CUT_PASTE));
                                        } else {
                                            showFileNotCopyOrCut(result, LocaleDictionary
                                                    .getConstantValue(FolderManagementConstants.CUT_PASTE));
                                            controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                                            TreeNode currentTreeNode = getCurrentTreeNode();
                                            refreshExpandedTree(currentTreeNode);
                                            controller.getEventBus()
                                                    .fireEvent(new FolderCutEvent(selectedTreeNodes));
                                        }
                                    }
                                }
                            });
                } else {
                    DialogUtil.showMessageDialog(
                            LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                            LocaleDictionary.getMessageValue(FolderManagementMessages.SOURCE_AND_DESTINATION_SAME),
                            DialogIcon.ERROR);
                }
                break;
            default:
                break;
            }
        }
    }

    private boolean checkIfPastingInSameFolder(List<String> cutFilesList, String folderPath) {
        boolean isPastingInSameFolder = false;
        String changedFolderPath = folderPath;
        changedFolderPath = changedFolderPath.replace("/", "");
        changedFolderPath = changedFolderPath.replace("\\", "");
        for (String filePath : cutFilesList) {
            String changedFilePath = filePath;
            changedFilePath = changedFilePath.replace("/", "");
            changedFilePath = changedFilePath.replace("\\", "");
            if (changedFilePath.equals(changedFolderPath)) {
                isPastingInSameFolder = true;
                break;
            }
        }
        return isPastingInSameFolder;
    }

    public void onFileDelete(final String fileName, String absoluteFilePath) {
        ScreenMaskUtility.maskScreen();
        controller.getRpcService().deleteFile(absoluteFilePath, new AsyncCallback<Boolean>() {

            @Override
            public void onSuccess(Boolean result) {
                ScreenMaskUtility.unmaskScreen();
                if (result) {
                    controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                    TreeNode currentTreeNode = getCurrentTreeNode();
                    refreshExpandedTree(currentTreeNode);
                } else {
                    DialogUtil.showMessageDialog(
                            LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                            LocaleDictionary.getMessageValue(FolderManagementMessages.UNABLE_TO_DELETE_THE_FILE)
                                    + FolderManagementConstants.QUOTES + fileName + FolderManagementConstants.QUOTES
                                    + FolderManagementConstants.DOT,
                            DialogIcon.ERROR);
                }
            }

            @Override
            public void onFailure(Throwable caught) {
                ScreenMaskUtility.unmaskScreen();
                DialogUtil.showMessageDialog(
                        LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                        LocaleDictionary.getMessageValue(FolderManagementMessages.UNABLE_TO_DELETE_THE_FILE)
                                + FolderManagementConstants.QUOTES + fileName + FolderManagementConstants.QUOTES
                                + FolderManagementConstants.DOT,
                        DialogIcon.ERROR);
            }
        });

    }

    public void onDeleteClicked() {
        final List<String> deleteFileList = view.getSelectedFileList();
        if (deleteFileList.isEmpty()) {
            DialogUtil.showMessageDialog(LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                    LocaleDictionary.getMessageValue(
                            FolderManagementMessages.NO_FILES_FOLDERS_SELECTED_FOR_OPERATION,
                            LocaleDictionary.getConstantValue(FolderManagementConstants.DELETE_CONFIRM)),
                    DialogIcon.ERROR);
        } else {
            final ConfirmationDialog confirmationDialog = DialogUtil.showConfirmationDialog(
                    LocaleDictionary.getConstantValue(FolderManagementConstants.CONFIRMATION),
                    LocaleDictionary.getMessageValue(
                            FolderManagementMessages.ARE_YOU_SURE_YOU_WANT_TO_DELETE_ALL_THE_SELECTED_FILES),
                    false, DialogIcon.QUESTION_MARK);
            confirmationDialog.setDialogListener(new DialogAdapter() {

                @Override
                public void onOkClick() {
                    confirmationDialog.hide();
                    if (!deleteFileList.isEmpty()) {
                        ScreenMaskUtility.maskScreen();
                        controller.getRpcService().deleteFiles(deleteFileList, new AsyncCallback<String>() {

                            @Override
                            public void onSuccess(String result) {
                                confirmationDialog.hide();
                                ScreenMaskUtility.unmaskScreen();
                                if (result != null && !result.isEmpty()) {
                                    if (result.endsWith(FolderManagementConstants.SEMI_COLON)) {
                                        StringBuilder modifiedResult = new StringBuilder(result);
                                        modifiedResult.replace(
                                                result.lastIndexOf(FolderManagementConstants.SEMI_COLON),
                                                result.lastIndexOf(FolderManagementConstants.SEMI_COLON) + 1,
                                                FolderManagementConstants.DOT);
                                        result = modifiedResult.toString();
                                    }
                                    DialogUtil.showMessageDialog(
                                            LocaleDictionary
                                                    .getConstantValue(FolderManagementConstants.ERROR_TITLE),
                                            LocaleDictionary.getMessageValue(
                                                    FolderManagementMessages.UNABLE_TO_DELETE_THE_FOLLOWING)
                                                    + result,
                                            DialogIcon.ERROR);
                                } else {
                                    controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                                    TreeNode currentTreeNode = getCurrentTreeNode();
                                    refreshExpandedTree(currentTreeNode);
                                }
                            }

                            @Override
                            public void onFailure(Throwable caught) {
                                confirmationDialog.hide();
                                ScreenMaskUtility.unmaskScreen();
                                DialogUtil.showMessageDialog(
                                        LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                                        LocaleDictionary.getMessageValue(
                                                FolderManagementMessages.UNABLE_TO_PERFORM_DELETE_OPERATION),
                                        DialogIcon.ERROR);
                            }
                        });
                    }
                }

                @Override
                public void onCloseClick() {
                    confirmationDialog.hide();
                }

                @Override
                public void onCancelClick() {
                    controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                }
            });
        }
    }

    public void onFolderUpClicked() {
        controller.getEventBus().fireEvent(new FolderUpEvent());
    }

    public void refreshExpandedTree(TreeNode currentTreeNode) {
        Tree navigationTree = getFolderNavigatorView().getNavigationTree();
        if (navigationTree.isExpanded(currentTreeNode)) {
            navigationTree.setExpanded(currentTreeNode, false);
            navigationTree.setExpanded(currentTreeNode, true);
        }
    }

    public void onFileRename(final String fileName, final String newFileName, String folderPath) {
        controller.getRpcService().renameFile(fileName, newFileName, folderPath, new AsyncCallback<Boolean>() {

            @Override
            public void onSuccess(Boolean result) {
                if (result) {
                    controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                    TreeNode currentTreeNode = getCurrentTreeNode();
                    refreshExpandedTree(currentTreeNode);
                } else {
                    DialogUtil.showMessageDialog(
                            LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                            LocaleDictionary.getMessageValue(FolderManagementMessages.FAILED_TO_RENAME_FILE,
                                    FolderManagementConstants.QUOTES + fileName + FolderManagementConstants.QUOTES,
                                    FolderManagementConstants.QUOTES + newFileName
                                            + FolderManagementConstants.QUOTES),
                            DialogIcon.ERROR);
                    controller.getEventBus().fireEvent(new FolderTreeRefreshEvent());
                    TreeNode currentTreeNode = getCurrentTreeNode();
                    refreshExpandedTree(currentTreeNode);
                }
            }

            @Override
            public void onFailure(Throwable caught) {
                DialogUtil.showMessageDialog(
                        LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                        LocaleDictionary.getMessageValue(FolderManagementMessages.FAILED_TO_RENAME_FILE,
                                FolderManagementConstants.QUOTES + fileName + FolderManagementConstants.QUOTES,
                                FolderManagementConstants.QUOTES + newFileName + FolderManagementConstants.QUOTES),
                        DialogIcon.ERROR);
            }
        });
    }

    public void onFileOpen(FolderManagerDTO selectedDTO, String parentFolderPath) {
        if (selectedDTO != null) {
            String fileName = selectedDTO.getFileName();
            String absoluteFilePath = selectedDTO.getPath();
            if (!selectedDTO.getKind().equals(FileType.DIR)) {
                String url = baseHttpURL + FolderManagementConstants.URL_SEPARATOR
                        + (absoluteFilePath.substring(
                                absoluteFilePath.lastIndexOf(parentFolderPath) + parentFolderPath.length() + 1))
                                        .replace(FolderManagementConstants.PATH_SEPARATOR_STRING,
                                                FolderManagementConstants.URL_SEPARATOR);
                try {
                    Window.open(url, "", OPEN_WINDOW_OPTIONS + WIDTH + Window.getClientWidth() + HEIGHT
                            + Window.getClientHeight());
                } catch (Exception e) {
                    DialogUtil.showMessageDialog(
                            LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE),
                            LocaleDictionary.getMessageValue(FolderManagementMessages.COULD_NOT_OPEN_THE_FILE)
                                    + FolderManagementConstants.QUOTES + fileName
                                    + FolderManagementConstants.QUOTES,
                            DialogIcon.ERROR);
                }
            } else {
                controller.getEventBus().fireEvent(new FolderTreeRefreshEvent(selectedDTO, null));
            }
        }
    }

    public void onFileDownload(FolderManagerDTO selectedDTO) {
        if (selectedDTO != null) {
            String absoluteFilePath = selectedDTO.getPath();
            sendDownloadRequest(absoluteFilePath);
        }

    }

    private void sendDownloadRequest(String absoluteFilePath) {
        StringBuffer urlBuffer = new StringBuffer(uploadFormAction);
        if (Window.Location.getHref().contains(FolderManagementConstants.QUESTION_MARK)) {
            urlBuffer.append(FolderManagementConstants.AMPERSAND);
        } else {
            urlBuffer.append(FolderManagementConstants.QUESTION_MARK);
        }
        urlBuffer.append(FolderManagementConstants.CURRENT_FILE_DOWNLOAD_PATH);
        urlBuffer.append(FolderManagementConstants.EQUALS);
        urlBuffer.append(absoluteFilePath);
        String url = urlBuffer.toString();
        Window.open(url, null, null);
    }

    public FolderManagementGridPresenter getFolderGridPresenter() {
        return controller.getFolderManagementView().getFolderManagementGridPresenter();
    }

    private TreeNode getCurrentTreeNode() {
        return controller.getFolderManagementView().getFolderManagementNavigatorPresenter().getCurrentTreeNode();
    }

    private FolderManagementNavigatorView getFolderNavigatorView() {
        return controller.getFolderManagementView().getFolderManagementNavigatorPresenter().getView();
    }

    private void showFileNotCopyOrCut(List<String> filesNotCopyOrCut, String cutOrCopy) {
        String filesNotImported = FolderManagementConstants.ORDERED_LIST_START_TAG;
        if (!CollectionUtil.isEmpty(filesNotCopyOrCut)) {
            for (String unsupportedFileName : filesNotCopyOrCut) {
                filesNotImported = StringUtil.concatenate(filesNotImported,
                        FolderManagementConstants.LIST_START_TAG, unsupportedFileName,
                        FolderManagementConstants.LIST_END_TAG);
            }
            final String message = LocaleDictionary.getMessageValue(
                    FolderManagementMessages.UNABLE_TO_PERFORM_PASTE_OPERATION, cutOrCopy,
                    filesNotCopyOrCut.size());
            final MessageDialog dialog = new MessageDialog(
                    LocaleDictionary.getConstantValue(FolderManagementConstants.ERROR_TITLE), message,
                    DialogIcon.ERROR);
            final String filesList = StringUtil.concatenate(filesNotImported,
                    FolderManagementConstants.ORDERED_LIST_END_TAG);
            dialog.setPredefinedButtons(PredefinedButton.OK, PredefinedButton.YES);
            TextButton showFileList = dialog.getButton(PredefinedButton.YES);
            showFileList.setText("Show File List");

            showFileList.addSelectHandler(new SelectHandler() {

                @Override
                public void onSelect(SelectEvent event) {
                    DialogUtil.showMessageDialog(
                            LocaleDictionary.getConstantValue(FolderManagementConstants.INFO_TITLE), filesList);
                }
            });

            dialog.addButton(showFileList);
            dialog.show();
        }
    }
}