View Javadoc
1   package org.apache.maven.api;
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.apache.maven.api.annotations.Experimental;
23  import org.apache.maven.api.annotations.Immutable;
24  import org.apache.maven.api.annotations.Nonnull;
25  
26  import java.util.List;
27  import java.util.Optional;
28  import java.util.function.Predicate;
29  import java.util.stream.Stream;
30  
31  /**
32   * Represents a dependency node within a Maven project's dependency collector.
33   *
34   * @since 4.0
35   * @see org.apache.maven.api.services.DependencyCollectorResult#getRoot()
36   */
37  @Experimental
38  @Immutable
39  public interface Node
40  {
41  
42      /**
43       * @return dependency for this node
44       */
45      Dependency getDependency();
46  
47      /**
48       * Gets the child nodes of this node.
49       *
50       * @return the child nodes of this node, never {@code null}
51       */
52      @Nonnull
53      List<Node> getChildren();
54  
55      /**
56       * @return repositories of this node
57       */
58      @Nonnull
59      List<RemoteRepository> getRemoteRepositories();
60  
61      /**
62       * The repository where this artifact has been downloaded from.
63       */
64      @Nonnull
65      Optional<RemoteRepository> getRepository();
66  
67      /**
68       * Traverses this node and potentially its children using the specified visitor.
69       *
70       * @param visitor The visitor to call back, must not be {@code null}.
71       * @return {@code true} to visit siblings nodes of this node as well, {@code false} to skip siblings.
72       */
73      boolean accept( @Nonnull NodeVisitor visitor );
74  
75      /**
76       * Returns a new tree starting at this node, filtering the children.
77       * Note that this node will not be filtered and only the children
78       * and its descendant will be checked.
79       *
80       * @param filter the filter to apply
81       * @return a new filtered graph
82       */
83      Node filter( Predicate<Node> filter );
84  
85      /**
86       * Returns a string representation of this dependency node.
87       *
88       * @return the string representation
89       */
90      String asString();
91  
92      /**
93       * Obtain a Stream containing this node and all its descendant.
94       *
95       * @return a stream containing this node and its descendant
96       */
97      @Nonnull
98      default Stream<Node> stream()
99      {
100         return Stream.concat( Stream.of( this ), getChildren().stream().flatMap( Node::stream ) );
101     }
102 
103 }