ExtractRuleService.java
package net.sasasin.sreader.service;
import java.util.Comparator;
import java.util.Optional;
import java.util.regex.PatternSyntaxException;
import net.sasasin.sreader.domain.ExtractRule;
import net.sasasin.sreader.repository.ExtractRuleRepository;
import org.springframework.stereotype.Service;
@Service
public class ExtractRuleService {
private final ExtractRuleRepository extractRuleRepository;
public ExtractRuleService(ExtractRuleRepository extractRuleRepository) {
this.extractRuleRepository = extractRuleRepository;
}
public Optional<ExtractRule> findBestRule(String url) {
return extractRuleRepository.findAll().stream()
.filter(rule -> matches(url, rule.urlPattern()))
.max(Comparator.comparingInt(rule -> rule.urlPattern().length()));
}
private boolean matches(String url, String pattern) {
try {
return url.matches(pattern + ".*");
} catch (PatternSyntaxException e) {
return false;
}
}
}