package com.constellio.model.services.records.extractions; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Majid */ public class RegexExtractor implements Extractor<String> { private String regexPattern; private Pattern pattern; private String value; private boolean substitute; public RegexExtractor() { } public String getRegexPattern() { return regexPattern; } public void setRegexPattern(String regexPattern) { this.regexPattern = regexPattern; this.pattern = Pattern.compile(regexPattern); } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public boolean isSubstitute() { return substitute; } public void setSubstitute(boolean substitute) { this.substitute = substitute; } public RegexExtractor(String regexPattern, boolean substitute, String value) { setRegexPattern(regexPattern); this.substitute = substitute; this.value = value; } @Override public List<? extends Object> extractFrom(String feed) { Matcher matcher = pattern.matcher(feed); if (matcher.find()) { if (substitute) { String match = matcher.group(); return Collections.singletonList(pattern.matcher(match).replaceAll(value)); } else { return Collections.singletonList(value); } } return null; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } RegexExtractor rhs = (RegexExtractor) obj; return new EqualsBuilder() .append(regexPattern, rhs.regexPattern) .append(value, rhs.value) .append(substitute, rhs.substitute) .isEquals(); } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }