1 package org.apache.maven.model.building;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.EnumSet;
23 import java.util.List;
24 import java.util.Set;
25
26 import org.apache.maven.model.Model;
27 import org.apache.maven.model.io.ModelParseException;
28
29
30
31
32
33
34
35
36
37
38 class DefaultModelProblemCollector
39 implements ModelProblemCollectorExt
40 {
41
42 private final ModelBuildingResult result;
43
44 private List<ModelProblem> problems;
45
46 private String source;
47
48 private Model sourceModel;
49
50 private Model rootModel;
51
52 private Set<ModelProblem.Severity> severities = EnumSet.noneOf( ModelProblem.Severity.class );
53
54 public DefaultModelProblemCollector( ModelBuildingResult result )
55 {
56 this.result = result;
57 this.problems = result.getProblems();
58
59 for ( ModelProblem problem : this.problems )
60 {
61 severities.add( problem.getSeverity() );
62 }
63 }
64
65 public boolean hasFatalErrors()
66 {
67 return severities.contains( ModelProblem.Severity.FATAL );
68 }
69
70 public boolean hasErrors()
71 {
72 return severities.contains( ModelProblem.Severity.ERROR ) || severities.contains( ModelProblem.Severity.FATAL );
73 }
74
75 public List<ModelProblem> getProblems()
76 {
77 return problems;
78 }
79
80 public void setSource( String source )
81 {
82 this.source = source;
83 this.sourceModel = null;
84 }
85
86 public void setSource( Model source )
87 {
88 this.sourceModel = source;
89 this.source = null;
90
91 if ( rootModel == null )
92 {
93 rootModel = source;
94 }
95 }
96
97 private String getSource()
98 {
99 if ( source == null && sourceModel != null )
100 {
101 source = ModelProblemUtils.toPath( sourceModel );
102 }
103 return source;
104 }
105
106 private String getModelId()
107 {
108 return ModelProblemUtils.toId( sourceModel );
109 }
110
111 public void setRootModel( Model rootModel )
112 {
113 this.rootModel = rootModel;
114 }
115
116 public Model getRootModel()
117 {
118 return rootModel;
119 }
120
121 public String getRootModelId()
122 {
123 return ModelProblemUtils.toId( rootModel );
124 }
125
126 public void add( ModelProblem problem )
127 {
128 problems.add( problem );
129
130 severities.add( problem.getSeverity() );
131 }
132
133 public void addAll( List<ModelProblem> problems )
134 {
135 this.problems.addAll( problems );
136
137 for ( ModelProblem problem : problems )
138 {
139 severities.add( problem.getSeverity() );
140 }
141 }
142
143 public void add( ModelProblemCollectorRequest req )
144 {
145 int line = -1;
146 int column = -1;
147 String source = null;
148 String modelId = null;
149
150 if ( req.getLocation() != null )
151 {
152 line = req.getLocation().getLineNumber();
153 column = req.getLocation().getColumnNumber();
154 if ( req.getLocation().getSource() != null )
155 {
156 modelId = req.getLocation().getSource().getModelId();
157 source = req.getLocation().getSource().getLocation();
158 }
159 }
160
161 if ( modelId == null )
162 {
163 modelId = getModelId();
164 source = getSource();
165 }
166
167 if ( line <= 0 && column <= 0 && req.getException() instanceof ModelParseException )
168 {
169 ModelParseException e = (ModelParseException) req.getException();
170 line = e.getLineNumber();
171 column = e.getColumnNumber();
172 }
173
174 ModelProblem problem =
175 new DefaultModelProblem( req.getMessage(), req.getSeverity(), req.getVersion(), source, line, column,
176 modelId, req.getException() );
177
178 add( problem );
179 }
180
181 public ModelBuildingException newModelBuildingException()
182 {
183 ModelBuildingResult result = this.result;
184 if ( result.getModelIds().isEmpty() )
185 {
186 DefaultModelBuildingResult tmp = new DefaultModelBuildingResult();
187 tmp.setEffectiveModel( result.getEffectiveModel() );
188 tmp.setProblems( getProblems() );
189 tmp.setActiveExternalProfiles( result.getActiveExternalProfiles() );
190 String id = getRootModelId();
191 tmp.addModelId( id );
192 tmp.setRawModel( id, getRootModel() );
193 result = tmp;
194 }
195 return new ModelBuildingException( result );
196 }
197
198 }