package org.jboss.windup.reporting.ruleexecution; import java.util.concurrent.atomic.AtomicInteger; import org.jboss.forge.furnace.util.Assert; import org.ocpsoft.rewrite.config.Rule; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; /** * Contains information about a {@link Rule} and how it was executed by Windup (whether it was evaluated and executed, whether it failed, and various * statistics on what it performed. * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> * */ public class RuleExecutionInformation implements RuleExecutionInformationForReading { private final Rule rule; private boolean evaluationResult; private boolean executed; private boolean failed; private final AtomicInteger vertexIDsAdded = new AtomicInteger(); private final AtomicInteger edgeIDsAdded = new AtomicInteger(); private final AtomicInteger vertexIDsRemoved = new AtomicInteger(); private final AtomicInteger edgeIDsRemoved = new AtomicInteger(); private Throwable failureCause; /** * Create an instance for the provided rule. */ public RuleExecutionInformation(Rule rule) { Assert.notNull(rule, "Rule object must not be null"); this.rule = rule; } /** * Gets the {@link Rule}. */ public Rule getRule() { return rule; } /** * Gets the result of the evaluation stage of the {@link Rule}. A false value here indicates that the "perform" function of the {@link Rule} would * not have executed. */ public boolean getEvaluationResult() { return evaluationResult; } /** * Sets the result of the evaluation stage of the {@link Rule}. A false value here indicates that the "perform" function of the {@link Rule} would * not have executed. */ void setEvaluationResult(boolean evaluationResult) { this.evaluationResult = evaluationResult; } /** * Gets an indication of whether or not this rule was executed by Windup. */ public boolean isExecuted() { return executed; } /** * Sets the indication of whether or not this rule was executed by Windup. */ void setExecuted(boolean executed) { this.executed = executed; } /** * Contains the failure status of the {@link Rule}. */ public boolean isFailed() { return failed; } /** * Contains the failure status of the {@link Rule}. */ void setFailed(boolean failed) { this.failed = failed; } /** * Contains the failure cause of the {@link Rule} (if any). */ public Throwable getFailureCause() { return failureCause; } /** * Contains the failure cause of the {@link Rule} (if any). */ void setFailureCause(Throwable failureCause) { this.failureCause = failureCause; } /** * Contains the IDs of any {@link Edge}s added by this {@link Rule}. */ public int getEdgeIDsAdded() { return this.edgeIDsAdded.get(); } /** * Contains the IDs of any {@link Vertex}s added by this {@link Rule}. */ public int getVertexIDsAdded() { return this.vertexIDsAdded.get(); } /** * Contains the IDs of any {@link Vertex} added by this {@link Rule}. */ public void addVertexIDAdded(Object vID) { this.vertexIDsAdded.incrementAndGet(); } /** * Contains the IDs of any {@link Edge}s added by this {@link Rule}. */ public void addEdgeIDAdded(Object edgeID) { this.edgeIDsAdded.incrementAndGet(); } /** * Contains the IDs of any {@link Edge}s removed by this {@link Rule}. */ public int getEdgeIDsRemoved() { return this.edgeIDsRemoved.get(); } /** * Contains the IDs of any {@link Vertex} removed by this {@link Rule}. */ public int getVertexIDsRemoved() { return this.vertexIDsRemoved.get(); } /** * Contains the IDs of any {@link Vertex} removed by this {@link Rule}. */ public void addVertexIDRemoved(Object vID) { this.vertexIDsRemoved.incrementAndGet(); } /** * Contains the IDs of any {@link Edge} removed by this {@link Rule}. */ public void addEdgeIDRemoved(Object edgeID) { this.edgeIDsRemoved.incrementAndGet(); } @Override public String toString() { return "RuleExecutionInformation [rule=" + rule + ", evaluationResult=" + evaluationResult + ", executed=" + executed + ", failed=" + failed + ", failureCause=" + failureCause + "]"; } }