001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *   http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied.  See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019package org.apache.maven.tools.plugin;
020
021import java.net.URI;
022import java.util.HashSet;
023import java.util.List;
024import java.util.Set;
025
026import org.apache.maven.artifact.Artifact;
027import org.apache.maven.artifact.repository.ArtifactRepository;
028import org.apache.maven.plugin.descriptor.PluginDescriptor;
029import org.apache.maven.project.MavenProject;
030import org.apache.maven.settings.Settings;
031import org.codehaus.plexus.util.ReaderFactory;
032import org.codehaus.plexus.util.StringUtils;
033
034/**
035 * Default implementation of {@link PluginToolsRequest}, which is used to pass parameters to components used to extract
036 * {@link org.apache.maven.plugin.descriptor.MojoDescriptor MojoDescriptor} instances from different types of metadata
037 * for a given plugin.
038 *
039 * @author jdcasey
040 * @since 2.5
041 */
042public class DefaultPluginToolsRequest implements PluginToolsRequest {
043
044    private static final String DEFAULT_ENCODING = ReaderFactory.FILE_ENCODING;
045
046    private PluginDescriptor pluginDescriptor;
047
048    private MavenProject project;
049
050    private String encoding = DEFAULT_ENCODING;
051
052    private boolean skipErrorNoDescriptorsFound;
053
054    private Set<Artifact> dependencies;
055
056    private List<ArtifactRepository> remoteRepos;
057
058    private ArtifactRepository local;
059
060    private URI internalJavadocBaseUrl;
061
062    private String internalJavadocVersion;
063
064    private List<URI> externalJavadocBaseUrls;
065
066    private Settings settings;
067
068    private String requiredJavaVersion;
069
070    private String mavenApiVersion;
071
072    public DefaultPluginToolsRequest(MavenProject project, PluginDescriptor pluginDescriptor) {
073        this.project = project;
074        this.pluginDescriptor = pluginDescriptor;
075    }
076
077    /**
078     * {@inheritDoc}
079     */
080    @Override
081    public PluginDescriptor getPluginDescriptor() {
082        return pluginDescriptor;
083    }
084
085    /**
086     * {@inheritDoc}
087     */
088    @Override
089    public PluginToolsRequest setPluginDescriptor(PluginDescriptor pluginDescriptor) {
090        this.pluginDescriptor = pluginDescriptor;
091        return this;
092    }
093
094    /**
095     * {@inheritDoc}
096     */
097    @Override
098    public MavenProject getProject() {
099        return project;
100    }
101
102    /**
103     * {@inheritDoc}
104     */
105    @Override
106    public PluginToolsRequest setProject(MavenProject project) {
107        this.project = project;
108        return this;
109    }
110
111    /**
112     * {@inheritDoc}
113     */
114    @Override
115    public String getEncoding() {
116        return this.encoding;
117    }
118
119    /**
120     * {@inheritDoc}
121     */
122    @Override
123    public PluginToolsRequest setEncoding(String encoding) {
124        if (StringUtils.isNotEmpty(encoding)) {
125            this.encoding = encoding;
126        } else {
127            this.encoding = DEFAULT_ENCODING;
128        }
129
130        return this;
131    }
132
133    /**
134     * {@inheritDoc}
135     */
136    @Override
137    public boolean isSkipErrorNoDescriptorsFound() {
138        return skipErrorNoDescriptorsFound;
139    }
140
141    /**
142     * {@inheritDoc}
143     */
144    @Override
145    public PluginToolsRequest setSkipErrorNoDescriptorsFound(boolean skipErrorNoDescriptorsFound) {
146        this.skipErrorNoDescriptorsFound = skipErrorNoDescriptorsFound;
147        return this;
148    }
149
150    @Override
151    public Set<Artifact> getDependencies() {
152        if (this.dependencies == null) {
153            this.dependencies = new HashSet<>();
154        }
155        return dependencies;
156    }
157
158    @Override
159    public PluginToolsRequest setDependencies(Set<Artifact> dependencies) {
160        this.dependencies = dependencies;
161        return this;
162    }
163
164    @Override
165    public List<ArtifactRepository> getRemoteRepos() {
166        return remoteRepos;
167    }
168
169    @Override
170    public PluginToolsRequest setRemoteRepos(List<ArtifactRepository> remoteRepos) {
171        this.remoteRepos = remoteRepos;
172        return this;
173    }
174
175    @Override
176    public ArtifactRepository getLocal() {
177        return local;
178    }
179
180    @Override
181    public PluginToolsRequest setLocal(ArtifactRepository local) {
182        this.local = local;
183        return this;
184    }
185
186    @Override
187    public PluginToolsRequest setInternalJavadocBaseUrl(URI baseUrl) {
188        internalJavadocBaseUrl = baseUrl;
189        return this;
190    }
191
192    @Override
193    public URI getInternalJavadocBaseUrl() {
194        return internalJavadocBaseUrl;
195    }
196
197    @Override
198    public PluginToolsRequest setInternalJavadocVersion(String javadocVersion) {
199        this.internalJavadocVersion = javadocVersion;
200        return this;
201    }
202
203    @Override
204    public String getInternalJavadocVersion() {
205        return internalJavadocVersion;
206    }
207
208    @Override
209    public PluginToolsRequest setExternalJavadocBaseUrls(List<URI> javadocLinks) {
210        this.externalJavadocBaseUrls = javadocLinks;
211        return this;
212    }
213
214    @Override
215    public List<URI> getExternalJavadocBaseUrls() {
216        return externalJavadocBaseUrls;
217    }
218
219    @Override
220    public PluginToolsRequest setSettings(Settings settings) {
221        this.settings = settings;
222        return this;
223    }
224
225    @Override
226    public Settings getSettings() {
227        return settings;
228    }
229
230    @Override
231    public PluginToolsRequest setRequiredJavaVersion(String requiredJavaVersion) {
232        this.requiredJavaVersion = requiredJavaVersion;
233        return this;
234    }
235
236    @Override
237    public String getRequiredJavaVersion() {
238        return requiredJavaVersion;
239    }
240
241    @Override
242    public PluginToolsRequest setUsedMavenApiVersion(String mavenApiVersion) {
243        this.mavenApiVersion = mavenApiVersion;
244        return this;
245    }
246
247    @Override
248    public String getUsedMavenApiVersion() {
249        return mavenApiVersion;
250    }
251}