package org.netbeans.gradle.project.tasks; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.jtrim.cancel.CancellationToken; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.model.util.CollectionUtils; public final class GradleCommandSpec { private final GradleTaskDef source; private final GradleTaskDef processed; public GradleCommandSpec(GradleTaskDef source, GradleTaskDef processed) { ExceptionHelper.checkNotNullArgument(source, "source"); this.source = source; this.processed = processed; } @Nonnull public GradleTaskDef getSource() { return source; } @Nullable public GradleTaskDef getProcessed() { return processed; } public static GradleCommandSpecFactory adjustFactory( GradleCommandSpecFactory source, List<String> taskNames, List<String> arguments, List<String> jvmArguments, boolean adjustSource) { return new CommandAdjusterFactory(source, taskNames, arguments, jvmArguments, adjustSource); } private static final class CommandAdjusterFactory implements GradleCommandSpecFactory { private final GradleCommandSpecFactory source; private final List<String> taskNames; private final List<String> arguments; private final List<String> jvmArguments; private final boolean adjustSource; public CommandAdjusterFactory( GradleCommandSpecFactory source, List<String> taskNames, List<String> arguments, List<String> jvmArguments, boolean adjustSource) { ExceptionHelper.checkNotNullArgument(source, "source"); this.source = source; this.taskNames = CollectionUtils.copyNullSafeList(taskNames); this.arguments = CollectionUtils.copyNullSafeList(arguments); this.jvmArguments = CollectionUtils.copyNullSafeList(jvmArguments); this.adjustSource = adjustSource; } @Override public String getDisplayName() { return source.getDisplayName(); } @Override public GradleCommandSpec tryCreateCommandSpec(CancellationToken cancelToken) throws Exception { GradleCommandSpec original = source.tryCreateCommandSpec(cancelToken); if (original == null) { return null; } GradleTaskDef.Builder result = new GradleTaskDef.Builder(original.getSource()); result.setTaskNames(taskNames); result.setArguments(arguments); result.setJvmArguments(jvmArguments); if (adjustSource) { return new GradleCommandSpec(result.create(), null); } else { return new GradleCommandSpec(original.getSource(), result.create()); } } } }