blob: 34483be0de67a22de8bcff568a8f6d10df3e6b90 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.maven.api.services;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import org.apache.maven.api.ArtifactCoordinate;
import org.apache.maven.api.Dependency;
import org.apache.maven.api.Exclusion;
import org.apache.maven.api.Session;
import org.apache.maven.api.annotations.Experimental;
import org.apache.maven.api.annotations.Immutable;
import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.annotations.NotThreadSafe;
import static org.apache.maven.api.services.BaseRequest.nonNull;
/**
*
* @since 4.0.0
*/
@Experimental
@Immutable
public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFactoryRequest {
String getScope();
boolean isOptional();
@Nonnull
Collection<Exclusion> getExclusions();
@Nonnull
static DependencyCoordinateFactoryRequest build(
@Nonnull Session session,
String groupId,
String artifactId,
String version,
String classifier,
String extension,
String type) {
return DependencyCoordinateFactoryRequest.builder()
.session(nonNull(session, "session cannot be null"))
.groupId(groupId)
.artifactId(artifactId)
.version(version)
.classifier(classifier)
.extension(extension)
.type(type)
.build();
}
@Nonnull
static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) {
return builder()
.session(nonNull(session, "session cannot be null"))
.groupId(nonNull(coordinate, "coordinate cannot be null").getGroupId())
.artifactId(coordinate.getArtifactId())
.version(coordinate.getVersion().asString())
.classifier(coordinate.getClassifier())
.extension(coordinate.getExtension())
.build();
}
@Nonnull
static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull Dependency dependency) {
return builder()
.session(nonNull(session, "session cannot be null"))
.groupId(nonNull(dependency, "dependency").getGroupId())
.artifactId(dependency.getArtifactId())
.version(dependency.getVersion().asString())
.classifier(dependency.getClassifier())
.extension(dependency.getExtension())
.type(dependency.getType().id())
.scope(dependency.getScope().id())
.optional(dependency.isOptional())
.build();
}
@Nonnull
static DependencyCoordinateFactoryRequestBuilder builder() {
return new DependencyCoordinateFactoryRequestBuilder();
}
@NotThreadSafe
class DependencyCoordinateFactoryRequestBuilder {
private Session session;
private String groupId;
private String artifactId;
private String version;
private String classifier;
private String extension;
private String type;
private String coordinateString;
private String scope;
private boolean optional;
private Collection<Exclusion> exclusions = Collections.emptyList();
DependencyCoordinateFactoryRequestBuilder() {}
public DependencyCoordinateFactoryRequestBuilder session(Session session) {
this.session = session;
return this;
}
public DependencyCoordinateFactoryRequestBuilder groupId(String groupId) {
this.groupId = groupId;
return this;
}
public DependencyCoordinateFactoryRequestBuilder artifactId(String artifactId) {
this.artifactId = artifactId;
return this;
}
public DependencyCoordinateFactoryRequestBuilder version(String version) {
this.version = version;
return this;
}
public DependencyCoordinateFactoryRequestBuilder classifier(String classifier) {
this.classifier = classifier;
return this;
}
public DependencyCoordinateFactoryRequestBuilder extension(String extension) {
this.extension = extension;
return this;
}
public DependencyCoordinateFactoryRequestBuilder type(String type) {
this.type = type;
return this;
}
public DependencyCoordinateFactoryRequestBuilder coordinateString(String coordinateString) {
this.coordinateString = coordinateString;
return this;
}
public DependencyCoordinateFactoryRequestBuilder scope(String scope) {
this.scope = scope;
return this;
}
public DependencyCoordinateFactoryRequestBuilder optional(boolean optional) {
this.optional = optional;
return this;
}
public DependencyCoordinateFactoryRequestBuilder exclusions(Collection<Exclusion> exclusions) {
if (exclusions != null) {
if (this.exclusions.isEmpty()) {
this.exclusions = new ArrayList<>();
}
this.exclusions.addAll(exclusions);
}
return this;
}
public DependencyCoordinateFactoryRequestBuilder exclusion(Exclusion exclusion) {
if (exclusion != null) {
if (this.exclusions.isEmpty()) {
this.exclusions = new ArrayList<>();
}
this.exclusions.add(exclusion);
}
return this;
}
public DependencyCoordinateFactoryRequest build() {
return new DefaultDependencyCoordinateFactoryRequest(
session,
groupId,
artifactId,
version,
classifier,
extension,
type,
coordinateString,
scope,
optional,
exclusions);
}
private static class DefaultDependencyCoordinateFactoryRequest extends BaseRequest
implements DependencyCoordinateFactoryRequest {
private final String groupId;
private final String artifactId;
private final String version;
private final String classifier;
private final String extension;
private final String type;
private final String coordinateString;
private final String scope;
private final boolean optional;
private final Collection<Exclusion> exclusions;
@SuppressWarnings("checkstyle:ParameterNumber")
private DefaultDependencyCoordinateFactoryRequest(
@Nonnull Session session,
String groupId,
String artifactId,
String version,
String classifier,
String extension,
String type,
String coordinateString,
String scope,
boolean optional,
Collection<Exclusion> exclusions) {
super(session);
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
this.classifier = classifier;
this.extension = extension;
this.type = type;
this.coordinateString = coordinateString;
this.scope = scope;
this.optional = optional;
this.exclusions = exclusions;
}
@Override
public String getGroupId() {
return groupId;
}
@Override
public String getArtifactId() {
return artifactId;
}
@Override
public String getVersion() {
return version;
}
@Override
public String getClassifier() {
return classifier;
}
@Override
public String getExtension() {
return extension;
}
@Override
public String getType() {
return type;
}
public String getCoordinateString() {
return coordinateString;
}
@Override
public String getScope() {
return scope;
}
@Override
public boolean isOptional() {
return optional;
}
@Nonnull
@Override
public Collection<Exclusion> getExclusions() {
return exclusions;
}
}
}
}