1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.report.projectinfo.stubs;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.io.Reader;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.List;
27 import java.util.Objects;
28 import java.util.Set;
29
30 import org.apache.maven.RepositoryUtils;
31 import org.apache.maven.artifact.Artifact;
32 import org.apache.maven.artifact.DefaultArtifact;
33 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
34 import org.apache.maven.artifact.repository.ArtifactRepository;
35 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
36 import org.apache.maven.artifact.repository.MavenArtifactRepository;
37 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
38 import org.apache.maven.artifact.versioning.VersionRange;
39 import org.apache.maven.model.Build;
40 import org.apache.maven.model.DependencyManagement;
41 import org.apache.maven.model.Model;
42 import org.apache.maven.model.PluginManagement;
43 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
44 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
45 import org.codehaus.plexus.util.ReaderFactory;
46 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
47 import org.eclipse.aether.repository.RemoteRepository;
48
49
50
51
52
53
54
55 public abstract class ProjectInfoProjectStub extends MavenProjectStub {
56 private Model model;
57
58 private Build build;
59
60
61
62
63 public ProjectInfoProjectStub() {
64 MavenXpp3Reader pomReader = new MavenXpp3Reader();
65 try (Reader reader = ReaderFactory.newXmlReader(new File(getBasedir(), getPOM()))) {
66 model = pomReader.read(reader);
67 setModel(model);
68 } catch (IOException | XmlPullParserException e) {
69 throw new RuntimeException(e);
70 }
71
72 setGroupId(model.getGroupId());
73 setArtifactId(model.getArtifactId());
74 setVersion(model.getVersion());
75 setName(model.getName());
76 setUrl(model.getUrl());
77 setPackaging(model.getPackaging());
78
79 String type = Objects.toString(super.getPackaging(), "jar");
80 Artifact artifact = new ProjectInfoPluginArtifactStub(getGroupId(), getArtifactId(), getVersion(), type, type);
81 artifact.setArtifactHandler(new DefaultArtifactHandlerStub());
82 setArtifact(artifact);
83
84 Build build = new Build();
85 build.setFinalName(model.getArtifactId());
86 build.setDirectory(super.getBasedir() + "/target/test/unit/" + model.getArtifactId() + "/target");
87 build.setSourceDirectory(getBasedir() + "/src/main/java");
88 build.setOutputDirectory(super.getBasedir() + "/target/test/unit/" + model.getArtifactId() + "/target/classes");
89 build.setTestSourceDirectory(getBasedir() + "/src/test/java");
90 build.setTestOutputDirectory(
91 super.getBasedir() + "/target/test/unit/" + model.getArtifactId() + "/target/test-classes");
92 setBuild(build);
93
94 List<String> compileSourceRoots = new ArrayList<>();
95 compileSourceRoots.add(getBasedir() + "/src/main/java");
96 setCompileSourceRoots(compileSourceRoots);
97
98 List<String> testCompileSourceRoots = new ArrayList<>();
99 testCompileSourceRoots.add(getBasedir() + "/src/test/java");
100 setTestCompileSourceRoots(testCompileSourceRoots);
101 }
102
103
104
105
106 protected abstract String getPOM();
107
108 @Override
109 public Model getModel() {
110 return model;
111 }
112
113 @Override
114 public Build getBuild() {
115 return build;
116 }
117
118 @Override
119 public void setBuild(Build build) {
120 this.build = build;
121 }
122
123 @Override
124 public File getBasedir() {
125 return new File(super.getBasedir() + "/src/test/resources/plugin-configs/");
126 }
127
128 @Override
129 public File getFile() {
130 return new File(getBasedir(), getPOM());
131 }
132
133 @Override
134 public Set<Artifact> getArtifacts() {
135 return Collections.emptySet();
136 }
137
138 @Override
139 public List<ArtifactRepository> getRemoteArtifactRepositories() {
140 ArtifactRepository repository = new MavenArtifactRepository(
141 "central",
142 "https://repo1.maven.org/maven2",
143 new DefaultRepositoryLayout(),
144 new ArtifactRepositoryPolicy(),
145 new ArtifactRepositoryPolicy());
146
147 return Collections.singletonList(repository);
148 }
149
150 @Override
151 public List<RemoteRepository> getRemoteProjectRepositories() {
152 return RepositoryUtils.toRepos(getRemoteArtifactRepositories());
153 }
154
155 @Override
156 public Set<Artifact> getDependencyArtifacts() {
157 Artifact artifact = new DefaultArtifact(
158 "junit",
159 "junit",
160 VersionRange.createFromVersion("3.8.1"),
161 Artifact.SCOPE_TEST,
162 "jar",
163 null,
164 new DefaultArtifactHandler("jar"),
165 false);
166 return Collections.singleton(artifact);
167 }
168
169 @Override
170 public DependencyManagement getDependencyManagement() {
171 return model.getDependencyManagement();
172 }
173
174 @Override
175 public PluginManagement getPluginManagement() {
176 PluginManagement pluginMgmt = null;
177
178 Build build = model.getBuild();
179 if (build != null) {
180 pluginMgmt = build.getPluginManagement();
181 }
182
183 return pluginMgmt;
184 }
185 }