dnet-applications/dhp-broker-application/.svn/pristine/31/316a349a978e18bd586ecf885f7...

57 lines
1.7 KiB
Plaintext

package eu.dnetlib.lbs.utils;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import eu.dnetlib.lbs.elasticsearch.Event;
import eu.dnetlib.lbs.topics.TopicType;
import eu.dnetlib.lbs.topics.TopicTypeRepository;
public class EventVerifier implements Predicate<Event> {
private final TopicTypeRepository topicTypeRepo;
private final long MAX_DELAY = 5000; // 10 seconds
private Instant last = Instant.EPOCH;
private List<Predicate<Event>> validators = new ArrayList<>();
private static final Log log = LogFactory.getLog(EventVerifier.class);
public EventVerifier(final TopicTypeRepository topicTypeRepo) {
this.topicTypeRepo = topicTypeRepo;
}
@Override
public boolean test(final Event event) {
if (event == null || StringUtils.isBlank(event.getProducerId())) { return false; }
// TODO: La lista delle topicTypes deve essere in funzione del producer
final Instant now = Instant.now();
if (Duration.between(this.last, now).toMillis() > this.MAX_DELAY) {
log.info("Updating the list of topic regex");
final Iterable<TopicType> iter = this.topicTypeRepo.findAll();
this.validators = StreamSupport.stream(iter.spliterator(), false)
.map(TopicType::asValidator)
.collect(Collectors.toList());
}
try {
return this.validators.stream().anyMatch(p -> p.test(event));
} catch (final Throwable e) {
return false;
} finally {
this.last = now;
}
}
}