org.eclipse.cdt.cpp.ui.internal.actions.DeleteProjectAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.cdt.cpp.ui.internal.actions.DeleteProjectAction.java

Source

package org.eclipse.cdt.cpp.ui.internal.actions;

/*
 * Copyright (c) 2001, 2002 International Business Machines Corporation. All rights reserved.
 * This program and the accompanying materials are made available under the terms of
 * the Common Public License which accompanies this distribution.
 */

import org.eclipse.cdt.cpp.ui.internal.api.*;
import org.eclipse.cdt.cpp.ui.internal.*;
import org.eclipse.cdt.cpp.ui.internal.vcm.*;
import org.eclipse.cdt.cpp.ui.internal.dialogs.*;

import org.eclipse.cdt.dstore.ui.actions.*;
import org.eclipse.cdt.dstore.core.model.*;

import org.eclipse.cdt.dstore.hosts.actions.*;

import java.io.*;
import java.util.*;

import org.eclipse.jface.action.*;

import org.eclipse.core.runtime.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;

import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.*;
import org.eclipse.jface.text.*;
import org.eclipse.jface.dialogs.*;

import org.eclipse.swt.widgets.*;

import org.eclipse.ui.internal.*;
import org.eclipse.ui.internal.misc.*;

import org.eclipse.core.runtime.*;
import org.eclipse.jface.operation.*;

import org.eclipse.ui.*;
import org.eclipse.ui.internal.*;
import java.lang.reflect.InvocationTargetException;

public class DeleteProjectAction extends CustomAction {
    public class DeleteOperation implements IRunnableWithProgress {
        private IProject _project;
        private ModelInterface _api;
        private boolean _deleteContents;

        public DeleteOperation(IProject project, ModelInterface api, boolean deleteContents) {
            _project = project;
            _api = api;
            _deleteContents = deleteContents;
        }

        public void run(IProgressMonitor monitor) throws InvocationTargetException {
            execute(monitor);
        }

        protected void execute(IProgressMonitor pm) {
            // close project
            if (_project.isOpen()) {
                _api.closeProject(_project);

                try {
                    _project.close(pm);
                } catch (CoreException e) {
                    System.out.println(e);
                }
            }

            if (_project instanceof Repository) {
                DataElement closedProject = _api.findProjectElement(_project);
                if (closedProject != null) {
                    DataElement workspace = closedProject.getParent();
                    closedProject.getDataStore().deleteObject(workspace, closedProject);
                    workspace.getDataStore().refresh(workspace);
                    workspace.removeNestedData(closedProject);
                }
            }

            // delete project
            try {
                _project.delete(_deleteContents, true, pm);

            } catch (CoreException e) {
                System.out.println(e);
            }
        }
    }

    public DeleteProjectAction(DataElement subject, String label, DataElement command, DataStore dataStore) {
        super(subject, label, command, dataStore);
    }

    public void run() {
        ModelInterface api = ModelInterface.getInstance();
        IProject project = api.findProjectResource(_subject);
        if (project != null) {
            Shell shell = api.getDummyShell();
            String msg = "About to delete project \'" + project.getName() + "\'.\n";
            msg += "Delete all its contents under " + project.getLocation().toOSString() + " as well?";
            String title = "Delete Project Contents";

            MessageDialog dialog = new MessageDialog(shell, title, null, // accept the default window icon
                    msg, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL,
                            IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL },
                    0); // yes is the default
            int code = dialog.open();
            boolean deleteContent = false;
            switch (code) {
            case 0: // Yes
                deleteContent = true;
                break;
            case 1: // No
                deleteContent = false;
                break;
            default: // CANCEL
                return;
            }

            DeleteOperation op = new DeleteOperation(project, api, deleteContent);
            ProgressMonitorDialog progressDlg = new ProgressMonitorDialog(shell);
            try {
                progressDlg.run(true, true, op);
            } catch (InterruptedException e) {
                System.out.println(e);
            } catch (InvocationTargetException e) {
                System.out.println(e);
            }
        }
    }
}