/*
* 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.ArrayList;
import java.util.List;
import java.util.logging.Logger;
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.jboss.windup.config.query.QueryGremlinCriterion;
import org.jboss.windup.config.query.QueryPropertyComparisonType;
import org.jboss.windup.rules.apps.java.model.JavaClassModel;
import org.jboss.windup.rules.apps.java.model.JavaMethodModel;
import org.jboss.windup.util.Logging;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.context.EvaluationContext;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.gremlin.java.GremlinPipeline;
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class TestJavaExampleRuleProvider extends AbstractRuleProvider
{
private static final Logger LOG = Logging.get(TestJavaExampleRuleProvider.class);
private final List<JavaMethodModel> results = new ArrayList<>();
public TestJavaExampleRuleProvider()
{
super(MetadataBuilder.forProvider(TestJavaExampleRuleProvider.class, "TestJavaExampleRuleProvider")
.setPhase(DiscoveryPhase.class));
}
// @formatter:off
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
QueryGremlinCriterion methodNameCriterion = new QueryGremlinCriterion()
{
@Override
public void query(GraphRewrite event, GremlinPipeline<Vertex, Vertex> pipeline)
{
pipeline.out("javaMethod").has("methodName", "toString");
}
};
Configuration configuration = ConfigurationBuilder
.begin()
.addRule()
/*
* Specify a set of conditions that must be met in order for the .perform() clause of this rule to
* be evaluated.
*/
.when(
/*
* Select all java classes with the FQCN matching "com.example.(.*)", store the
* resultant list in a parameter named "javaClasses"
*/
Query.fromType(JavaClassModel.class)
.withProperty("qualifiedName", QueryPropertyComparisonType.REGEX,
"com\\.example\\..*").as("javaClasses")
.and(
Query.from("javaClasses").piped(methodNameCriterion).as("javaMethods")
)
)
/*
* If all conditions of the .when() clause were satisfied, the following conditions will be
* evaluated
*/
.perform(
Iteration.over("javaMethods")
.perform(new AbstractIterationOperation<JavaMethodModel>()
{
@Override
public void perform(GraphRewrite event, EvaluationContext context, JavaMethodModel methodModel)
{
results.add(methodModel);
LOG.info("Overridden " + methodModel.getMethodName() + " Method in type: "
+ methodModel.getJavaClass().getQualifiedName());
}
})
.endIteration()
);
return configuration;
}
public List<JavaMethodModel> getResults()
{
return results;
}
}