package org.scribble.visit.wf.env;
import java.util.Arrays;
import java.util.List;
import org.scribble.visit.env.Env;
public class ExplicitCorrelationEnv extends Env<ExplicitCorrelationEnv>
{
private boolean canAccept;
public ExplicitCorrelationEnv()
{
this.canAccept = true;
}
protected ExplicitCorrelationEnv(boolean canAccept)
{
this.canAccept = canAccept;
}
@Override
protected ExplicitCorrelationEnv copy()
{
return new ExplicitCorrelationEnv(this.canAccept);
}
@Override
public ExplicitCorrelationEnv enterContext()
{
return copy();
}
@Override
public ExplicitCorrelationEnv mergeContext(ExplicitCorrelationEnv env)
{
return mergeContexts(Arrays.asList(env));
}
@Override
public ExplicitCorrelationEnv mergeContexts(List<ExplicitCorrelationEnv> envs)
{
ExplicitCorrelationEnv copy = copy();
if (copy.canAccept)
{
copy.canAccept = !envs.stream().anyMatch((e) -> !e.canAccept);
}
return copy;
}
public boolean canAccept()
{
return this.canAccept;
}
public ExplicitCorrelationEnv disableAccept()
{
if (!this.canAccept)
{
return this;
}
ExplicitCorrelationEnv copy = copy();
copy.canAccept = false;
return copy;
}
@Override
public String toString()
{
return super.toString() + ": " + this.canAccept;
}
}