package org.jboss.windup.rules.apps.mavenize;
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.RuleMetadata;
import org.jboss.windup.config.operation.GraphOperation;
import org.jboss.windup.config.phase.InitializationPhase;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.context.EvaluationContext;
/**
* To actually get the queriable data about certain classes into the graph,
* they need to be registered in {@TypeInterestFactory}.
*
* This rule does that registration for all packages as provided by the source
* (currently static; TODO: Take the data from WINDUP-984 - Lucene index created by nexus-repository-indexer.)
*
* @author <a href="http://ondra.zizka.cz/">Ondrej Zizka, zizka@seznam.cz</a>
*/
@RuleMetadata(phase = InitializationPhase.class)
public class RegisterApiPackagesInTypeInterestFactoryRuleProvider extends AbstractRuleProvider
{
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
// @formatter:off
return ConfigurationBuilder.begin()
.addRule().perform(new GraphOperation()
{
public void perform(GraphRewrite event, EvaluationContext context)
{
final PackagesToContainingMavenArtifactsIndex packageIndex = new PackagesToContainingMavenArtifactsIndex(event.getGraphContext());
for (MavenCoord apiCoords : ApiDependenciesData.API_ARTIFACTS) // TODO: Get this form the index.
{
packageIndex.registerPackagesFromAPI(apiCoords);
}
}
}).addRule().perform(new GraphOperation()
{
public void perform(GraphRewrite event, EvaluationContext context)
{
final PackagesToContainingMavenArtifactsIndex packageIndex = new PackagesToContainingMavenArtifactsIndex(event.getGraphContext());
for (MavenCoord apiCoords : ApiDependenciesData.API_ARTIFACTS)
{
packageIndex.markProjectsUsingPackagesFromAPI(apiCoords);
}
}
});
// @formatter:on
}
}