package org.jboss.windup.config;
import java.util.HashMap;
import java.util.Map;
import org.ocpsoft.rewrite.config.Operation;
import org.ocpsoft.rewrite.config.Rule;
import org.ocpsoft.rewrite.context.Context;
import org.ocpsoft.rewrite.context.EvaluationContext;
import org.ocpsoft.rewrite.event.Rewrite;
/**
* Base class for {@link Rule} implementations that operate on {@link GraphRewrite} events.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public abstract class GraphRule implements Rule, Context
{
private final Map<Object, Object> context = new HashMap<>();
/**
* Evaluate this rule against the given {@link GraphRewrite} event. If this condition does not apply to the given
* event, it must return <code>false</code>. If the condition applies and is satisfied, return <code>true</code>.
*/
public abstract boolean evaluate(GraphRewrite event, EvaluationContext context);
/**
* Perform the {@link Operation}.
*/
public abstract void perform(GraphRewrite event, EvaluationContext context);
@Override
public boolean containsKey(Object key)
{
return context.containsKey(key);
}
@Override
public void put(Object key, Object value)
{
context.put(key, value);
}
@Override
public Object get(Object key)
{
return context.get(key);
}
@Override
public void clear()
{
context.clear();
}
@Override
public final boolean evaluate(Rewrite event, EvaluationContext context)
{
if (event instanceof GraphRewrite)
return evaluate((GraphRewrite) event, context);
return false;
}
@Override
public final void perform(Rewrite event, EvaluationContext context)
{
if (event instanceof GraphRewrite)
perform((GraphRewrite) event, context);
}
}