001 /* 002 * Licensed under the Apache License, Version 2.0 (the "License"); 003 * you may not use this file except in compliance with the License. 004 * You may obtain a copy of the License at 005 * 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * 008 * Unless required by applicable law or agreed to in writing, software 009 * distributed under the License is distributed on an "AS IS" BASIS, 010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 011 * See the License for the specific language governing permissions and 012 * limitations under the License. 013 */ 014 /* 015 * This file has been modified by Chris Pheby in accordance with Section 4.2 016 * of the Apache Software License 017 */ 018 package org.jadira.dependencynavigator.model; 019 020 import org.apache.maven.model.Dependency; 021 import org.jadira.dependencynavigator.assembler.AssembledModel; 022 import org.jadira.dependencynavigator.controller.ArtifactResolver; 023 import org.jadira.dependencynavigator.implementations.IProgressMeter; 024 025 import java.util.ArrayList; 026 import java.util.List; 027 import java.util.Stack; 028 029 public class PomFile extends Artifact { 030 031 protected List<Artifact> dependencies; 032 protected AssembledModel model; 033 034 public PomFile(AssembledModel model, Artifact parent, String scope) throws ArtifactInitialisationException { 035 036 super(parent, 037 model.getAssembledModel().getGroupId() == null ? model.getAssembledModel().getParent().getGroupId() : model.getAssembledModel().getGroupId(), 038 model.getAssembledModel().getArtifactId(), 039 model.getAssembledModel().getVersion() == null ? model.getAssembledModel().getParent().getVersion() : model.getAssembledModel().getVersion(), 040 scope); 041 042 this.model = model; 043 } 044 045 public void resolveDependencies(ArtifactResolver resolver, IProgressMeter progress, Stack<LeafDependency> path) { 046 progress.resolving(this); 047 dependencies = new ArrayList<Artifact>(); 048 // add the dependencies 049 for (Object o : model.getAssembledModel().getDependencies()) { 050 Dependency dependency = (Dependency) o; 051 /* 052 * Check to see if dependency contains in path 053 */ 054 try { 055 LeafDependency leafDependency = new LeafDependency(this, dependency, dependency.getScope()); 056 /** 057 * Prevent circular dependencies 058 */ 059 if (!path.contains(leafDependency)) { 060 path.push(leafDependency); 061 Artifact artifact = resolver.resolveArtifact(this, dependency, progress, path); 062 if (artifact != null) { 063 dependencies.add(artifact); 064 } 065 } 066 } catch (ArtifactInitialisationException e) { 067 e.printStackTrace(); 068 } 069 } 070 } 071 072 public AssembledModel getModel() { 073 return model; 074 } 075 076 @Override 077 public boolean isLeaf() { 078 return dependencies.size() == 0; 079 } 080 081 @Override 082 public List<Artifact> getDependencies() { 083 return dependencies; 084 } 085 086 @Override 087 public int dependencyCount() { 088 if (isLeaf()) { 089 return 1; 090 } 091 int dependencyCount = 0; 092 for (Artifact artifact : dependencies) { 093 dependencyCount += artifact.dependencyCount(); 094 } 095 return dependencyCount; 096 } 097 098 }