1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.eclipse.aether.resolution; 20 21 import org.eclipse.aether.RepositorySystem; 22 import org.eclipse.aether.RequestTrace; 23 import org.eclipse.aether.artifact.Artifact; 24 import org.eclipse.aether.collection.CollectRequest; 25 import org.eclipse.aether.graph.DependencyFilter; 26 import org.eclipse.aether.graph.DependencyNode; 27 28 /** 29 * A request to resolve transitive dependencies. This request can either be supplied with a {@link CollectRequest} to 30 * calculate the transitive dependencies or with an already resolved dependency graph. 31 * 32 * @see RepositorySystem#resolveDependencies(org.eclipse.aether.RepositorySystemSession, DependencyRequest) 33 * @see Artifact#getFile() 34 */ 35 public final class DependencyRequest { 36 37 private DependencyNode root; 38 39 private CollectRequest collectRequest; 40 41 private DependencyFilter filter; 42 43 private RequestTrace trace; 44 45 /** 46 * Creates an uninitialized request. Note that either {@link #setRoot(DependencyNode)} or 47 * {@link #setCollectRequest(CollectRequest)} must eventually be called to create a valid request. 48 */ 49 public DependencyRequest() { 50 // enables default constructor 51 } 52 53 /** 54 * Creates a request for the specified dependency graph and with the given resolution filter. 55 * 56 * @param node The root node of the dependency graph whose artifacts should be resolved, may be {@code null}. 57 * @param filter The resolution filter to use, may be {@code null}. 58 */ 59 public DependencyRequest(DependencyNode node, DependencyFilter filter) { 60 setRoot(node); 61 setFilter(filter); 62 } 63 64 /** 65 * Creates a request for the specified collect request and with the given resolution filter. 66 * 67 * @param request The collect request used to calculate the dependency graph whose artifacts should be resolved, may 68 * be {@code null}. 69 * @param filter The resolution filter to use, may be {@code null}. 70 */ 71 public DependencyRequest(CollectRequest request, DependencyFilter filter) { 72 setCollectRequest(request); 73 setFilter(filter); 74 } 75 76 /** 77 * Gets the root node of the dependency graph whose artifacts should be resolved. 78 * 79 * @return The root node of the dependency graph or {@code null} if none. 80 */ 81 public DependencyNode getRoot() { 82 return root; 83 } 84 85 /** 86 * Sets the root node of the dependency graph whose artifacts should be resolved. When this request is processed, 87 * the nodes of the given dependency graph will be updated to refer to the resolved artifacts. Eventually, either 88 * {@link #setRoot(DependencyNode)} or {@link #setCollectRequest(CollectRequest)} must be called to create a valid 89 * request. 90 * 91 * @param root The root node of the dependency graph, may be {@code null}. 92 * @return This request for chaining, never {@code null}. 93 */ 94 public DependencyRequest setRoot(DependencyNode root) { 95 this.root = root; 96 return this; 97 } 98 99 /** 100 * Gets the collect request used to calculate the dependency graph whose artifacts should be resolved. 101 * 102 * @return The collect request or {@code null} if none. 103 */ 104 public CollectRequest getCollectRequest() { 105 return collectRequest; 106 } 107 108 /** 109 * Sets the collect request used to calculate the dependency graph whose artifacts should be resolved. Eventually, 110 * either {@link #setRoot(DependencyNode)} or {@link #setCollectRequest(CollectRequest)} must be called to create a 111 * valid request. If this request is supplied with a dependency node via {@link #setRoot(DependencyNode)}, the 112 * collect request is ignored. 113 * 114 * @param collectRequest The collect request, may be {@code null}. 115 * @return This request for chaining, never {@code null}. 116 */ 117 public DependencyRequest setCollectRequest(CollectRequest collectRequest) { 118 this.collectRequest = collectRequest; 119 return this; 120 } 121 122 /** 123 * Gets the resolution filter used to select which artifacts of the dependency graph should be resolved. 124 * 125 * @return The resolution filter or {@code null} to resolve all artifacts of the dependency graph. 126 */ 127 public DependencyFilter getFilter() { 128 return filter; 129 } 130 131 /** 132 * Sets the resolution filter used to select which artifacts of the dependency graph should be resolved. For 133 * example, use this filter to restrict resolution to dependencies of a certain scope. 134 * 135 * @param filter The resolution filter, may be {@code null} to resolve all artifacts of the dependency graph. 136 * @return This request for chaining, never {@code null}. 137 */ 138 public DependencyRequest setFilter(DependencyFilter filter) { 139 this.filter = filter; 140 return this; 141 } 142 143 /** 144 * Gets the trace information that describes the higher level request/operation in which this request is issued. 145 * 146 * @return The trace information about the higher level operation or {@code null} if none. 147 */ 148 public RequestTrace getTrace() { 149 return trace; 150 } 151 152 /** 153 * Sets the trace information that describes the higher level request/operation in which this request is issued. 154 * 155 * @param trace The trace information about the higher level operation, may be {@code null}. 156 * @return This request for chaining, never {@code null}. 157 */ 158 public DependencyRequest setTrace(RequestTrace trace) { 159 this.trace = trace; 160 return this; 161 } 162 163 @Override 164 public String toString() { 165 if (root != null) { 166 return String.valueOf(root); 167 } 168 return String.valueOf(collectRequest); 169 } 170 }