1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository.metadata;
20
21 import org.apache.maven.artifact.versioning.ArtifactVersion;
22 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
23 import org.codehaus.plexus.component.annotations.Component;
24 import org.codehaus.plexus.component.annotations.Configuration;
25
26
27
28
29
30 @Component(role = GraphConflictResolutionPolicy.class)
31 public class DefaultGraphConflictResolutionPolicy implements GraphConflictResolutionPolicy {
32
33
34
35 @Configuration(name = "closer-first", value = "true")
36 private boolean closerFirst = true;
37
38
39
40
41 @Configuration(name = "newer-first", value = "true")
42 private boolean newerFirst = true;
43
44 public MetadataGraphEdge apply(MetadataGraphEdge e1, MetadataGraphEdge e2) {
45 int depth1 = e1.getDepth();
46 int depth2 = e2.getDepth();
47
48 if (depth1 == depth2) {
49 ArtifactVersion v1 = new DefaultArtifactVersion(e1.getVersion());
50 ArtifactVersion v2 = new DefaultArtifactVersion(e2.getVersion());
51
52 if (newerFirst) {
53 return v1.compareTo(v2) > 0 ? e1 : e2;
54 }
55
56 return v1.compareTo(v2) > 0 ? e2 : e1;
57 }
58
59 if (closerFirst) {
60 return depth1 < depth2 ? e1 : e2;
61 }
62
63 return depth1 < depth2 ? e2 : e1;
64 }
65 }