/**
* Copyright 2015-2016 Red Hat, Inc, and individual contributors.
* <p>
* Licensed 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.wildfly.swarm.tools;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.wildfly.swarm.bootstrap.env.DependencyTree;
import org.wildfly.swarm.bootstrap.util.MavenArtifactDescriptor;
/**
* The declaration of direct and transient dependencies declared by a project build.
* These maye be unresolved, which means you cannot assume they are available in any local repository.
*
* @author Heiko Braun
* @author Ken Finnigan
* @since 24/10/2016
*/
public class DeclaredDependencies extends DependencyTree<ArtifactSpec> {
public Collection<ArtifactSpec> getExplicitDependencies() {
return getDirectDeps();
}
public Set<ArtifactSpec> getTransientDependencies() {
if (null == allTransient) {
allTransient = new HashSet<>();
for (ArtifactSpec directDep : getDirectDeps()) {
allTransient.addAll(getTransientDependencies(directDep));
}
}
return allTransient;
}
public Collection<ArtifactSpec> getTransientDependencies(ArtifactSpec artifact) {
return getTransientDeps(artifact);
}
/**
* 'Presolved' means a build component (i.e. mojo) pre-computed the transient dependencies
* and thus we can assume this set is fully and correctly resolved
*
* @return
*/
public boolean isPresolved() {
return getTransientDependencies().size() > 0;
}
public static ArtifactSpec createSpec(String gav) {
return createSpec(gav, "compile");
}
public static ArtifactSpec createSpec(String gav, String scope) {
try {
MavenArtifactDescriptor maven = ArtifactSpec.fromMavenGav(gav);
return new ArtifactSpec(
scope,
maven.groupId(),
maven.artifactId(),
maven.version(),
maven.type(),
null,
null
);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void writeTo(File file) {
try {
Writer w = new FileWriter(file);
for (ArtifactSpec key : depTree.keySet()) {
w.write(key.mavenGav());
w.write(":\n");
for (ArtifactSpec s : depTree.get(key)) {
w.write(" - ");
w.write(s.mavenGav());
w.write("\n");
}
}
w.close();
} catch (IOException e) {
throw new RuntimeException("Failed to write dependency tree", e);
}
}
@Override
protected int comparator(ArtifactSpec first, ArtifactSpec second) {
if (first.scope.equals("compile") || first.scope.equals("provided")) {
return -1;
} else if (second.scope.equals("compile") || second.scope.equals("provided")) {
return 1;
}
return 0;
}
private HashSet<ArtifactSpec> allTransient;
}