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 org.apache.maven.model.Model;
23
24 /**
25 * Describes a problem that was encountered during model building. A problem can either be an exception that was thrown
26 * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that exhibits
27 * the problem.
28 *
29 * @author Benjamin Bentmann
30 */
31 public class DefaultModelProblem
32 implements ModelProblem
33 {
34
35 private final String source;
36
37 private final int lineNumber;
38
39 private final int columnNumber;
40
41 private final String modelId;
42
43 private final String message;
44
45 private final Exception exception;
46
47 private final Severity severity;
48
49 private final Version version;
50
51
52 /**
53 * Creates a new problem with the specified message and exception.
54 *
55 * @param message The message describing the problem, may be {@code null}.
56 * @param severity The severity level of the problem, may be {@code null} to default to
57 * {@link ModelProblem.Severity#ERROR}.
58 * @param source The source of the problem, may be {@code null}.
59 * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
60 * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
61 * @param exception The exception that caused this problem, may be {@code null}.
62 */
63 //mkleint: does this need to be public?
64 public DefaultModelProblem( String message, Severity severity, Version version, Model source, int lineNumber,
65 int columnNumber, Exception exception )
66 {
67 this( message, severity, version, ModelProblemUtils.toPath( source ), lineNumber, columnNumber,
68 ModelProblemUtils.toId( source ), exception );
69 }
70
71 /**
72 * Creates a new problem with the specified message and exception.
73 *
74 * @param message The message describing the problem, may be {@code null}.
75 * @param severity The severity level of the problem, may be {@code null} to default to
76 * {@link ModelProblem.Severity#ERROR}.
77 * @param version The version since the problem is relevant
78 * @param source A hint about the source of the problem like a file path, may be {@code null}.
79 * @param lineNumber The one-based index of the line containing the problem or {@code -1} if unknown.
80 * @param columnNumber The one-based index of the column containing the problem or {@code -1} if unknown.
81 * @param modelId The identifier of the model that exhibits the problem, may be {@code null}.
82 * @param exception The exception that caused this problem, may be {@code null}.
83 */
84 //mkleint: does this need to be public?
85 @SuppressWarnings( "checkstyle:parameternumber" )
86 public DefaultModelProblem( String message, Severity severity, Version version, String source, int lineNumber,
87 int columnNumber, String modelId, Exception exception )
88 {
89 this.message = message;
90 this.severity = ( severity != null ) ? severity : Severity.ERROR;
91 this.source = ( source != null ) ? source : "";
92 this.lineNumber = lineNumber;
93 this.columnNumber = columnNumber;
94 this.modelId = ( modelId != null ) ? modelId : "";
95 this.exception = exception;
96 this.version = version;
97 }
98
99 @Override
100 public String getSource()
101 {
102 return source;
103 }
104
105 @Override
106 public int getLineNumber()
107 {
108 return lineNumber;
109 }
110
111 @Override
112 public int getColumnNumber()
113 {
114 return columnNumber;
115 }
116
117 @Override
118 public String getModelId()
119 {
120 return modelId;
121 }
122
123 @Override
124 public Exception getException()
125 {
126 return exception;
127 }
128
129 @Override
130 public String getMessage()
131 {
132 String msg;
133
134 if ( message != null && message.length() > 0 )
135 {
136 msg = message;
137 }
138 else
139 {
140 msg = exception.getMessage();
141
142 if ( msg == null )
143 {
144 msg = "";
145 }
146 }
147
148 return msg;
149 }
150
151 @Override
152 public Severity getSeverity()
153 {
154 return severity;
155 }
156
157 @Override
158 public Version getVersion()
159 {
160 return version;
161 }
162
163
164 @Override
165 public String toString()
166 {
167 StringBuilder buffer = new StringBuilder( 128 );
168
169 buffer.append( '[' ).append( getSeverity() ).append( "] " );
170 buffer.append( getMessage() );
171 buffer.append( " @ " ).append( ModelProblemUtils.formatLocation( this, null ) );
172
173 return buffer.toString();
174 }
175
176 }