org.activiti.designer.kickstart.eclipse.navigator.handlers.DeleteHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.activiti.designer.kickstart.eclipse.navigator.handlers.DeleteHandler.java

Source

/* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.activiti.designer.kickstart.eclipse.navigator.handlers;

import java.util.List;

import org.activiti.designer.kickstart.eclipse.navigator.CmisNavigator;
import org.activiti.designer.kickstart.eclipse.navigator.CmisNavigatorSelectionHolder;
import org.activiti.designer.kickstart.eclipse.navigator.CmisUtil;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;

public class DeleteHandler extends AbstractHandler {

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        List<CmisObject> selectedObjects = CmisNavigatorSelectionHolder.getInstance().getSelectedObjects();

        if (!selectedObjects.isEmpty()) {

            MessageDialog dialog = new MessageDialog(HandlerUtil.getActiveShellChecked(event),
                    generateDialogTitle(selectedObjects), null, // icon
                    generateDialogMessage(selectedObjects), MessageDialog.WARNING,
                    new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0);

            int result = dialog.open();
            if (result == 0) { // 'YES'
                CmisUtil.deleteCmisObjects(selectedObjects);

                Tree tree = getTreeView(event);
                TreeItem[] treeItems = tree.getSelection();
                for (TreeItem treeItem : treeItems) {
                    treeItem.dispose();
                }

            }
        }

        return this;
    }

    private Tree getTreeView(ExecutionEvent event) {
        IWorkbenchPart wbp = HandlerUtil.getActivePart(event);
        return ((CmisNavigator) wbp).getCommonViewer().getTree();
    }

    private String generateDialogTitle(List<CmisObject> selectedObjects) {
        String title = "";
        if (selectedObjects.size() == 1) {
            title = "Deleting " + selectedObjects.get(0).getName();
        } else {
            int folderCount = 0;
            int documentCount = 0;
            for (CmisObject cmisObject : selectedObjects) {
                if (cmisObject instanceof Folder) {
                    folderCount++;
                } else if (cmisObject instanceof Document) {
                    documentCount++;
                }
            }

            if (folderCount > 0 && documentCount > 0) {
                title = "Deleting " + folderCount + " folders and " + documentCount + " files";
            } else if (folderCount == 0 && documentCount > 0) {
                title = "Deleting " + documentCount + " files";
            } else if (folderCount > 0 && documentCount == 0) {
                title = "Deleting " + folderCount + " folders";
            }
        }
        return title;
    }

    private String generateDialogMessage(List<CmisObject> selectedObjects) {
        StringBuilder messageBuilder = new StringBuilder("Are you sure you want to delete ");
        for (int i = 0; i < selectedObjects.size(); i++) {
            messageBuilder.append(selectedObjects.get(i).getName());
            if (i == selectedObjects.size() - 2) {
                messageBuilder.append(" and ");
            }
            if (i != selectedObjects.size() - 1 && i != selectedObjects.size() - 2) {
                messageBuilder.append(", ");
            }
        }
        messageBuilder.append("?");
        return messageBuilder.toString();
    }

}