# HG changeset patch # Parent b123ba3b76cb89a5ccdc941bd079c99a910e8a85 # User skygo Display a R if relocated artifacts detected diff --git a/maven/src/org/netbeans/modules/maven/nodes/DependencyNode.java b/maven/src/org/netbeans/modules/maven/nodes/DependencyNode.java --- a/maven/src/org/netbeans/modules/maven/nodes/DependencyNode.java +++ b/maven/src/org/netbeans/modules/maven/nodes/DependencyNode.java @@ -61,6 +61,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Properties; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -81,6 +82,7 @@ import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Profile; +import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.FileUtils; import org.netbeans.api.annotations.common.CheckForNull; import org.netbeans.api.annotations.common.NonNull; @@ -156,6 +158,7 @@ private static final @StaticResource String TRANSITIVE_MAVEN_ICON = "org/netbeans/modules/maven/TransitiveMaven2Icon.png"; private Artifact art; + private boolean potentialRelocation; private NbMavenProjectImpl project; private boolean longLiving; private PropertyChangeListener listener; @@ -206,6 +209,37 @@ public DependencyNode(NbMavenProjectImpl project, Artifact art, FileObject fo, boolean isLongLiving) { this(project, art, fo, isLongLiving, createNodeDelegate(art, fo, isLongLiving)); } + + /** + * Return a string with applied maven properties. + */ + private static String applyProps(String string, MavenProject p) { + Properties props = p.getProperties(); + // add only the needed project properties + props.setProperty("project.groupId", p.getGroupId()); + props.setProperty("project.version", p.getVersion()); + // resolve properties + for (Object prop : props.keySet()) { + string = string.replaceAll("\\$\\{" + prop.toString() + "\\}", props.getProperty((String)prop)); + } + return string; + } + /** + * return true if artifact is relocated + */ + private static boolean checkRelocation(Artifact art, @NonNull MavenProject p) { + boolean tmp = true; + + for (Dependency dep : p.getOriginalModel().getDependencies()) { + if (art.getArtifactId().equals(applyProps(dep.getArtifactId(), p)) + && (art.getGroupId().equals(applyProps(dep.getGroupId(), p))) + && (art.getVersion().equals(applyProps(dep.getVersion(), p)))) { + // found one dep matching artifact it's not relocated + tmp = false; + } + } + return tmp; + } private DependencyNode( NbMavenProjectImpl project, @@ -216,6 +250,7 @@ super(createChildren(nodeDelegate), createLookup(project, art, nodeDelegate)); this.project = project; this.art = art; + this.potentialRelocation = checkRelocation(art, project.getOriginalMavenProject()); this.fileObject = new AtomicReference(fo); longLiving = isLongLiving; if (longLiving) { @@ -328,6 +363,9 @@ String[] id = trail.get(i).split(":"); // g:a:t[:c]:v buf.append("").append(DESC_via()).append(" ").append(id[1]).append("
"); } + if (potentialRelocation && !isTransitive()) { + buf.append("This artifact seems relocated. You may want to update pom."); + } // it seems that with ending tag the icon descriptions are not added. // buf.append("");//NOI18N return buf.toString(); @@ -365,6 +403,9 @@ sourceExists.set(getSourceFile().exists()); javadocExists.set(getJavadocFile().exists()); fileObject.set(fo); + if (project != null) { + checkRelocation(art, this.project.getOriginalMavenProject()); + } setDisplayName(createName(longLiving)); setIconBase(longLiving); fireIconChange(); @@ -395,6 +436,9 @@ if (!art.getArtifactHandler().isAddedToClasspath() && !Artifact.SCOPE_COMPILE.equals(art.getScope())) { n.append(" [").append(art.getScope()).append("]"); } + if (potentialRelocation && !isTransitive()) { + n.append("[R]"); + } n.append(""); return n.toString(); }