blob: b96d3e8b9d81132ab1b778d0326d2ae7678ae95e [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.maven.shared.dependency.graph.internal;
import java.util.List;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Exclusion;
import org.apache.maven.shared.dependency.graph.DependencyNode;
class VerboseDependencyNode extends DefaultDependencyNode {
private final ConflictData data;
VerboseDependencyNode(
DependencyNode parent,
Artifact artifact,
String premanagedVersion,
String premanagedScope,
String versionConstraint,
Boolean optional,
List<Exclusion> exclusions,
ConflictData data) {
super(parent, artifact, premanagedVersion, premanagedScope, versionConstraint, optional, exclusions);
this.data = data;
}
@Override
public String toNodeString() {
StringBuilder buffer = new StringBuilder();
boolean included = (data.getWinnerVersion() == null);
if (!included) {
buffer.append('(');
}
buffer.append(getArtifact());
ItemAppender appender = new ItemAppender(buffer, included ? " (" : " - ", "; ", included ? ")" : "");
if (getPremanagedVersion() != null) {
appender.append("version managed from ", getPremanagedVersion());
}
if (getPremanagedScope() != null) {
appender.append("scope managed from ", getPremanagedScope());
}
if (data.getOriginalScope() != null) {
appender.append("scope updated from ", data.getOriginalScope());
}
if (data.getIgnoredScope() != null) {
appender.append("scope not updated to ", data.getIgnoredScope());
}
// if ( getVersionSelectedFromRange() != null )
// {
// appender.append( "version selected from range ", getVersionSelectedFromRange().toString() );
// appender.append( "available versions ", getAvailableVersions().toString() );
// }
if (!included) {
String winnerVersion = data.getWinnerVersion();
if (winnerVersion.equals(getArtifact().getVersion())) {
appender.append("omitted for duplicate");
} else {
appender.append("omitted for conflict with ", winnerVersion);
}
}
appender.flush();
if (!included) {
buffer.append(')');
}
return buffer.toString();
}
/**
* Utility class to concatenate a number of parameters with separator tokens.
*/
private static class ItemAppender {
private StringBuilder buffer;
private String startToken;
private String separatorToken;
private String endToken;
private boolean appended;
ItemAppender(StringBuilder buffer, String startToken, String separatorToken, String endToken) {
this.buffer = buffer;
this.startToken = startToken;
this.separatorToken = separatorToken;
this.endToken = endToken;
appended = false;
}
public ItemAppender append(String item1) {
appendToken();
buffer.append(item1);
return this;
}
public ItemAppender append(String item1, String item2) {
appendToken();
buffer.append(item1).append(item2);
return this;
}
public void flush() {
if (appended) {
buffer.append(endToken);
appended = false;
}
}
private void appendToken() {
buffer.append(appended ? separatorToken : startToken);
appended = true;
}
}
}