001package org.eclipse.aether.internal.impl.collect; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import org.eclipse.aether.artifact.Artifact; 023import org.eclipse.aether.collection.DependencyManagement; 024import org.eclipse.aether.collection.DependencyManager; 025import org.eclipse.aether.graph.DefaultDependencyNode; 026import org.eclipse.aether.graph.Dependency; 027import org.eclipse.aether.graph.DependencyNode; 028import org.eclipse.aether.graph.Exclusion; 029import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; 030 031import java.util.ArrayList; 032import java.util.Collection; 033import java.util.Collections; 034import java.util.HashMap; 035import java.util.Map; 036 037/** 038 * Helper class used during collection. 039 */ 040public class PremanagedDependency 041{ 042 043 final String premanagedVersion; 044 045 final String premanagedScope; 046 047 final Boolean premanagedOptional; 048 049 /** 050 * @since 1.1.0 051 */ 052 final Collection<Exclusion> premanagedExclusions; 053 054 /** 055 * @since 1.1.0 056 */ 057 final Map<String, String> premanagedProperties; 058 059 final int managedBits; 060 061 final Dependency managedDependency; 062 063 final boolean premanagedState; 064 065 @SuppressWarnings( "checkstyle:parameternumber" ) 066 PremanagedDependency( String premanagedVersion, String premanagedScope, Boolean premanagedOptional, 067 Collection<Exclusion> premanagedExclusions, Map<String, String> premanagedProperties, 068 int managedBits, Dependency managedDependency, boolean premanagedState ) 069 { 070 this.premanagedVersion = premanagedVersion; 071 this.premanagedScope = premanagedScope; 072 this.premanagedOptional = premanagedOptional; 073 this.premanagedExclusions = 074 premanagedExclusions != null 075 ? Collections.unmodifiableCollection( new ArrayList<>( premanagedExclusions ) ) 076 : null; 077 078 this.premanagedProperties = 079 premanagedProperties != null 080 ? Collections.unmodifiableMap( new HashMap<>( premanagedProperties ) ) 081 : null; 082 083 this.managedBits = managedBits; 084 this.managedDependency = managedDependency; 085 this.premanagedState = premanagedState; 086 } 087 088 public static PremanagedDependency create( DependencyManager depManager, Dependency dependency, 089 boolean disableVersionManagement, boolean premanagedState ) 090 { 091 DependencyManagement depMngt = depManager != null ? depManager.manageDependency( dependency ) : null; 092 093 int managedBits = 0; 094 String premanagedVersion = null; 095 String premanagedScope = null; 096 Boolean premanagedOptional = null; 097 Collection<Exclusion> premanagedExclusions = null; 098 Map<String, String> premanagedProperties = null; 099 100 if ( depMngt != null ) 101 { 102 if ( depMngt.getVersion() != null && !disableVersionManagement ) 103 { 104 Artifact artifact = dependency.getArtifact(); 105 premanagedVersion = artifact.getVersion(); 106 dependency = dependency.setArtifact( artifact.setVersion( depMngt.getVersion() ) ); 107 managedBits |= DependencyNode.MANAGED_VERSION; 108 } 109 if ( depMngt.getProperties() != null ) 110 { 111 Artifact artifact = dependency.getArtifact(); 112 premanagedProperties = artifact.getProperties(); 113 dependency = dependency.setArtifact( artifact.setProperties( depMngt.getProperties() ) ); 114 managedBits |= DependencyNode.MANAGED_PROPERTIES; 115 } 116 if ( depMngt.getScope() != null ) 117 { 118 premanagedScope = dependency.getScope(); 119 dependency = dependency.setScope( depMngt.getScope() ); 120 managedBits |= DependencyNode.MANAGED_SCOPE; 121 } 122 if ( depMngt.getOptional() != null ) 123 { 124 premanagedOptional = dependency.isOptional(); 125 dependency = dependency.setOptional( depMngt.getOptional() ); 126 managedBits |= DependencyNode.MANAGED_OPTIONAL; 127 } 128 if ( depMngt.getExclusions() != null ) 129 { 130 premanagedExclusions = dependency.getExclusions(); 131 dependency = dependency.setExclusions( depMngt.getExclusions() ); 132 managedBits |= DependencyNode.MANAGED_EXCLUSIONS; 133 } 134 } 135 return new PremanagedDependency( premanagedVersion, premanagedScope, premanagedOptional, 136 premanagedExclusions, premanagedProperties, managedBits, dependency, 137 premanagedState ); 138 139 } 140 141 public Dependency getManagedDependency() 142 { 143 return managedDependency; 144 } 145 146 public void applyTo( DefaultDependencyNode child ) 147 { 148 child.setManagedBits( managedBits ); 149 if ( premanagedState ) 150 { 151 child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, premanagedVersion ); 152 child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_SCOPE, premanagedScope ); 153 child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_OPTIONAL, premanagedOptional ); 154 child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_EXCLUSIONS, premanagedExclusions ); 155 child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_PROPERTIES, premanagedProperties ); 156 } 157 } 158 159}