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 org.eclipse.aether.artifact.Artifact;
23  import org.eclipse.aether.collection.DependencyManagement;
24  import org.eclipse.aether.collection.DependencyManager;
25  import org.eclipse.aether.graph.DefaultDependencyNode;
26  import org.eclipse.aether.graph.Dependency;
27  import org.eclipse.aether.graph.DependencyNode;
28  import org.eclipse.aether.graph.Exclusion;
29  import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
30  
31  import java.util.ArrayList;
32  import java.util.Collection;
33  import java.util.Collections;
34  import java.util.HashMap;
35  import java.util.Map;
36  
37  /**
38   * Helper class used during collection.
39   */
40  public class PremanagedDependency
41  {
42  
43      final String premanagedVersion;
44  
45      final String premanagedScope;
46  
47      final Boolean premanagedOptional;
48  
49      /**
50       * @since 1.1.0
51       */
52      final Collection<Exclusion> premanagedExclusions;
53  
54      /**
55       * @since 1.1.0
56       */
57      final Map<String, String> premanagedProperties;
58  
59      final int managedBits;
60  
61      final Dependency managedDependency;
62  
63      final boolean premanagedState;
64  
65      @SuppressWarnings( "checkstyle:parameternumber" )
66      PremanagedDependency( String premanagedVersion, String premanagedScope, Boolean premanagedOptional,
67                            Collection<Exclusion> premanagedExclusions, Map<String, String> premanagedProperties,
68                            int managedBits, Dependency managedDependency, boolean premanagedState )
69      {
70          this.premanagedVersion = premanagedVersion;
71          this.premanagedScope = premanagedScope;
72          this.premanagedOptional = premanagedOptional;
73          this.premanagedExclusions =
74                  premanagedExclusions != null
75                          ? Collections.unmodifiableCollection( new ArrayList<>( premanagedExclusions ) )
76                          : null;
77  
78          this.premanagedProperties =
79                  premanagedProperties != null
80                          ? Collections.unmodifiableMap( new HashMap<>( premanagedProperties ) )
81                          : null;
82  
83          this.managedBits = managedBits;
84          this.managedDependency = managedDependency;
85          this.premanagedState = premanagedState;
86      }
87  
88      public static PremanagedDependency create( DependencyManager depManager, Dependency dependency,
89                                                 boolean disableVersionManagement, boolean premanagedState )
90      {
91          DependencyManagement depMngt = depManager != null ? depManager.manageDependency( dependency ) : null;
92  
93          int managedBits = 0;
94          String premanagedVersion = null;
95          String premanagedScope = null;
96          Boolean premanagedOptional = null;
97          Collection<Exclusion> premanagedExclusions = null;
98          Map<String, String> premanagedProperties = null;
99  
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 }