| /* |
| * 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.repository.internal; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.LinkedHashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.apache.maven.model.DependencyManagement; |
| import org.apache.maven.model.DistributionManagement; |
| import org.apache.maven.model.License; |
| import org.apache.maven.model.Model; |
| import org.apache.maven.model.Prerequisites; |
| import org.apache.maven.model.Repository; |
| import org.eclipse.aether.RepositorySystemSession; |
| import org.eclipse.aether.artifact.Artifact; |
| import org.eclipse.aether.artifact.ArtifactProperties; |
| import org.eclipse.aether.artifact.ArtifactType; |
| import org.eclipse.aether.artifact.ArtifactTypeRegistry; |
| import org.eclipse.aether.artifact.DefaultArtifact; |
| import org.eclipse.aether.artifact.DefaultArtifactType; |
| import org.eclipse.aether.graph.Dependency; |
| import org.eclipse.aether.graph.Exclusion; |
| import org.eclipse.aether.resolution.ArtifactDescriptorResult; |
| |
| /** |
| * Populates Aether {@link ArtifactDescriptorResult} from Maven project {@link Model}. |
| * <p> |
| * <strong>Note:</strong> This class is part of work in progress and can be changed or removed without notice. |
| * @since 3.2.4 |
| */ |
| public class ArtifactDescriptorReaderDelegate { |
| public void populateResult(RepositorySystemSession session, ArtifactDescriptorResult result, Model model) { |
| ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry(); |
| |
| for (Repository r : model.getRepositories()) { |
| result.addRepository(ArtifactDescriptorUtils.toRemoteRepository(r)); |
| } |
| |
| for (org.apache.maven.model.Dependency dependency : model.getDependencies()) { |
| result.addDependency(convert(dependency, stereotypes)); |
| } |
| |
| DependencyManagement mgmt = model.getDependencyManagement(); |
| if (mgmt != null) { |
| for (org.apache.maven.model.Dependency dependency : mgmt.getDependencies()) { |
| result.addManagedDependency(convert(dependency, stereotypes)); |
| } |
| } |
| |
| Map<String, Object> properties = new LinkedHashMap<>(); |
| |
| Prerequisites prerequisites = model.getPrerequisites(); |
| if (prerequisites != null) { |
| properties.put("prerequisites.maven", prerequisites.getMaven()); |
| } |
| |
| List<License> licenses = model.getLicenses(); |
| properties.put("license.count", licenses.size()); |
| for (int i = 0; i < licenses.size(); i++) { |
| License license = licenses.get(i); |
| properties.put("license." + i + ".name", license.getName()); |
| properties.put("license." + i + ".url", license.getUrl()); |
| properties.put("license." + i + ".comments", license.getComments()); |
| properties.put("license." + i + ".distribution", license.getDistribution()); |
| } |
| |
| result.setProperties(properties); |
| |
| setArtifactProperties(result, model); |
| } |
| |
| private Dependency convert(org.apache.maven.model.Dependency dependency, ArtifactTypeRegistry stereotypes) { |
| ArtifactType stereotype = stereotypes.get(dependency.getType()); |
| if (stereotype == null) { |
| stereotype = new DefaultArtifactType(dependency.getType()); |
| } |
| |
| boolean system = dependency.getSystemPath() != null |
| && !dependency.getSystemPath().isEmpty(); |
| |
| Map<String, String> props = null; |
| if (system) { |
| props = Collections.singletonMap(ArtifactProperties.LOCAL_PATH, dependency.getSystemPath()); |
| } |
| |
| Artifact artifact = new DefaultArtifact( |
| dependency.getGroupId(), |
| dependency.getArtifactId(), |
| dependency.getClassifier(), |
| null, |
| dependency.getVersion(), |
| props, |
| stereotype); |
| |
| List<Exclusion> exclusions = new ArrayList<>(dependency.getExclusions().size()); |
| for (org.apache.maven.model.Exclusion exclusion : dependency.getExclusions()) { |
| exclusions.add(convert(exclusion)); |
| } |
| |
| return new Dependency( |
| artifact, |
| dependency.getScope(), |
| dependency.getOptional() != null ? dependency.isOptional() : null, |
| exclusions); |
| } |
| |
| private Exclusion convert(org.apache.maven.model.Exclusion exclusion) { |
| return new Exclusion(exclusion.getGroupId(), exclusion.getArtifactId(), "*", "*"); |
| } |
| |
| private void setArtifactProperties(ArtifactDescriptorResult result, Model model) { |
| String downloadUrl = null; |
| DistributionManagement distMgmt = model.getDistributionManagement(); |
| if (distMgmt != null) { |
| downloadUrl = distMgmt.getDownloadUrl(); |
| } |
| if (downloadUrl != null && !downloadUrl.isEmpty()) { |
| Artifact artifact = result.getArtifact(); |
| Map<String, String> props = new HashMap<>(artifact.getProperties()); |
| props.put(ArtifactProperties.DOWNLOAD_URL, downloadUrl); |
| result.setArtifact(artifact.setProperties(props)); |
| } |
| } |
| } |