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.ArrayList;
23 import java.util.EnumSet;
24 import java.util.List;
25 import java.util.Set;
26
27 import org.apache.maven.model.InputLocation;
28 import org.apache.maven.model.Model;
29 import org.apache.maven.model.building.ModelProblem.Severity;
30 import org.apache.maven.model.io.ModelParseException;
31
32
33
34
35
36
37
38
39
40
41 class DefaultModelProblemCollector
42 implements ModelProblemCollector
43 {
44
45 private List<ModelProblem> problems;
46
47 private String source;
48
49 private Model sourceModel;
50
51 private Model rootModel;
52
53 private Set<ModelProblem.Severity> severities = EnumSet.noneOf( ModelProblem.Severity.class );
54
55 public DefaultModelProblemCollector( List<ModelProblem> problems )
56 {
57 this.problems = ( problems != null ) ? problems : new ArrayList<ModelProblem>();
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( Severity severity, String message, InputLocation location, Exception cause )
144 {
145 int line = -1;
146 int column = -1;
147 String source = null;
148 String modelId = null;
149
150 if ( location != null )
151 {
152 line = location.getLineNumber();
153 column = location.getColumnNumber();
154 if ( location.getSource() != null )
155 {
156 modelId = location.getSource().getModelId();
157 source = location.getSource().getLocation();
158 }
159 }
160
161 if ( modelId == null )
162 {
163 modelId = getModelId();
164 source = getSource();
165 }
166
167 if ( line <= 0 && column <= 0 && cause instanceof ModelParseException )
168 {
169 ModelParseException e = (ModelParseException) cause;
170 line = e.getLineNumber();
171 column = e.getColumnNumber();
172 }
173
174 ModelProblem problem = new DefaultModelProblem( message, severity, source, line, column, modelId, cause );
175
176 add( problem );
177 }
178
179 }