package org.jboss.windup.reporting.config; import java.util.HashSet; import java.util.Set; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.operation.iteration.AbstractIterationFilter; import org.jboss.windup.graph.model.FileReferenceModel; import org.jboss.windup.graph.model.WindupVertexFrame; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.reporting.model.ClassificationModel; import org.jboss.windup.reporting.service.ClassificationService; import org.ocpsoft.rewrite.context.EvaluationContext; import org.ocpsoft.rewrite.param.ParameterStore; import org.ocpsoft.rewrite.param.Parameterized; import org.ocpsoft.rewrite.param.ParameterizedPatternResult; import org.ocpsoft.rewrite.param.RegexParameterizedPatternParser; /** * An implementation of {@link AbstractIterationFilter} to filter models based on the existence of a * {@link ClassificationModel} attached to the given payload. * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public class HasClassification extends AbstractIterationFilter<WindupVertexFrame> implements Parameterized { private RegexParameterizedPatternParser titlePattern; @Override public boolean evaluate(GraphRewrite event, EvaluationContext context, WindupVertexFrame payload) { boolean result = false; ClassificationService service = new ClassificationService(event.getGraphContext()); if (payload instanceof FileReferenceModel) { payload = ((FileReferenceModel) payload).getFile(); } if (payload instanceof FileModel) { Iterable<ClassificationModel> classifications = service.getClassifications((FileModel) payload); if (titlePattern == null) { result = classifications.iterator().hasNext(); } else { for (ClassificationModel c : classifications) { ParameterizedPatternResult parseResult = titlePattern.parse(c.getClassification()); if (parseResult.matches() && parseResult.isValid(event, context)) { result = true; break; } } } } return result; } /** * Get the pattern for which this filter should match. (May be <code>null</code>.) */ public String getTitlePattern() { if (titlePattern != null) return titlePattern.getPattern(); else return null; } /** * Set the pattern for which this filter should match. (May be <code>null</code>.) */ public void setTitlePattern(String titlePattern) { if (titlePattern != null) this.titlePattern = new RegexParameterizedPatternParser(titlePattern); } @Override public Set<String> getRequiredParameterNames() { Set<String> result = new HashSet<>(); if (titlePattern != null) result.addAll(titlePattern.getRequiredParameterNames()); return result; } @Override public void setParameterStore(ParameterStore store) { if (titlePattern != null) titlePattern.setParameterStore(store); } }