package org.netbeans.gradle.project.tasks; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import org.jtrim.utils.ExceptionHelper; import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.gradle.project.NbGradleProject; import org.netbeans.gradle.project.NbStrings; import org.netbeans.gradle.project.api.config.ProfileDef; import org.netbeans.gradle.project.api.task.BuiltInGradleCommandQuery; import org.netbeans.gradle.project.api.task.CustomCommandActions; import org.netbeans.gradle.project.api.task.GradleCommandTemplate; import org.netbeans.gradle.project.java.test.TestTaskName; import org.netbeans.spi.project.ActionProvider; import org.netbeans.spi.project.SingleMethod; public final class DefaultBuiltInTasks implements BuiltInGradleCommandQuery { private static final Logger LOGGER = Logger.getLogger(DefaultBuiltInTasks.class.getName()); private static final CommandWithActions DEFAULT_BUILD_TASK = nonBlockingCommand( Arrays.asList("build"), Collections.<String>emptyList(), Collections.<String>emptyList(), CustomCommandActions.BUILD); private static final CommandWithActions DEFAULT_CLEAN_TASK = nonBlockingCommand( Arrays.asList("clean"), Collections.<String>emptyList(), Collections.<String>emptyList(), CustomCommandActions.BUILD); private static final CommandWithActions DEFAULT_REBUILD_TASK = nonBlockingCommand( Arrays.asList("clean", "build"), Collections.<String>emptyList(), Collections.<String>emptyList(), CustomCommandActions.BUILD); private static final CommandWithActions DEFAULT_TEST_TASK = nonBlockingCommand( Arrays.asList(TestTaskName.DEFAULT_CLEAN_TEST_TASK_NAME, TestTaskName.DEFAULT_TEST_TASK_NAME), Collections.<String>emptyList(), Collections.<String>emptyList(), CustomCommandActions.BUILD); private static final Map<String, CommandWithActions> DEFAULT_TASKS; private static final Map<String, String> DISPLAY_NAME_MAP; static { DEFAULT_TASKS = new HashMap<>(); addToDefaults(ActionProvider.COMMAND_BUILD, DEFAULT_BUILD_TASK); addToDefaults(ActionProvider.COMMAND_CLEAN, DEFAULT_CLEAN_TASK); addToDefaults(ActionProvider.COMMAND_REBUILD, DEFAULT_REBUILD_TASK); addToDefaults(ActionProvider.COMMAND_TEST, DEFAULT_TEST_TASK); // We have to provide names for the following commands because of the // contract of BuiltInGradleCommandQuery.tryGetDisplayNameOfCommand. DISPLAY_NAME_MAP = new HashMap<>(); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_BUILD, NbStrings.getBuildCommandCaption(false)); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_TEST, NbStrings.getTestCommandCaption(false)); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_CLEAN, NbStrings.getCleanCommandCaption(false)); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_RUN, NbStrings.getRunCommandCaption(false)); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_DEBUG, NbStrings.getDebugCommandCaption(false)); DISPLAY_NAME_MAP.put(JavaProjectConstants.COMMAND_JAVADOC, NbStrings.getJavadocCommandCaption()); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_REBUILD, NbStrings.getRebuildCommandCaption()); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_TEST_SINGLE, NbStrings.getTestSingleCommandCaption()); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_DEBUG_TEST_SINGLE, NbStrings.getDebugTestSingleCommandCaption()); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_RUN_SINGLE, NbStrings.getRunSingleCommandCaption()); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_DEBUG_SINGLE, NbStrings.getDebugSingleCommandCaption()); DISPLAY_NAME_MAP.put(JavaProjectConstants.COMMAND_DEBUG_FIX, NbStrings.getApplyCodeChangesCommandCaption()); DISPLAY_NAME_MAP.put(SingleMethod.COMMAND_RUN_SINGLE_METHOD, NbStrings.getTestSingleMethodCommandCaption()); DISPLAY_NAME_MAP.put(SingleMethod.COMMAND_DEBUG_SINGLE_METHOD, NbStrings.getDebugTestSingleMethodCommandCaption()); DISPLAY_NAME_MAP.put(ActionProvider.COMMAND_COMPILE_SINGLE, NbStrings.getCompileSingleCaption()); } private static void addToDefaults(String command, CommandWithActions task) { addToMap(command, task, DEFAULT_TASKS); } private static void addToMap(String command, CommandWithActions task, Map<String, CommandWithActions> map) { map.put(command, task); } private static String tryGetDisplayNameOfDefaultCommand(String command) { ExceptionHelper.checkNotNullArgument(command, "command"); return DISPLAY_NAME_MAP.get(command); } public static String getDisplayNameOfCommand(NbGradleProject project, String command) { String displayName = tryGetDisplayNameOfDefaultCommand(command); if (displayName != null) { return displayName; } for (BuiltInGradleCommandQuery commandQuery: project.getExtensions().lookupAllExtensionObjs(BuiltInGradleCommandQuery.class)) { displayName = commandQuery.tryGetDisplayNameOfCommand(command); if (displayName != null) { return displayName; } } LOGGER.log(Level.WARNING, "Command does not have a display name: {0}", command); return command; } private final Set<String> supportedCommands; public DefaultBuiltInTasks() { this.supportedCommands = Collections.unmodifiableSet(DEFAULT_TASKS.keySet()); } @Override public Set<String> getSupportedCommands() { return supportedCommands; } @Override public String tryGetDisplayNameOfCommand(String command) { return DISPLAY_NAME_MAP.get(command); } @Override public GradleCommandTemplate tryGetDefaultGradleCommand(ProfileDef profileDef, String command) { CommandWithActions task = DEFAULT_TASKS.get(command); return task != null ? task.command : null; } @Override public CustomCommandActions tryGetCommandDefs(ProfileDef profileDef, String command) { CommandWithActions task = DEFAULT_TASKS.get(command); return task != null ? task.customActions : null; } private static CommandWithActions nonBlockingCommand( List<String> taskNames, List<String> arguments, List<String> jvmArguments, CustomCommandActions customActions) { GradleCommandTemplate.Builder commandBuilder = new GradleCommandTemplate.Builder("", taskNames); commandBuilder.setArguments(arguments); commandBuilder.setJvmArguments(jvmArguments); commandBuilder.setBlocking(false); return new CommandWithActions(commandBuilder.create(), customActions); } private static final class CommandWithActions { public final GradleCommandTemplate command; public final CustomCommandActions customActions; public CommandWithActions(GradleCommandTemplate command, CustomCommandActions customActions) { this.command = command; this.customActions = customActions; } } }