diff options
Diffstat (limited to 'src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildFilter.java')
-rw-r--r-- | src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildFilter.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildFilter.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildFilter.java new file mode 100644 index 0000000..eb80d86 --- /dev/null +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketBuildFilter.java @@ -0,0 +1,106 @@ +package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder; + +import java.util.logging.Logger; +import java.util.regex.Pattern; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; + +/** + * Mutable wrapper + */ +class Mutable<T> { + private T value; + public Mutable() { this.value = null; } + public Mutable(T value) { this.value = value; } + T get() { return this.value; } + void set(T value) { this.value = value; } +} + +abstract class Filter { + protected static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName()); + + public static final String RX_FILTER_FLAG = "r"; + public static final String RX_FILTER_FLAG_SINGLE = RX_FILTER_FLAG + ":"; + + abstract public boolean apply(String filter, BitbucketCause cause); + abstract public boolean check(String filter); +} + +class EmptyFilter extends Filter { + @Override + public boolean apply(String filter, BitbucketCause cause) { return true; } + @Override + public boolean check(String filter) { return true; } +} + +class AnyFlag extends Filter { + @Override + public boolean apply(String filter, BitbucketCause cause) { return true; } + @Override + public boolean check(String filter) { return filter.isEmpty() || filter.contains("*") || filter.toLowerCase().contains("any"); } +} + +class OnlyDestFlag extends Filter { + @Override + public boolean apply(String filter, BitbucketCause cause) { + return Pattern.compile( + filter.startsWith(RX_FILTER_FLAG_SINGLE) ? filter.substring(RX_FILTER_FLAG_SINGLE.length()) : Pattern.quote(filter), + Pattern.CASE_INSENSITIVE).matcher(cause.getTargetBranch()).find(); + } + @Override + public boolean check(String filter) { + return !(Pattern.matches("(s:)|(d:)", filter)); + } +} + +class SourceDestFlag extends Filter { + @Override + public boolean apply(String filter, BitbucketCause cause) { + return false; + } + @Override + public boolean check(String filter) { + return Pattern.matches("(s:)|(d:)", filter); + } +} + +/** + * Created by maxvodo + */ +public class BitbucketBuildFilter { + private static final Logger logger = Logger.getLogger(BitbucketBuildTrigger.class.getName()); + + private final String filter; + private Filter currFilter = null; + private static final List<Filter> AvailableFilters; + + static { + ArrayList<Filter> filters = new ArrayList<Filter>(); + filters.add(new AnyFlag()); + filters.add(new OnlyDestFlag()); + filters.add(new EmptyFilter()); + AvailableFilters = filters; + } + + public BitbucketBuildFilter(String f) { + this.filter = f; + this.buildFilter(this.filter); + } + + private void buildFilter(String filter) { + for(Filter f : AvailableFilters) { + if (f.check(filter)) { + this.currFilter = f; + logger.log(Level.INFO, "Using filter: {0}", f.getClass().getSimpleName()); + break; + } + } + logger.warning("No available filters to use ..."); + } + + public boolean approved(BitbucketCause cause) { + return this.currFilter.apply(this.filter, cause); + } +} |