]> source.dussan.org Git - archiva.git/blob
2394c324feaff5e449ad8284eaa53cb9b9697734
[archiva.git] /
1 package org.apache.archiva.repository.maven.dependency.tree;
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  * 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
20 import org.apache.archiva.maven2.model.Artifact;
21 import org.apache.archiva.maven2.model.TreeEntry;
22 import org.eclipse.aether.graph.DependencyNode;
23 import org.eclipse.aether.graph.DependencyVisitor;
24 import org.modelmapper.ModelMapper;
25 import org.modelmapper.convention.MatchingStrategies;
26
27 import java.util.List;
28
29 /**
30  * @author Olivier Lamy
31  * @since 1.4-M3
32  */
33 public class TreeDependencyNodeVisitor
34     implements DependencyVisitor
35 {
36
37     final List<TreeEntry> treeEntries;
38
39     private TreeEntry currentEntry;
40
41     private org.eclipse.aether.graph.DependencyNode firstDependencyNode;
42
43     public TreeDependencyNodeVisitor( List<TreeEntry> treeEntries )
44     {
45         this.treeEntries = treeEntries;
46     }
47
48
49     @Override
50     public boolean visitEnter( DependencyNode dependencyNode )
51     {
52         TreeEntry entry =
53             new TreeEntry( getModelMapper().map( dependencyNode.getDependency().getArtifact(), Artifact.class ) );
54         entry.getArtifact().setFileExtension( dependencyNode.getDependency().getArtifact().getExtension() );
55         entry.getArtifact().setScope( dependencyNode.getDependency().getScope() );
56         entry.setParent( currentEntry );
57         currentEntry = entry;
58
59         if ( firstDependencyNode == null )
60         {
61             firstDependencyNode = dependencyNode;
62             treeEntries.add( currentEntry );
63         }
64         else
65         {
66             currentEntry.getParent().getChilds().add( currentEntry );
67         }
68         return true;
69     }
70
71     @Override
72     public boolean visitLeave( DependencyNode dependencyNode )
73     {
74         currentEntry = currentEntry.getParent();
75         return true;
76     }
77
78     private static class ModelMapperHolder
79     {
80         private static ModelMapper MODEL_MAPPER = new ModelMapper();
81
82         static
83         {
84             MODEL_MAPPER.getConfiguration().setMatchingStrategy( MatchingStrategies.STRICT );
85         }
86     }
87
88     protected ModelMapper getModelMapper()
89     {
90         return ModelMapperHolder.MODEL_MAPPER;
91     }
92 }