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 java.util.ArrayList;
021 import java.util.List;
022 import java.util.Stack;
023
024 import org.apache.maven.project.interpolation.ModelInterpolationException;
025 import org.jadira.dependencynavigator.controller.ArtifactResolver;
026 import org.jadira.dependencynavigator.controller.DependencyResolutionException;
027 import org.jadira.dependencynavigator.implementations.IProgressMeter;
028 import org.jadira.dependencynavigator.implementations.Workspace;
029
030 public class RootPom extends PomFile {
031 private final Workspace workspace;
032
033 public RootPom(PomFile rootPom, Workspace workspace) throws ArtifactInitialisationException, ModelInterpolationException {
034 super(rootPom.getModel(), rootPom.getParent(), rootPom.getScope());
035 this.workspace = workspace;
036 }
037
038 public void resolveDependencies(ArtifactResolver resolver, IProgressMeter progress) {
039 if (isModulePom()) {
040 progress.resolving(this);
041 dependencies = new ArrayList<Artifact>();
042 for (Object o : getModel().getAssembledModel().getModules()) {
043 String moduleName = (String) o;
044 PomFile module = workspace.loadModulePom(moduleName);
045 if (module != null) {
046 dependencies.add(module);
047 resolver.addPomToDuplicatesList(module);
048 module.resolveDependencies(resolver, progress, new Stack<LeafDependency>());
049 } else {
050 throw new DependencyResolutionException("Could not find module pom file: " + workspace.getPath(moduleName));
051 }
052 }
053 } else {
054 // resolve as a regular dependency pom
055 super.resolveDependencies(resolver, progress, new Stack<LeafDependency>());
056 }
057 }
058
059 private boolean isModulePom() {
060 List<String> modules = getModel().getAssembledModel().getModules();
061 return modules != null && modules.size() != 0;
062 }
063 }