Package org.netbeans.gradle.project.output

Source Code of org.netbeans.gradle.project.output.IOTabs$ReRunTask

package org.netbeans.gradle.project.output;

import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Action;
import org.netbeans.api.annotations.common.StaticResource;
import org.netbeans.gradle.project.NbStrings;
import org.netbeans.gradle.project.api.task.GradleCommandTemplate;
import org.netbeans.gradle.project.properties.PredefinedTask;
import org.netbeans.gradle.project.tasks.AsyncGradleTask;
import org.netbeans.gradle.project.tasks.GradleCommandSpec;
import org.netbeans.gradle.project.tasks.GradleCommandSpecFactory;
import org.netbeans.gradle.project.tasks.GradleTaskDef;
import org.netbeans.gradle.project.tasks.TaskOutputKey;
import org.netbeans.gradle.project.view.CustomActionPanel;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.util.ImageUtilities;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;

public final class IOTabs {
    private static final IOTabMaintainer<TaskOutputKey, TaskIOTab> TASK_TABS
            = new IOTabMaintainer<>(createTaskIOTabFactory());

    private static IOTabFactory<TaskIOTab> createTaskIOTabFactory() {
        return new IOTabFactory<TaskIOTab>() {
            @Override
            public TaskIOTab create(String caption) {
                TaskTabAction[] actions = createActions();
                InputOutput io = IOProvider.getDefault().getIO(caption, actions);
                return new TaskIOTab(io, actions);
            }
        };
    }

    private static TaskTabAction[] createActions() {
        return new TaskTabAction[] {
            new ReRunTask(),
            new ReRunWithDifferentArgsTask()
        };
    }

    public static IOTabMaintainer<TaskOutputKey, TaskIOTab> taskTabs() {
        return TASK_TABS;
    }

    @SuppressWarnings("serial")
    private static class ReRunTask extends TaskTabAction {
        @StaticResource
        private static final String ICON = "org/netbeans/gradle/project/resources/rerun-icon.png";

        public ReRunTask() {
            putValue(Action.SMALL_ICON, ImageUtilities.loadImage(ICON));

            putValue(Action.NAME, NbStrings.getReRunName());
            putValue(Action.SHORT_DESCRIPTION, NbStrings.getReRunDescription());
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            AsyncGradleTask task = getLastTask();
            if (task != null) {
                task.run();
            }
        }
    }

    @SuppressWarnings("serial")
    private static class ReRunWithDifferentArgsTask extends TaskTabAction {
        @StaticResource
        private static final String ICON = "org/netbeans/gradle/project/resources/rerun-diff-args-icon.png";

        public ReRunWithDifferentArgsTask() {
            putValue(Action.SMALL_ICON, ImageUtilities.loadImage(ICON));

            putValue(Action.NAME, NbStrings.getReRunDiffName());
            putValue(Action.SHORT_DESCRIPTION, NbStrings.getReRunDiffDescription());
        }

        private static PredefinedTask toPredefined(GradleTaskDef taskDef) {
            List<String> sourceNames = taskDef.getTaskNames();
            List<PredefinedTask.Name> names = new ArrayList<>(sourceNames.size());
            for (String name: sourceNames) {
                names.add(new PredefinedTask.Name(name, false));
            }

            return new PredefinedTask(
                    taskDef.getCommandName(),
                    names,
                    taskDef.getArguments(),
                    taskDef.getJvmArguments(),
                    false);
        }

        private static GradleCommandSpecFactory adjust(
                GradleCommandSpecFactory source,
                GradleCommandTemplate template) {

            return GradleCommandSpec.adjustFactory(
                    source,
                    template.getTasks(),
                    template.getArguments(),
                    template.getJvmArguments());
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            GradleTaskDef lastSource = getLastSourceTask();
            AsyncGradleTask task = getLastTask();
            if (task != null && lastSource != null) {
                CustomActionPanel panel = new CustomActionPanel(false);
                panel.updatePanel(toPredefined(lastSource));

                DialogDescriptor dlgDescriptor = new DialogDescriptor(
                        panel,
                        NbStrings.getCustomTaskDlgTitle(),
                        true,
                        new Object[]{DialogDescriptor.OK_OPTION, DialogDescriptor.CANCEL_OPTION},
                        DialogDescriptor.OK_OPTION,
                        DialogDescriptor.BOTTOM_ALIGN,
                        null,
                        null);
                Dialog dlg = DialogDisplayer.getDefault().createDialog(dlgDescriptor);
                dlg.pack();
                dlg.setVisible(true);
                if (dlgDescriptor.getValue() != DialogDescriptor.OK_OPTION) {
                    return;
                }

                GradleCommandTemplate template
                        = panel.tryGetGradleCommand(lastSource.getCommandName());
                AsyncGradleTask newTask = new AsyncGradleTask(
                        task.getProject(),
                        adjust(task.getTaskDefFactroy(), template),
                        task.getListener());
                newTask.run();
            }
        }
    }

    private IOTabs() {
        throw new AssertionError();
    }
}
TOP

Related Classes of org.netbeans.gradle.project.output.IOTabs$ReRunTask

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.