View Javadoc
1   package org.apache.maven.model.building;
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.io.File;
23  
24  import org.apache.maven.model.Model;
25  
26  /**
27   * Assists in the handling of model problems.
28   *
29   * @author Benjamin Bentmann
30   */
31  public class ModelProblemUtils
32  {
33  
34      /**
35       * Creates a user-friendly source hint for the specified model.
36       *
37       * @param model The model to create a source hint for, may be {@code null}.
38       * @return The user-friendly source hint, never {@code null}.
39       */
40      static String toSourceHint( Model model )
41      {
42          if ( model == null )
43          {
44              return "";
45          }
46  
47          StringBuilder buffer = new StringBuilder( 192 );
48  
49          buffer.append( toId( model ) );
50  
51          File pomFile = model.getPomFile();
52          if ( pomFile != null )
53          {
54              buffer.append( " (" ).append( pomFile ).append( ")" );
55          }
56  
57          return buffer.toString();
58      }
59  
60      static String toPath( Model model )
61      {
62          String path = "";
63  
64          if ( model != null )
65          {
66              File pomFile = model.getPomFile();
67  
68              if ( pomFile != null )
69              {
70                  path = pomFile.getAbsolutePath();
71              }
72          }
73  
74          return path;
75      }
76  
77      static String toId( Model model )
78      {
79          if ( model == null )
80          {
81              return "";
82          }
83  
84          String groupId = model.getGroupId();
85          if ( groupId == null && model.getParent() != null )
86          {
87              groupId = model.getParent().getGroupId();
88          }
89  
90          String artifactId = model.getArtifactId();
91  
92          String version = model.getVersion();
93          if ( version == null )
94          {
95              version = "[unknown-version]";
96          }
97  
98          return toId( groupId, artifactId, version );
99      }
100 
101     /**
102      * Creates a user-friendly artifact id from the specified coordinates.
103      *
104      * @param groupId The group id, may be {@code null}.
105      * @param artifactId The artifact id, may be {@code null}.
106      * @param version The version, may be {@code null}.
107      * @return The user-friendly artifact id, never {@code null}.
108      */
109     static String toId( String groupId, String artifactId, String version )
110     {
111         StringBuilder buffer = new StringBuilder( 96 );
112 
113         buffer.append( ( groupId != null && groupId.length() > 0 ) ? groupId : "[unknown-group-id]" );
114         buffer.append( ':' );
115         buffer.append( ( artifactId != null && artifactId.length() > 0 ) ? artifactId : "[unknown-artifact-id]" );
116         buffer.append( ':' );
117         buffer.append( ( version != null && version.length() > 0 ) ? version : "[unknown-version]" );
118 
119         return buffer.toString();
120     }
121 
122     /**
123      * Creates a string with all location details for the specified model problem. If the project identifier is
124      * provided, the generated location will omit the model id and source information and only give line/column
125      * information for problems originating directly from this POM.
126      *
127      * @param problem The problem whose location should be formatted, must not be {@code null}.
128      * @param projectId The {@code <groupId>:<artifactId>:<version>} of the corresponding project, may be {@code null}
129      *            to force output of model id and source.
130      * @return The formatted problem location or an empty string if unknown, never {@code null}.
131      */
132     public static String formatLocation( ModelProblem problem, String projectId )
133     {
134         StringBuilder buffer = new StringBuilder( 256 );
135 
136         if ( !problem.getModelId().equals( projectId ) )
137         {
138             buffer.append( problem.getModelId() );
139 
140             if ( problem.getSource().length() > 0 )
141             {
142                 if ( buffer.length() > 0 )
143                 {
144                     buffer.append( ", " );
145                 }
146                 buffer.append( problem.getSource() );
147             }
148         }
149 
150         if ( problem.getLineNumber() > 0 )
151         {
152             if ( buffer.length() > 0 )
153             {
154                 buffer.append( ", " );
155             }
156             buffer.append( "line " ).append( problem.getLineNumber() );
157         }
158 
159         if ( problem.getColumnNumber() > 0 )
160         {
161             if ( buffer.length() > 0 )
162             {
163                 buffer.append( ", " );
164             }
165             buffer.append( "column " ).append( problem.getColumnNumber() );
166         }
167 
168         return buffer.toString();
169     }
170 
171 }