001 package com.hammurapi.eventbus;
002
003 import java.util.logging.Logger;
004
005 /**
006 * Discards events with length of inference chain greater than specified threshold, issues warning.
007 * @author Pavel Vlasov
008 */
009 public class InferenceChainLengthFilter<E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E,P,C>, S extends EventStore<E,P,C,H,S>> implements InferenceFilter<E,P,C,K,H,S> {
010
011 private static final Logger logger = Logger.getLogger(InferenceChainLengthFilter.class.getCanonicalName());
012
013 private int threshold;
014
015 public InferenceChainLengthFilter(int threshold) {
016 this.threshold = threshold;
017 }
018
019 public boolean accept(InferenceCommand<E,P,C,K,H,S> inferenceCommand, EventBus<E,P,C,K,H,S> bus) {
020 if (inferenceCommand.getInferenceContext().getInferenceChainLength()>threshold) {
021 logger.warning("Inference chain is too long ("+inferenceCommand.getInferenceContext().getInferenceChainLength()+") for inference command "+inferenceCommand+", command discarded");
022 return false;
023 }
024 return true;
025 }
026 }