org.eclipse.vorto.perspective.command.DeleteModelAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.vorto.perspective.command.DeleteModelAction.java

Source

/**
 * Copyright (c) 2015-2016 Bosch Software Innovations GmbH and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 *
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * The Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 * Bosch Software Innovations GmbH - Please refer to git log
 */
package org.eclipse.vorto.perspective.command;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.vorto.core.ui.model.IModelElement;
import org.eclipse.vorto.perspective.util.ImageUtil;
import org.eclipse.vorto.perspective.view.ILocalModelWorkspace;

public abstract class DeleteModelAction extends Action {

    private ILocalModelWorkspace workspace;

    public DeleteModelAction(ILocalModelWorkspace workspace) {
        super("Delete", ImageDescriptor.createFromImage(ImageUtil.getImage("delete.gif")));
        this.workspace = workspace;
    }

    public static Action newInstance(ILocalModelWorkspace workspace, final TreeViewer viewer,
            final IModelElement model) {
        return new DeleteModelAction(workspace) {
            @Override
            protected TreeViewer getViewer() {
                return viewer;
            }

            @Override
            protected IModelElement getSelectedElement() {
                return model;
            }
        };
    }

    @Override
    public void run() {
        IModelElement modelElement = getSelectedElement();

        final boolean isOKOrYes = MessageDialog.open(MessageDialog.QUESTION, getViewer().getControl().getShell(),
                "Delete Model",
                "Are you sure you want to delete the model " + modelElement.getId().getName() + " ?", SWT.NONE);

        if (isOKOrYes) {
            deleteResource(getViewer().getControl().getShell(), modelElement.getModelFile());
        }
    }

    private void deleteResource(Shell shell, final IResource selectedResource) {

        ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(shell);
        try {
            progressDialog.run(true, true, new IRunnableWithProgress() {

                @Override
                public void run(final IProgressMonitor monitor) {

                    monitor.beginTask("Delete Model", 100);

                    try {
                        selectedResource.delete(true, monitor);
                    } catch (CoreException e) {
                        throw new RuntimeException(e);
                    }

                    monitor.done();
                }

            });
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    protected abstract IModelElement getSelectedElement();

    protected abstract TreeViewer getViewer();
}