View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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   * @author Edwin Punzalan
51   * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
52   * @author Nick Stolwijk
53   * @version $Id$
54   */
55  public abstract class ProjectInfoProjectStub extends MavenProjectStub {
56      private Model model;
57  
58      private Build build;
59  
60      /**
61       * Default constructor
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      * @return the POM file name
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 }