1 package org.apache.maven.shared.dependency.graph.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.List;
23
24 import org.apache.maven.artifact.Artifact;
25 import org.apache.maven.model.Exclusion;
26 import org.apache.maven.shared.dependency.graph.DependencyNode;
27
28 class VerboseDependencyNode
29 extends DefaultDependencyNode
30 {
31
32 private final ConflictData data;
33
34 VerboseDependencyNode( DependencyNode parent, Artifact artifact, String premanagedVersion,
35 String premanagedScope, String versionConstraint, Boolean optional,
36 List<Exclusion> exclusions, ConflictData data )
37 {
38 super( parent, artifact, premanagedVersion, premanagedScope, versionConstraint, optional, exclusions );
39
40 this.data = data;
41 }
42
43 @Override
44 public String toNodeString()
45 {
46 StringBuilder buffer = new StringBuilder();
47
48 boolean included = ( data.getWinnerVersion() == null );
49
50 if ( !included )
51 {
52 buffer.append( '(' );
53 }
54
55 buffer.append( getArtifact() );
56
57 ItemAppender appender = new ItemAppender( buffer, included ? " (" : " - ", "; ", included ? ")" : "" );
58
59 if ( getPremanagedVersion() != null )
60 {
61 appender.append( "version managed from ", getPremanagedVersion() );
62 }
63
64 if ( getPremanagedScope() != null )
65 {
66 appender.append( "scope managed from ", getPremanagedScope() );
67 }
68
69 if ( data.getOriginalScope() != null )
70 {
71 appender.append( "scope updated from ", data.getOriginalScope() );
72 }
73
74 if ( data.getIgnoredScope() != null )
75 {
76 appender.append( "scope not updated to ", data.getIgnoredScope() );
77 }
78
79
80
81
82
83
84
85 if ( !included )
86 {
87 String winnerVersion = data.getWinnerVersion();
88 if ( winnerVersion.equals( getArtifact().getVersion() ) )
89 {
90 appender.append( "omitted for duplicate" );
91 }
92 else
93 {
94 appender.append( "omitted for conflict with ", winnerVersion );
95 }
96 }
97
98 appender.flush();
99
100 if ( !included )
101 {
102 buffer.append( ')' );
103 }
104
105 return buffer.toString();
106 }
107
108
109
110
111 private static class ItemAppender
112 {
113 private StringBuilder buffer;
114
115 private String startToken;
116
117 private String separatorToken;
118
119 private String endToken;
120
121 private boolean appended;
122
123 ItemAppender( StringBuilder buffer, String startToken, String separatorToken, String endToken )
124 {
125 this.buffer = buffer;
126 this.startToken = startToken;
127 this.separatorToken = separatorToken;
128 this.endToken = endToken;
129
130 appended = false;
131 }
132
133 public ItemAppender append( String item1 )
134 {
135 appendToken();
136
137 buffer.append( item1 );
138
139 return this;
140 }
141
142 public ItemAppender append( String item1, String item2 )
143 {
144 appendToken();
145
146 buffer.append( item1 ).append( item2 );
147
148 return this;
149 }
150
151 public void flush()
152 {
153 if ( appended )
154 {
155 buffer.append( endToken );
156
157 appended = false;
158 }
159 }
160
161 private void appendToken()
162 {
163 buffer.append( appended ? separatorToken : startToken );
164
165 appended = true;
166 }
167 }
168 }