package org.jboss.windup.reporting.rules;
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.iteration.AbstractIterationOperation;
import org.jboss.windup.config.phase.PostReportGenerationPhase;
import org.jboss.windup.config.query.Query;
import org.jboss.windup.graph.model.ProjectModel;
import org.jboss.windup.reporting.model.ApplicationReportIndexModel;
import org.jboss.windup.reporting.model.ApplicationReportModel;
import org.jboss.windup.reporting.service.ApplicationReportIndexService;
import org.ocpsoft.rewrite.config.ConditionBuilder;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.context.EvaluationContext;
/**
* Attaches {@link ApplicationReportModel}s to the {@link ApplicationReportIndexModel}
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
@RuleMetadata(phase = PostReportGenerationPhase.class)
public class AttachApplicationReportsToIndexRuleProvider extends AbstractRuleProvider
{
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
ConditionBuilder applicationReportFound = Query.fromType(ApplicationReportModel.class);
AbstractIterationOperation<ApplicationReportModel> addToApplicationIndex = new AddToApplicationIndex();
return ConfigurationBuilder.begin()
.addRule()
.when(applicationReportFound)
.perform(addToApplicationIndex);
}
private class AddToApplicationIndex extends AbstractIterationOperation<ApplicationReportModel>
{
@Override
public void perform(GraphRewrite event, EvaluationContext context, ApplicationReportModel payload)
{
final ApplicationReportIndexService applicationReportIndexService = new ApplicationReportIndexService(event.getGraphContext());
final ProjectModel projectModel = payload.getProjectModel();
if (projectModel == null || Boolean.TRUE == payload.getDisplayInGlobalApplicationIndex())
{
ApplicationReportIndexModel index = applicationReportIndexService.getOrCreateGlobalApplicationIndex();
index.addApplicationReportModel(payload);
}
if (projectModel != null)
{
ApplicationReportIndexModel index = applicationReportIndexService
.getApplicationReportIndexForProjectModel(payload.getProjectModel());
index.addApplicationReportModel(payload);
}
}
@Override
public String toString()
{
return "AddToApplicationIndex";
}
}
}