View Javadoc
1   package org.apache.maven.shared.dependency.graph.internal;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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  //        if ( getVersionSelectedFromRange() != null )
80  //        {
81  //            appender.append( "version selected from range ", getVersionSelectedFromRange().toString() );
82  //            appender.append( "available versions ", getAvailableVersions().toString() );
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      * Utility class to concatenate a number of parameters with separator tokens.
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 }