package org.jboss.windup.config.selectables;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.jboss.windup.config.AbstractRuleProvider;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.loader.RuleLoaderContext;
import org.jboss.windup.config.metadata.MetadataBuilder;
import org.jboss.windup.config.operation.Iteration;
import org.jboss.windup.config.operation.iteration.AbstractIterationOperation;
import org.jboss.windup.config.phase.DiscoveryPhase;
import org.jboss.windup.config.query.Query;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.context.EvaluationContext;
public class TestIterationPayloadTestRuleProvider extends AbstractRuleProvider
{
public TestIterationPayloadTestRuleProvider()
{
super(MetadataBuilder.forProvider(TestIterationPayloadTestRuleProvider.class)
.setPhase(DiscoveryPhase.class));
}
private Set<TestParentModel> parents = new HashSet<>();
private Set<TestChildModel> children = new HashSet<>();
private List<TestParentModel> allParents = new ArrayList<>();
private List<TestChildModel> allChildren = new ArrayList<>();
public int getChildCount()
{
return children.size();
}
public int getParentCount()
{
return parents.size();
}
public int getActualChildCount()
{
return allChildren.size();
}
public int getActualParentCount()
{
return allParents.size();
}
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
return ConfigurationBuilder
.begin()
.addRule()
.when(Query.fromType(TestChildModel.class).as("children"))
.perform(Iteration
.over("children")
.as("child")
.perform(new AbstractIterationOperation<TestParentModel>("#{child.parent}")
{
@Override
public void perform(GraphRewrite event, EvaluationContext context,
TestParentModel payload)
{
parents.add(payload);
allParents.add(payload);
TestChildModel child = (TestChildModel) resolveVariable(event, "child");
children.add(child);
allChildren.add(child);
}
}).endIteration());
}
}