/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.windup.config; import java.util.Collections; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.util.exception.WindupException; import org.jboss.windup.util.exception.WindupStopException; import org.ocpsoft.rewrite.AbstractRewrite; import org.ocpsoft.rewrite.event.Flow; import org.ocpsoft.rewrite.event.Rewrite; /** * Holds the context of the whole Windup Execution. * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> * @author <a href="mailto:zizka@seznam.cz">Ondrej Zizka</a> */ public class GraphRewrite extends AbstractRewrite implements Rewrite { private final GraphContext graphContext; private final Iterable<RuleLifecycleListener> listeners; private WindupStopException windupStopException; public GraphRewrite(GraphContext context) { this.listeners = Collections.emptyList(); this.graphContext = context; } public GraphRewrite(Iterable<RuleLifecycleListener> listeners, GraphContext context) { this.listeners = listeners; this.graphContext = context; } /** * @return The exception which holds information where Windup has stopped before finishing (typically on an external request), * or null if Windup finished normally. */ public WindupStopException getWindupStopException() { return windupStopException; } /** * Stores the exception which holds information if, and where, the Windup stopped (typically on an external request). * If windup was stopped, this must be called. */ public void setWindupStopException(WindupStopException windupStopException) { if (this.windupStopException != null) throw new WindupException("Trying to set the stop exception while it was already set." + " The cause contains the original one.", this.windupStopException); this.windupStopException = windupStopException; } // TODO: This deserves a javadoc. @Override public Flow getFlow() { return new Flow() { @Override public boolean isHandled() { return false; } @Override public boolean is(Flow type) { return false; } }; } public GraphContext getGraphContext() { return graphContext; } /** * This is optionally called by long-running rules to indicate their current progress and estimated time-remaining. */ public boolean ruleEvaluationProgress(String name, int currentPosition, int total, int timeRemainingInSeconds) { boolean windupStopRequested = false; for (RuleLifecycleListener listener : listeners) windupStopRequested = listener.ruleEvaluationProgress(this, name, currentPosition, total, timeRemainingInSeconds); return windupStopRequested; } }