Package org.netbeans.gradle.project.properties

Source Code of org.netbeans.gradle.project.properties.PredefinedTask$Name

package org.netbeans.gradle.project.properties;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.model.GradleTaskID;
import org.netbeans.gradle.model.util.CollectionUtils;
import org.netbeans.gradle.project.NbGradleProject;
import org.netbeans.gradle.project.api.task.GradleCommandTemplate;
import org.netbeans.gradle.project.api.task.TaskVariableMap;
import org.netbeans.gradle.project.model.NbGradleMultiProjectDef;
import org.netbeans.gradle.project.model.NbGradleProjectTree;
import org.netbeans.gradle.project.tasks.StandardTaskVariable;
import org.openide.util.Lookup;

public final class PredefinedTask {
    public static final class Name {
        private final String name;
        private final boolean mustExist;

        public Name(String name, boolean mustExist) {
            ExceptionHelper.checkNotNullArgument(name, "name");
            this.name = name;
            this.mustExist = mustExist;
        }

        public String getName() {
            return name;
        }

        public boolean isMustExist() {
            return mustExist;
        }

        @Override
        public String toString() {
            return name + "[must exist=" + (mustExist ? "yes" : "no") + "]";
        }
    }

    private final String displayName;
    private final List<Name> taskNames;
    private final List<String> arguments;
    private final List<String> jvmArguments;
    private final boolean nonBlocking;

    public PredefinedTask(
            String displayName,
            List<Name> taskNames,
            List<String> arguments,
            List<String> jvmArguments,
            boolean nonBlocking) {
        ExceptionHelper.checkNotNullArgument(displayName, "displayName");

        this.displayName = displayName;
        this.taskNames = CollectionUtils.copyNullSafeList(taskNames);
        this.arguments = CollectionUtils.copyNullSafeList(arguments);
        this.jvmArguments = CollectionUtils.copyNullSafeList(jvmArguments);
        this.nonBlocking = nonBlocking;
    }

    public boolean isNonBlocking() {
        return nonBlocking;
    }

    public String getDisplayName() {
        return displayName;
    }

    public List<Name> getTaskNames() {
        return taskNames;
    }

    public List<String> getArguments() {
        return arguments;
    }

    public List<String> getJvmArguments() {
        return jvmArguments;
    }

    public static PredefinedTask createSimple(String displayName, String taskName) {
        Name name = new Name(taskName, false);
        return new PredefinedTask(displayName,
                Arrays.asList(name),
                Collections.<String>emptyList(),
                Collections.<String>emptyList(),
                false);
    }

    private static NbGradleProjectTree findProject(NbGradleMultiProjectDef project, String projectPath) {
        if (projectPath.isEmpty()) {
            return project.getRootProject();
        }

        if (projectPath.startsWith(":")) {
            return project.getRootProject().findByPath(projectPath);
        }
        else {
            return project.getMainProject().findByPath(projectPath);
        }
    }

    private static boolean isProjectHasTask(NbGradleProjectTree project, String taskName) {
        for (GradleTaskID task: project.getTasks()) {
            if (taskName.equals(task.getName())) {
                return true;
            }
        }
        return false;
    }

    private static boolean isProjectOrChildrenHasTask(NbGradleMultiProjectDef project, String taskName) {
        return isProjectOrChildrenHasTask(project.getMainProject(), taskName);
    }

    private static boolean isProjectOrChildrenHasTask(NbGradleProjectTree project, String taskName) {
        if (isProjectHasTask(project, taskName)) {
            return true;
        }
        for (NbGradleProjectTree child: project.getChildren()) {
            if (isProjectOrChildrenHasTask(child, taskName)) {
                return true;
            }
        }
        return false;
    }

    private static boolean isTaskExists(NbGradleMultiProjectDef project, String projectPath, String taskName) {
        NbGradleProjectTree taskProject = findProject(project, projectPath);
        if (taskProject == null) {
            return false;
        }

        return isProjectHasTask(taskProject, taskName);
    }

    private static boolean isTaskExists(NbGradleMultiProjectDef project, String taskName) {
        int taskNameSepIndex = taskName.lastIndexOf(':');
        if (taskNameSepIndex >= 0) {
            return isTaskExists(project,
                    taskName.substring(0, taskNameSepIndex),
                    taskName.substring(taskNameSepIndex + 1));
        }
        else {
            return isProjectOrChildrenHasTask(project, taskName);
        }
    }

    public GradleCommandTemplate toCommandTemplate(String displayName) {
        List<String> rawTaskNames = new ArrayList<>(taskNames.size());
        for (Name name: taskNames) {
            rawTaskNames.add(name.getName());
        }

        GradleCommandTemplate.Builder builder
                = new GradleCommandTemplate.Builder(displayName, rawTaskNames);

        builder.setArguments(arguments);
        builder.setJvmArguments(jvmArguments);
        builder.setBlocking(!nonBlocking);
        return builder.create();
    }

    public GradleCommandTemplate toCommandTemplate() {
        return toCommandTemplate(displayName);
    }

    public boolean isTasksExistsIfRequired(NbGradleProject project, Lookup actionContext) {
        return isTasksExistsIfRequired(project, project.getVarReplaceMap(actionContext));
    }

    public boolean isTasksExistsIfRequired(NbGradleProject project, TaskVariableMap varReplaceMap) {
        NbGradleMultiProjectDef gradleProject = project.getAvailableModel().getProjectDef();
        return isTasksExistsIfRequired(gradleProject, varReplaceMap);
    }

    public boolean isTasksExistsIfRequired(NbGradleMultiProjectDef project, TaskVariableMap varReplaceMap) {
        for (Name name: taskNames) {
            if (name.mustExist) {
                String processedName = StandardTaskVariable.replaceVars(name.getName(), varReplaceMap);
                if (!isTaskExists(project, processedName)) {
                    return false;
                }
            }
        }
        return true;
    }

    @Override
    public String toString() {
        return "PredefinedTask{"
                + "displayName=" + displayName
                + ", taskNames=" + taskNames
                + ", arguments=" + arguments
                + ", jvmArguments=" + jvmArguments + '}';
    }
}
TOP

Related Classes of org.netbeans.gradle.project.properties.PredefinedTask$Name

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.