blob: 3e6125474dfd9a587ac67045548ef5bf849bda25 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.karaf.tooling.features;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Stack;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.resolver.ResolutionListener;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.plugin.logging.Log;
public class ResolutionListenerImpl implements ResolutionListener {
private Stack parents = new Stack();
private Map artifacts = new HashMap();
private Node rootNode;
private Log log;
public void setLog(Log log) {
this.log = log;
}
public Log getLog() {
return log;
}
public void testArtifact(Artifact artifact) {
// getLog().debug("testArtifact: " + artifact);
// intentionally blank
}
public void startProcessChildren(Artifact artifact) {
// getLog().debug("startProcessChildren: " + artifact);
Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
if (parents.isEmpty()) {
rootNode = node;
}
parents.push(node);
}
public void endProcessChildren(Artifact artifact) {
// getLog().debug("endProcessChildren: " + artifact);
Node check = (Node) parents.pop();
assert artifact.equals(check.getArtifact());
}
public void omitForNearer(Artifact omitted, Artifact kept) {
// getLog().debug("omitForNearer: omitted=" + omitted + ", kept=" +
// kept);
assert omitted.getDependencyConflictId().equals(
kept.getDependencyConflictId());
Node node = (Node) artifacts.get(omitted.getDependencyConflictId());
assert node != null;
node.setArtifact(kept);
}
public void omitForCycle(Artifact artifact) {
// getLog().debug("omitForCycle: " + artifact);
// intentionally blank
}
public void includeArtifact(Artifact artifact) {
// getLog().debug("includeArtifact: " + artifact);
Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
if (node == null) {
node = new Node();
artifacts.put(artifact.getDependencyConflictId(), node);
}
node.setArtifact(artifact);
if (!parents.isEmpty()) {
Node parent = (Node) parents.peek();
parent.getChildren().add(node);
node.getParents().add(parent);
}
if (rootNode != null) {
// print(rootNode, "");
}
}
protected void print(Node node, String string) {
// getLog().debug(string + rootNode.getArtifact());
for (Iterator iter = node.getChildren().iterator(); iter.hasNext();) {
Node n = (Node) iter.next();
print(n, string + " ");
}
}
public void updateScope(Artifact artifact, String scope) {
// getLog().debug("updateScope: " + artifact);
Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
node.getArtifact().setScope(scope);
}
public void manageArtifact(Artifact artifact, Artifact replacement) {
// getLog().debug("manageArtifact: artifact=" + artifact + ",
// replacement=" + replacement);
Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
if (node != null) {
if (replacement.getVersion() != null) {
node.getArtifact().setVersion(replacement.getVersion());
}
if (replacement.getScope() != null) {
node.getArtifact().setScope(replacement.getScope());
}
}
}
public void updateScopeCurrentPom(Artifact artifact, String key) {
getLog().debug("updateScopeCurrentPom: " + artifact);
// intentionally blank
}
public void selectVersionFromRange(Artifact artifact) {
getLog().debug("selectVersionFromRange: " + artifact);
// intentionally blank
}
public void restrictRange(Artifact artifact, Artifact artifact1,
VersionRange versionRange) {
getLog().debug("restrictRange: " + artifact);
// intentionally blank
}
public Node getNode(Artifact artifact) {
return (Node) artifacts.get(artifact.getDependencyConflictId());
}
public Collection getArtifacts() {
return artifacts.values();
}
public Node getRootNode() {
return rootNode;
}
}