View Javadoc
1   package org.eclipse.aether.internal.impl.collect;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   * 
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   * 
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.ArrayList;
23  import java.util.Collection;
24  import java.util.Collections;
25  import java.util.HashMap;
26  import java.util.Map;
27  
28  import org.eclipse.aether.artifact.Artifact;
29  import org.eclipse.aether.collection.DependencyManagement;
30  import org.eclipse.aether.collection.DependencyManager;
31  import org.eclipse.aether.graph.DefaultDependencyNode;
32  import org.eclipse.aether.graph.Dependency;
33  import org.eclipse.aether.graph.DependencyNode;
34  import org.eclipse.aether.graph.Exclusion;
35  import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
36  
37  class PremanagedDependency
38  {
39      final String premanagedVersion;
40  
41      final String premanagedScope;
42  
43      final Boolean premanagedOptional;
44  
45      /**
46       * @since 1.4.0
47       */
48      final Collection<Exclusion> premanagedExclusions;
49  
50      /**
51       * @since 1.4.0
52       */
53      final Map<String, String> premanagedProperties;
54  
55      final int managedBits;
56  
57      final Dependency managedDependency;
58  
59      final boolean premanagedState;
60  
61      @SuppressWarnings( "checkstyle:parameternumber" )
62      PremanagedDependency( String premanagedVersion, String premanagedScope, Boolean premanagedOptional,
63                            Collection<Exclusion> premanagedExclusions, Map<String, String> premanagedProperties,
64                            int managedBits, Dependency managedDependency, boolean premanagedState )
65      {
66          this.premanagedVersion = premanagedVersion;
67          this.premanagedScope = premanagedScope;
68          this.premanagedOptional = premanagedOptional;
69          this.premanagedExclusions =
70              premanagedExclusions != null
71                  ? Collections.unmodifiableCollection( new ArrayList<>( premanagedExclusions ) )
72                  : null;
73  
74          this.premanagedProperties =
75              premanagedProperties != null
76                  ? Collections.unmodifiableMap( new HashMap<>( premanagedProperties ) )
77                  : null;
78  
79          this.managedBits = managedBits;
80          this.managedDependency = managedDependency;
81          this.premanagedState = premanagedState;
82      }
83  
84      static PremanagedDependency create( DependencyManager depManager, Dependency dependency,
85                                          boolean disableVersionManagement, boolean premanagedState )
86      {
87          DependencyManagement depMngt = depManager != null ? depManager.manageDependency( dependency ) : null;
88  
89          int managedBits = 0;
90          String premanagedVersion = null;
91          String premanagedScope = null;
92          Boolean premanagedOptional = null;
93          Collection<Exclusion> premanagedExclusions = null;
94          Map<String, String> premanagedProperties = null;
95  
96          if ( depMngt != null )
97          {
98              if ( depMngt.getVersion() != null && !disableVersionManagement )
99              {
100                 Artifact artifact = dependency.getArtifact();
101                 premanagedVersion = artifact.getVersion();
102                 dependency = dependency.setArtifact( artifact.setVersion( depMngt.getVersion() ) );
103                 managedBits |= DependencyNode.MANAGED_VERSION;
104             }
105             if ( depMngt.getProperties() != null )
106             {
107                 Artifact artifact = dependency.getArtifact();
108                 premanagedProperties = artifact.getProperties();
109                 dependency = dependency.setArtifact( artifact.setProperties( depMngt.getProperties() ) );
110                 managedBits |= DependencyNode.MANAGED_PROPERTIES;
111             }
112             if ( depMngt.getScope() != null )
113             {
114                 premanagedScope = dependency.getScope();
115                 dependency = dependency.setScope( depMngt.getScope() );
116                 managedBits |= DependencyNode.MANAGED_SCOPE;
117             }
118             if ( depMngt.getOptional() != null )
119             {
120                 premanagedOptional = dependency.isOptional();
121                 dependency = dependency.setOptional( depMngt.getOptional() );
122                 managedBits |= DependencyNode.MANAGED_OPTIONAL;
123             }
124             if ( depMngt.getExclusions() != null )
125             {
126                 premanagedExclusions = dependency.getExclusions();
127                 dependency = dependency.setExclusions( depMngt.getExclusions() );
128                 managedBits |= DependencyNode.MANAGED_EXCLUSIONS;
129             }
130         }
131         return new PremanagedDependency( premanagedVersion, premanagedScope, premanagedOptional,
132                                          premanagedExclusions, premanagedProperties, managedBits, dependency,
133                                          premanagedState );
134 
135     }
136 
137     public void applyTo( DefaultDependencyNode child )
138     {
139         child.setManagedBits( managedBits );
140         if ( premanagedState )
141         {
142             child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, premanagedVersion );
143             child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_SCOPE, premanagedScope );
144             child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_OPTIONAL, premanagedOptional );
145             child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_EXCLUSIONS, premanagedExclusions );
146             child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_PROPERTIES, premanagedProperties );
147         }
148     }
149 }