package org.jfrog.bamboo.util;
import com.atlassian.bamboo.plan.cache.ImmutablePlan;
import com.atlassian.bamboo.task.TaskDefinition;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.Nullable;
import org.jfrog.bamboo.task.ArtifactoryGenericDeployTask;
import org.jfrog.bamboo.task.ArtifactoryGradleTask;
import org.jfrog.bamboo.task.ArtifactoryIvyTask;
import org.jfrog.bamboo.task.ArtifactoryMaven3Task;
import java.util.List;
import static org.jfrog.bamboo.context.AbstractBuildContext.ENABLE_RELEASE_MANAGEMENT;
/**
* Utility class to help find tasks of a certain type.
*
* @author Tomer Cohen
*/
public abstract class TaskDefinitionHelper {
private TaskDefinitionHelper() {
throw new IllegalAccessError();
}
/**
* Find a Maven task defined by {@link ArtifactoryMaven3Task} or a Gradle task type {@link ArtifactoryGradleTask}
*
* @param taskDefinitions The list of of task definitions to search.
* @return A Maven or Gradle task if found, null if not.
*/
@Nullable
public static TaskDefinition findMavenOrGradleDefinition(List<TaskDefinition> taskDefinitions) {
if (taskDefinitions == null || taskDefinitions.isEmpty()) {
return null;
}
TaskDefinition definition = findMavenDefinition(taskDefinitions);
if (definition == null) {
definition = findGradleDefinition(taskDefinitions);
}
return definition;
}
/**
* @return Artifactory Gradle TaskDefinition if found, null if not.
*/
@Nullable
public static TaskDefinition findGradleDefinition(List<? extends TaskDefinition> taskDefinitions) {
if (taskDefinitions != null) {
for (TaskDefinition definition : taskDefinitions) {
if (StringUtils.endsWith(definition.getPluginKey(), ArtifactoryGradleTask.TASK_NAME)) {
return definition;
}
}
}
return null;
}
/**
* @return Artifactory Maven TaskDefinition if found, null if not.
*/
@Nullable
public static TaskDefinition findMavenDefinition(List<? extends TaskDefinition> taskDefinitions) {
if (taskDefinitions != null) {
for (TaskDefinition definition : taskDefinitions) {
if (StringUtils.endsWith(definition.getPluginKey(), ArtifactoryMaven3Task.TASK_NAME)) {
return definition;
}
}
}
return null;
}
/**
* @return Artifactory Maven TaskDefinition if found, null if not.
*/
@Nullable
public static TaskDefinition findReleaseTaskDefinition(List<? extends TaskDefinition> taskDefinitions) {
if (taskDefinitions != null) {
for (TaskDefinition definition : taskDefinitions) {
if ("true".equals(definition.getConfiguration().get(ENABLE_RELEASE_MANAGEMENT))) {
return definition;
}
}
}
return null;
}
/**
* @return Generic Deploy task if found, null if not.
*/
@Nullable
public static TaskDefinition findGenericDeployDefinition(List<? extends TaskDefinition> taskDefinitions) {
if (taskDefinitions != null) {
for (TaskDefinition definition : taskDefinitions) {
if (StringUtils.endsWith(definition.getPluginKey(), ArtifactoryGenericDeployTask.TASK_NAME)) {
return definition;
}
}
}
return null;
}
/**
* @return Generic Deploy task if found, null if not.
*/
@Nullable
public static TaskDefinition findIvyTaskDefinition(List<TaskDefinition> taskDefinitions) {
if (taskDefinitions != null) {
for (TaskDefinition definition : taskDefinitions) {
if (StringUtils.endsWith(definition.getPluginKey(), ArtifactoryIvyTask.TASK_NAME)) {
return definition;
}
}
}
return null;
}
public static TaskDefinition getPushToBintrayEnabledTaskDefinition(ImmutablePlan plan) {
List<TaskDefinition> taskDefinitions = plan.getBuildDefinition().getTaskDefinitions();
TaskDefinition pushToBintrayEnabledTask = findMavenOrGradleDefinition(taskDefinitions);
if (pushToBintrayEnabledTask == null) {
pushToBintrayEnabledTask = TaskDefinitionHelper.findIvyTaskDefinition(taskDefinitions);
}
if (pushToBintrayEnabledTask == null) {
pushToBintrayEnabledTask = TaskDefinitionHelper.findGenericDeployDefinition(taskDefinitions);
}
return pushToBintrayEnabledTask;
}
}