blob: c92b060f4bf6fc03077ea0f7d935ca651ea17240 [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.internal.impl;
import java.io.File;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.api.Artifact;
import org.apache.maven.api.DependencyCoordinate;
import org.apache.maven.api.Exclusion;
import org.apache.maven.api.Project;
import org.apache.maven.api.RemoteRepository;
import org.apache.maven.api.Scope;
import org.apache.maven.api.Type;
import org.apache.maven.api.VersionRange;
import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.annotations.Nullable;
import org.apache.maven.api.model.DependencyManagement;
import org.apache.maven.api.model.Model;
import org.apache.maven.api.services.ArtifactManager;
import org.apache.maven.api.services.TypeRegistry;
import org.apache.maven.project.MavenProject;
public class DefaultProject implements Project {
private final InternalSession session;
private final MavenProject project;
public DefaultProject(InternalSession session, MavenProject project) {
this.session = session;
this.project = project;
}
public InternalSession getSession() {
return session;
}
public MavenProject getProject() {
return project;
}
@Nonnull
@Override
public String getGroupId() {
return project.getGroupId();
}
@Nonnull
@Override
public String getArtifactId() {
return project.getArtifactId();
}
@Nonnull
@Override
public String getVersion() {
return project.getVersion();
}
@Nonnull
@Override
public Artifact getArtifact() {
org.eclipse.aether.artifact.Artifact resolverArtifact = RepositoryUtils.toArtifact(project.getArtifact());
Artifact artifact = session.getArtifact(resolverArtifact);
Path path =
resolverArtifact.getFile() != null ? resolverArtifact.getFile().toPath() : null;
session.getService(ArtifactManager.class).setPath(artifact, path);
return artifact;
}
@Nonnull
@Override
public String getPackaging() {
return project.getPackaging();
}
@Nonnull
@Override
public Model getModel() {
return project.getModel().getDelegate();
}
@Nonnull
@Override
public Optional<Path> getPomPath() {
File file = project.getFile();
return Optional.ofNullable(file).map(File::toPath);
}
@Nonnull
@Override
public List<DependencyCoordinate> getDependencies() {
return new MappedList<>(getModel().getDependencies(), this::toDependency);
}
@Nonnull
@Override
public List<DependencyCoordinate> getManagedDependencies() {
DependencyManagement dependencyManagement = getModel().getDependencyManagement();
if (dependencyManagement != null) {
return new MappedList<>(dependencyManagement.getDependencies(), this::toDependency);
}
return Collections.emptyList();
}
@Override
public boolean isExecutionRoot() {
return project.isExecutionRoot();
}
@Override
public boolean isTopProject() {
return getBasedir().isPresent()
&& getBasedir().get().equals(getSession().getTopDirectory());
}
@Override
public boolean isRootProject() {
return getBasedir().isPresent() && getBasedir().get().equals(getRootDirectory());
}
@Override
public Path getRootDirectory() {
return project.getRootDirectory();
}
@Override
public Optional<Project> getParent() {
MavenProject parent = project.getParent();
return parent != null ? Optional.of(session.getProject(parent)) : Optional.empty();
}
@Override
public List<RemoteRepository> getRemoteProjectRepositories() {
return new MappedList<>(project.getRemoteProjectRepositories(), session::getRemoteRepository);
}
@Override
public List<RemoteRepository> getRemotePluginRepositories() {
return new MappedList<>(project.getRemotePluginRepositories(), session::getRemoteRepository);
}
@Nonnull
private DependencyCoordinate toDependency(org.apache.maven.api.model.Dependency dependency) {
return new DependencyCoordinate() {
@Override
public String getGroupId() {
return dependency.getGroupId();
}
@Override
public String getArtifactId() {
return dependency.getArtifactId();
}
@Override
public String getClassifier() {
return dependency.getClassifier();
}
@Override
public VersionRange getVersion() {
return session.parseVersionRange(dependency.getVersion());
}
@Override
public String getExtension() {
return getType().getExtension();
}
@Override
public Type getType() {
String type = dependency.getType();
return session.getService(TypeRegistry.class).getType(type);
}
@Nonnull
@Override
public Scope getScope() {
return Scope.get(dependency.getScope());
}
@Override
public Boolean getOptional() {
return dependency.isOptional();
}
@Nonnull
@Override
public Collection<Exclusion> getExclusions() {
return new MappedCollection<>(dependency.getExclusions(), this::toExclusion);
}
private Exclusion toExclusion(org.apache.maven.api.model.Exclusion exclusion) {
return new Exclusion() {
@Nullable
@Override
public String getGroupId() {
return exclusion.getGroupId();
}
@Nullable
@Override
public String getArtifactId() {
return exclusion.getArtifactId();
}
};
}
};
}
}