package io.qameta.allure.bamboo;
import com.atlassian.bamboo.plan.cache.ImmutablePlan;
import com.atlassian.bamboo.plan.configuration.MiscellaneousPlanConfigurationPlugin;
import com.atlassian.bamboo.utils.error.ErrorCollection;
import com.atlassian.bamboo.v2.build.BaseConfigurablePlugin;
import com.atlassian.bamboo.v2.build.ImportExportAwarePlugin;
import com.atlassian.bamboo.ww2.actions.build.admin.create.BuildConfiguration;
import com.google.common.collect.ImmutableSet;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Set;
import static com.atlassian.bamboo.plan.PlanClassHelper.isChain;
import static io.qameta.allure.bamboo.AllureBuildConfig.DEFAULT_ONLY_FOR_FAILED;
import static io.qameta.allure.bamboo.AllureConstants.ALLURE_CONFIG_ENABLED;
import static io.qameta.allure.bamboo.AllureConstants.ALLURE_CONFIG_EXECUTABLE;
import static io.qameta.allure.bamboo.AllureConstants.ALLURE_CONFIG_FAILED_ONLY;
import static java.util.Optional.ofNullable;
import static org.apache.commons.lang.StringUtils.isEmpty;
@SuppressWarnings("unchecked")
public class AllureBuildConfigurator
extends BaseConfigurablePlugin
implements MiscellaneousPlanConfigurationPlugin, ImportExportAwarePlugin {
private static final Logger LOGGER = LoggerFactory.getLogger(AllureBuildConfigurator.class);
private AllureSettingsManager settingsManager;
private BambooExecutablesManager executablesManager;
@Override
public boolean isApplicableTo(@NotNull final ImmutablePlan plan) {
return isChain(plan);
}
@NotNull
@Override
public ErrorCollection validate(@NotNull BuildConfiguration buildConfiguration) {
final ErrorCollection collection = super.validate(buildConfiguration);
if (buildConfiguration.getBoolean(ALLURE_CONFIG_ENABLED)) {
if (isEmpty(buildConfiguration.getString(ALLURE_CONFIG_EXECUTABLE))) {
collection.addError(ALLURE_CONFIG_EXECUTABLE, "Cannot be empty!");
}
}
return collection;
}
@NotNull
@Override
public Set<String> getConfigurationKeys() {
return ImmutableSet.of(ALLURE_CONFIG_ENABLED, ALLURE_CONFIG_EXECUTABLE, ALLURE_CONFIG_FAILED_ONLY);
}
@Override
public void prepareConfigObject(@NotNull BuildConfiguration buildConfiguration) {
super.prepareConfigObject(buildConfiguration);
if (buildConfiguration.getProperty(ALLURE_CONFIG_ENABLED) == null) {
ofNullable(settingsManager).map(AllureSettingsManager::getSettings).ifPresent(settings ->
buildConfiguration.setProperty(ALLURE_CONFIG_ENABLED, settings.isEnabledByDefault()));
}
if (buildConfiguration.getProperty(ALLURE_CONFIG_FAILED_ONLY) == null) {
buildConfiguration.setProperty(ALLURE_CONFIG_FAILED_ONLY, DEFAULT_ONLY_FOR_FAILED);
}
if (buildConfiguration.getProperty(ALLURE_CONFIG_EXECUTABLE) == null) {
ofNullable(executablesManager).map(manager -> manager.getDefaultAllureExecutable().orElse(null))
.ifPresent(executable -> buildConfiguration.setProperty(ALLURE_CONFIG_EXECUTABLE, executable));
}
}
public void setSettingsManager(AllureSettingsManager settingsManager) {
this.settingsManager = settingsManager;
}
public void setExecutablesManager(BambooExecutablesManager executablesManager) {
this.executablesManager = executablesManager;
}
}