]> source.dussan.org Git - archiva.git/blob
22e4b0af279a373eadb59995f0667eab9946433b
[archiva.git] /
1 package org.apache.archiva.rest.services.utils;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  */
20
21 import net.sf.beanlib.provider.replicator.BeanReplicator;
22 import org.apache.archiva.rest.api.model.Artifact;
23 import org.apache.archiva.rest.api.model.TreeEntry;
24 import org.apache.maven.shared.dependency.tree.DependencyNode;
25 import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
26 import org.sonatype.aether.graph.DependencyVisitor;
27
28 import java.util.List;
29
30 /**
31  * @author Olivier Lamy
32  * @since 1.4-M3
33  */
34 public class TreeDependencyNodeVisitor
35     implements DependencyNodeVisitor, DependencyVisitor
36 {
37
38     final List<TreeEntry> treeEntries;
39
40     private TreeEntry currentEntry;
41
42     private DependencyNode firstNode;
43
44     private org.sonatype.aether.graph.DependencyNode firstDependencyNode;
45
46     public TreeDependencyNodeVisitor( List<TreeEntry> treeEntries )
47     {
48         this.treeEntries = treeEntries;
49     }
50
51     public boolean visit( DependencyNode node )
52     {
53         TreeEntry entry = new TreeEntry( new BeanReplicator().replicateBean( node.getArtifact(), Artifact.class ) );
54         entry.setParent( currentEntry );
55         currentEntry = entry;
56
57         if ( firstNode == null )
58         {
59             firstNode = node;
60             treeEntries.add( currentEntry );
61         }
62         else
63         {
64             currentEntry.getParent().getChilds().add( currentEntry );
65         }
66         return true;
67     }
68
69     public boolean endVisit( DependencyNode node )
70     {
71         currentEntry = currentEntry.getParent();
72         return true;
73     }
74
75     public boolean visitEnter( org.sonatype.aether.graph.DependencyNode dependencyNode )
76     {
77         TreeEntry entry = new TreeEntry( new BeanReplicator().replicateBean( dependencyNode.getDependency().getArtifact(), Artifact.class ) );
78         entry.setParent( currentEntry );
79         currentEntry = entry;
80
81         if ( firstDependencyNode == null )
82         {
83             firstDependencyNode = dependencyNode;
84             treeEntries.add( currentEntry );
85         }
86         else
87         {
88             currentEntry.getParent().getChilds().add( currentEntry );
89         }
90         return true;
91     }
92
93     public boolean visitLeave( org.sonatype.aether.graph.DependencyNode dependencyNode )
94     {
95         currentEntry = currentEntry.getParent();
96         return true;
97     }
98 }