All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.atlassian.bamboo.specs.api.model.repository.VcsChangeDetectionProperties Maven / Gradle / Ivy

package com.atlassian.bamboo.specs.api.model.repository;

import com.atlassian.bamboo.specs.api.builders.repository.VcsChangeDetection.FileFilteringOption;
import com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException;
import com.atlassian.bamboo.specs.api.model.EntityProperties;
import com.atlassian.bamboo.specs.api.validators.repository.VcsChangeDetectionValidator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.annotation.concurrent.Immutable;
import java.time.Duration;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;

import static com.atlassian.bamboo.specs.api.validators.common.ImporterUtils.checkNoErrors;
import static com.atlassian.bamboo.specs.api.validators.common.ImporterUtils.checkNotNull;

@Immutable
public final class VcsChangeDetectionProperties implements EntityProperties {
    private final boolean quietPeriodEnabled;
    private final Duration quietPeriod;
    private final int maxRetries;
    private final boolean commitIsolationEnabled;
    private final String changesetFilterPatternRegex;
    private final FileFilteringOption filterFilePatternOption;
    private final String filterFilePatternRegex;
    private final Map configuration;

    private VcsChangeDetectionProperties() {
        quietPeriodEnabled = false;
        quietPeriod = Duration.ofSeconds(10);
        maxRetries = 5;
        commitIsolationEnabled = false;
        changesetFilterPatternRegex = "";
        filterFilePatternOption = FileFilteringOption.NONE;
        filterFilePatternRegex = "";
        configuration = Collections.emptyMap();
    }

    public VcsChangeDetectionProperties(boolean quietPeriodEnabled,
                                        Duration quietPeriod,
                                        int maxRetries,
                                        boolean commitIsolationEnabled,
                                        @NotNull Map configuration,
                                        @Nullable String changesetFilterPatternRegex,
                                        @Nullable FileFilteringOption filterFilePatternOption,
                                        @Nullable String filterFilePatternRegex
    ) throws PropertiesValidationException {
        this.quietPeriodEnabled = quietPeriodEnabled;
        this.quietPeriod = quietPeriod;
        this.maxRetries = maxRetries;
        this.commitIsolationEnabled = commitIsolationEnabled;
        this.changesetFilterPatternRegex = changesetFilterPatternRegex;
        this.filterFilePatternOption = filterFilePatternOption;
        this.filterFilePatternRegex = filterFilePatternRegex;
        this.configuration = Collections.unmodifiableMap(new LinkedHashMap<>(configuration));

        validate();
    }


    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        final VcsChangeDetectionProperties that = (VcsChangeDetectionProperties) o;
        return isQuietPeriodEnabled() == that.isQuietPeriodEnabled() &&
                getMaxRetries() == that.getMaxRetries() &&
                isCommitIsolationEnabled() == that.isCommitIsolationEnabled() &&
                Objects.equals(getQuietPeriod(), that.getQuietPeriod()) &&
                Objects.equals(getChangesetFilterPatternRegex(), that.getChangesetFilterPatternRegex()) &&
                Objects.equals(getFilterFilePatternOption(), that.getFilterFilePatternOption()) &&
                Objects.equals(getFilterFilePatternRegex(), that.getFilterFilePatternRegex()) &&
                Objects.equals(getConfiguration(), that.getConfiguration());
    }

    @Override
    public int hashCode() {
        return Objects.hash(isQuietPeriodEnabled(), getQuietPeriod(), getMaxRetries(), isCommitIsolationEnabled(), getChangesetFilterPatternRegex(), getFilterFilePatternOption(), getFilterFilePatternRegex(), getConfiguration());
    }

    public boolean isQuietPeriodEnabled() {
        return quietPeriodEnabled;
    }

    public Duration getQuietPeriod() {
        return quietPeriod;
    }

    public int getMaxRetries() {
        return maxRetries;
    }

    public boolean isCommitIsolationEnabled() {
        return commitIsolationEnabled;
    }

    @NotNull
    public Map getConfiguration() {
        return configuration;
    }

    @Nullable
    public String getChangesetFilterPatternRegex() {
        return changesetFilterPatternRegex;
    }

    @Nullable
    public FileFilteringOption getFilterFilePatternOption() {
        return filterFilePatternOption;
    }

    @Nullable
    public String getFilterFilePatternRegex() {
        return filterFilePatternRegex;
    }

    @Override
    public void validate() {
        checkNotNull("configuration", configuration);
        checkNoErrors(VcsChangeDetectionValidator.validate(this));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy