/* * 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.ivy.plugins.report; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import org.apache.ivy.core.IvyContext; import org.apache.ivy.core.cache.ResolutionCacheManager; import org.apache.ivy.core.report.ArtifactDownloadReport; import org.apache.ivy.core.report.ConfigurationResolveReport; import org.apache.ivy.core.report.ResolveReport; import org.apache.ivy.core.resolve.IvyNode; import org.apache.ivy.core.resolve.IvyNodeEviction.EvictionData; import org.apache.ivy.core.resolve.ResolveOptions; import org.apache.ivy.core.settings.IvySettings; import org.apache.ivy.util.Message; /** * */ public class LogReportOutputter implements ReportOutputter { public String getName() { return CONSOLE; } public void output(ResolveReport report, ResolutionCacheManager cacheMgr, ResolveOptions options) throws IOException { IvySettings settings = IvyContext.getContext().getSettings(); if (settings.logModulesInUse() && ResolveOptions.LOG_DEFAULT.equals(options.getLog())) { Message.info("\t:: modules in use:"); List dependencies = new ArrayList(report.getDependencies()); Collections.sort(dependencies); if (dependencies.size() > 0) { String[] confs = report.getConfigurations(); for (int i = 0; i < dependencies.size(); i++) { IvyNode node = (IvyNode) dependencies.get(i); if (node.isCompletelyEvicted() || node.hasProblem()) { continue; } List nodeConfs = new ArrayList(confs.length); for (int j = 0; j < confs.length; j++) { String conf = confs[j]; if (report.getConfigurationReport(conf).getModuleRevisionIds() .contains(node.getResolvedId())) { nodeConfs.add(conf); } } Message.info("\t" + node + " from " + node.getModuleRevision().getResolver().getName() + " in " + nodeConfs); } } } IvyNode[] evicted = report.getEvictedNodes(); if (evicted.length > 0 && ResolveOptions.LOG_DEFAULT.equals(options.getLog())) { Message.info("\t:: evicted modules:"); for (int i = 0; i < evicted.length; i++) { Collection allEvictingNodes = evicted[i].getAllEvictingNodesDetails(); if (allEvictingNodes == null) { Message.info("\t" + evicted[i] + " transitively in " + Arrays.asList(evicted[i].getEvictedConfs())); } else if (allEvictingNodes.isEmpty()) { Message.info("\t" + evicted[i] + " by [] (" + evicted[i].getAllEvictingConflictManagers() + ") in " + Arrays.asList(evicted[i].getEvictedConfs())); } else { Message.info("\t" + evicted[i] + " by " + allEvictingNodes + " in " + Arrays.asList(evicted[i].getEvictedConfs())); } String[] confs = evicted[i].getEvictedConfs(); for (int j = 0; j < confs.length; j++) { EvictionData evictedData = evicted[i].getEvictedData(confs[j]); if (evictedData.getParent() != null) { Message.verbose("\t in " + evictedData.getParent() + " with " + evictedData.getConflictManager()); } } } } if (ResolveOptions.LOG_DEFAULT.equals(options.getLog())) { // CheckStyle:MagicNumber| OFF char[] sep = new char[69]; Arrays.fill(sep, '-'); Message.rawinfo("\t" + new String(sep)); StringBuffer line = new StringBuffer("\t"); append(line, "", 18); append(line, "modules", 31); line.append("|"); append(line, "artifacts", 15); line.append("|"); Message.rawinfo(line.toString()); line = new StringBuffer("\t"); append(line, "conf", 18); append(line, "number", 7); append(line, "search", 7); append(line, "dwnlded", 7); append(line, "evicted", 7); line.append("|"); append(line, "number", 7); append(line, "dwnlded", 7); // CheckStyle:MagicNumber| ON line.append("|"); Message.rawinfo(line.toString()); Message.rawinfo("\t" + new String(sep)); String[] confs = report.getConfigurations(); for (int i = 0; i < confs.length; i++) { output(report.getConfigurationReport(confs[i])); } Message.rawinfo("\t" + new String(sep)); } IvyNode[] unresolved = report.getUnresolvedDependencies(); if (unresolved.length > 0) { Message.warn("\t::::::::::::::::::::::::::::::::::::::::::::::"); Message.warn("\t:: UNRESOLVED DEPENDENCIES ::"); Message.warn("\t::::::::::::::::::::::::::::::::::::::::::::::"); } for (int i = 0; i < unresolved.length; i++) { Message.warn("\t:: " + unresolved[i] + ": " + unresolved[i].getProblemMessage()); } if (unresolved.length > 0) { Message.warn("\t::::::::::::::::::::::::::::::::::::::::::::::\n"); } ArtifactDownloadReport[] errors = report.getFailedArtifactsReports(); if (errors.length > 0) { Message.warn("\t::::::::::::::::::::::::::::::::::::::::::::::"); Message.warn("\t:: FAILED DOWNLOADS ::"); Message.warn("\t:: ^ see resolution messages for details ^ ::"); Message.warn("\t::::::::::::::::::::::::::::::::::::::::::::::"); } for (int i = 0; i < errors.length; i++) { Message.warn("\t:: " + errors[i].getArtifact()); } if (errors.length > 0) { Message.warn("\t::::::::::::::::::::::::::::::::::::::::::::::\n"); } } public void output(ConfigurationResolveReport report) { StringBuffer line = new StringBuffer("\t"); // CheckStyle:MagicNumber| OFF append(line, report.getConfiguration(), 18); append(line, String.valueOf(report.getNodesNumber()), 7); append(line, String.valueOf(report.getSearchedNodes().length), 7); append(line, String.valueOf(report.getDownloadedNodes().length), 7); append(line, String.valueOf(report.getEvictedNodes().length), 7); line.append("|"); append(line, String.valueOf(report.getArtifactsNumber()), 7); append(line, String.valueOf(report.getDownloadedArtifactsReports().length), 7); // CheckStyle:MagicNumber| ON line.append("|"); Message.rawinfo(line.toString()); } private void append(StringBuffer line, Object o, int limit) { String v = String.valueOf(o); if (v.length() >= limit) { v = v.substring(0, limit); } else { int missing = limit - v.length(); int half = missing / 2; char[] c = new char[limit]; Arrays.fill(c, ' '); System.arraycopy(v.toCharArray(), 0, c, missing - half, v.length()); v = new String(c); } line.append("|"); line.append(v); } }