Package org.netbeans.gradle.project.view

Source Code of org.netbeans.gradle.project.view.DeleteProjectAction

package org.netbeans.gradle.project.view;

import java.awt.event.ActionEvent;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import org.jtrim.cancel.Cancellation;
import org.jtrim.cancel.CancellationController;
import org.jtrim.cancel.CancellationSource;
import org.jtrim.cancel.CancellationToken;
import org.jtrim.concurrent.CancelableTask;
import org.jtrim.concurrent.CleanupTask;
import org.jtrim.concurrent.MonitorableTaskExecutorService;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ui.OpenProjects;
import org.netbeans.gradle.project.NbGradleProject;
import org.netbeans.gradle.project.NbStrings;
import org.netbeans.gradle.project.NbTaskExecutors;
import org.netbeans.gradle.project.util.NbFileUtils;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Cancellable;

public final class DeleteProjectAction extends AbstractAction {
    private static final long serialVersionUID = -386797460711624644L;

    private static final Logger LOGGER = Logger.getLogger(DeleteProjectAction.class.getName());
    private static final MonitorableTaskExecutorService PROJECT_PROCESSOR
            = NbTaskExecutors.newExecutor("Delete-Project-Processor", 1);

    private final NbGradleProject project;

    public DeleteProjectAction(NbGradleProject project) {
        super(NbStrings.getDeleteProjectCaption());

        ExceptionHelper.checkNotNullArgument(project, "project");
        this.project = project;
    }

    private void closeAffectedProjects() {
        OpenProjects openProjects = OpenProjects.getDefault();
        FileObject rootDir = project.getProjectDirectory();

        List<Project> toClose = new LinkedList<>();
        toClose.add(project);
        for (Project opened: openProjects.getOpenProjects()) {
            if (FileUtil.isParentOf(rootDir, opened.getProjectDirectory())) {
                toClose.add(project);
            }
        }

        openProjects.close(toClose.toArray(new Project[0]));
    }

    private void doRemoveProject(CancellationToken cancelToken) {
        try {
            closeAffectedProjects();

            NbFileUtils.deleteDirectory(cancelToken, project.getProjectDirectory());
        } catch (Exception ex) {
            LOGGER.log(Level.INFO, "There was an error while trying to remove the project.", ex);
            String title = NbStrings.getErrorDeleteProjectTitle();
            String message = NbStrings.getErrorDeleteProject(ex);
            JOptionPane.showMessageDialog(null, message, title, JOptionPane.WARNING_MESSAGE);
        }
    }

    private ProgressHandle createProgress(final CancellationController cancelController) {
        String caption = NbStrings.getDeleteProjectProgress(project.getDisplayName());
        return ProgressHandleFactory.createHandle(caption, new Cancellable() {
            @Override
            public boolean cancel() {
                cancelController.cancel();
                return true;
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object[] answers = {NbStrings.getYesOption(), NbStrings.getNoOption()};
        String message = NbStrings.getConfirmDeleteProject(project.getDisplayName());
        String title = NbStrings.getConfirmDeleteProjectTitle();
        if (JOptionPane.showOptionDialog(null, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, answers, answers[1]) != 0) {
            return;
        }

        CancellationSource cancel = Cancellation.createCancellationSource();
        final ProgressHandle progress = createProgress(cancel.getController());

        progress.start();
        PROJECT_PROCESSOR.execute(cancel.getToken(), new CancelableTask() {
            @Override
            public void execute(CancellationToken cancelToken) {
                doRemoveProject(cancelToken);
            }
        }, new CleanupTask() {
            @Override
            public void cleanup(boolean canceled, Throwable error) throws Exception {
                NbTaskExecutors.defaultCleanup(canceled, error);
                progress.finish();
            }
        });
    }
}
TOP

Related Classes of org.netbeans.gradle.project.view.DeleteProjectAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.