package com.dhemery.expressing;
import com.dhemery.core.Condition;
import com.dhemery.polling.events.ConditionDissatisfied;
import com.dhemery.polling.events.ConditionSatisfied;
import com.dhemery.publishing.Publisher;
import org.hamcrest.Description;
/**
* Wraps a condition to publish the result of its evaluations.
*/
public class PublishingCondition implements Condition {
private final Condition condition;
private final Publisher publisher;
private int failureCount = 0;
/**
* Wraps the given condition to publish the results of its evaluations.
*/
public PublishingCondition(Condition condition, Publisher publisher) {
this.condition = condition;
this.publisher = publisher;
}
@Override
public boolean isSatisfied() {
boolean isSatisfied = condition.isSatisfied();
if(isSatisfied) publisher.publish(new ConditionSatisfied(condition, failureCount));
else {
failureCount++;
publisher.publish(new ConditionDissatisfied(condition, failureCount));
}
return isSatisfied;
}
@Override
public void describeTo(Description description) {
condition.describeTo(description);
}
@Override
public void describeDissatisfactionTo(Description description) {
condition.describeDissatisfactionTo(description);
}
}