001 package com.hammurapi.eventbus;
002
003
004 /**
005 * Discards post commands with derivation loops, i.e. when one of inputs is derived from the event.
006 * @author Pavel Vlasov
007 */
008 public class DerivationLoopFilter<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> {
009
010 public boolean accept(InferenceCommand<E,P,C,K,H,S> inferenceCommand, EventBus<E,P,C,K,H,S> bus) {
011 if (inferenceCommand instanceof PostCommand) {
012 PostCommand<E,P,C,K,H,S> postCommand = (PostCommand<E,P,C,K,H,S>) inferenceCommand;
013 E event = postCommand.getEvent();
014 for (AbstractEventBus.Handle<E, P, C, K> handle: postCommand.getInputs()) {
015 if (handle.isDerivedFrom(event)) {
016 return false;
017 }
018 }
019 }
020 return true;
021 }
022 }