001 package org.kuali.maven.plugins.graph.sanitize; 002 003 import java.util.Map; 004 005 import org.apache.maven.artifact.Artifact; 006 import org.kuali.maven.plugins.graph.pojo.MavenContext; 007 import org.kuali.maven.plugins.graph.pojo.State; 008 import org.kuali.maven.plugins.graph.tree.TreeHelper; 009 import org.slf4j.Logger; 010 import org.slf4j.LoggerFactory; 011 012 public class ConflictSanitizer extends MavenContextSanitizer { 013 private static final Logger logger = LoggerFactory.getLogger(ConflictSanitizer.class); 014 015 public ConflictSanitizer() { 016 this(null); 017 } 018 019 public ConflictSanitizer(Map<String, MavenContext> included) { 020 super(included, State.CONFLICT); 021 } 022 023 @Override 024 protected void sanitize(MavenContext context, Map<String, MavenContext> included) { 025 String artifactId = TreeHelper.getArtifactId(context.getDependencyNode().getArtifact()); 026 MavenContext replacement = included.get(artifactId); 027 028 // This is ok. Kind of. Maven has marked it as a conflict, but it should be duplicate 029 if (replacement != null) { 030 // Emit an "info" level log message and switch to DUPLICATE 031 State switchTo = State.DUPLICATE; 032 logger.info(getSwitchMessage(artifactId, switchTo)); 033 logger.info("Identical replacement for a 'conflict' artifact"); 034 context.setState(switchTo); 035 return; 036 } 037 038 // Conflict with no related artifact is not ok 039 Artifact related = context.getDependencyNode().getRelatedArtifact(); 040 if (related == null) { 041 warnAndSwitch(State.UNKNOWN, artifactId, context, "No related artifact"); 042 return; 043 } 044 045 // Examine the related artifact 046 String relatedArtifactId = TreeHelper.getArtifactId(related); 047 replacement = included.get(relatedArtifactId); 048 if (replacement != null) { 049 // This is ok. We located the replacement 050 logger.debug(artifactId + " meets conflict node criteria."); 051 return; 052 } else { 053 // This is not ok. The related artifact is not in the included list 054 warnAndSwitch(State.UNKNOWN, artifactId, context, "No conflict replacement was found"); 055 return; 056 } 057 } 058 059 }