/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.gradle.plugins.dependency.checker;
import com.liferay.gradle.plugins.dependency.checker.internal.DependencyChecker;
import com.liferay.gradle.plugins.dependency.checker.internal.DependencyKey;
import com.liferay.gradle.plugins.dependency.checker.internal.MaxAgeDependencyCheckerImpl;
import com.liferay.gradle.util.GradleUtil;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.gradle.StartParameter;
import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.UncheckedIOException;
import org.gradle.api.invocation.Gradle;
import org.gradle.api.logging.Logger;
import org.gradle.util.ConfigureUtil;
/**
* @author Andrea Di Giorgi
*/
public class DependencyCheckerExtension {
public DependencyCheckerExtension(Project project) {
_ignoreFailures = GradleUtil.getProperty(
project, "dependencyCheckerIgnoreFailures", true);
_project = project;
}
public void check(
String configuration, String group, String name, String version) {
Gradle gradle = _project.getGradle();
Logger logger = _project.getLogger();
StartParameter startParameter = gradle.getStartParameter();
if (startParameter.isOffline()) {
if (logger.isWarnEnabled()) {
logger.warn("Build is offline, dependency check disabled");
}
return;
}
DependencyKey dependencyKey = new DependencyKey();
dependencyKey.setConfiguration(configuration);
dependencyKey.setGroup(group);
dependencyKey.setName(name);
DependencyChecker dependencyChecker = _dependencyCheckers.get(
dependencyKey);
if (dependencyChecker == null) {
if (logger.isDebugEnabled()) {
logger.debug(
"No dependency checkers are defined for \"{}:{}:{}\" in " +
"configuration \"{}\"",
group, name, version, configuration);
}
return;
}
if (logger.isDebugEnabled()) {
logger.debug(
"Checking dependency \"{}:{}:{}\" in configuration \"{}\"",
group, name, version, configuration);
}
try {
dependencyChecker.check(group, name, version);
}
catch (Exception e) {
if (!isIgnoreFailures()) {
if (e instanceof IOException) {
throw new UncheckedIOException(e);
}
if (e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new GradleException(e.getMessage(), e);
}
if (e instanceof DependencyCheckerException) {
System.out.println(e.getMessage());
}
else {
logger.error(
"Unable to check dependency '" + group + ":" + name + ":" +
version + "' in configuration '" + configuration + "'",
e);
}
}
}
public boolean isIgnoreFailures() {
return _ignoreFailures;
}
public void maxAge(Map<?, ?> args) {
_add(
new MaxAgeDependencyCheckerImpl(_project.getLogger()), args,
"maxAge", "throwError");
}
public void setIgnoreFailures(boolean ignoreFailures) {
_ignoreFailures = ignoreFailures;
}
private DependencyChecker _add(
DependencyChecker dependencyChecker, Map<?, ?> args,
String... mandatoryKeys) {
Map<Object, Object> dependencyKeyArgs = _extractArgs(
args, _dependencyKeyMandatoryKeys);
DependencyKey dependencyKey = ConfigureUtil.configureByMap(
dependencyKeyArgs, new DependencyKey(),
_dependencyKeyMandatoryKeys);
dependencyChecker = ConfigureUtil.configureByMap(
args, dependencyChecker, Arrays.asList(mandatoryKeys));
_dependencyCheckers.put(dependencyKey, dependencyChecker);
return dependencyChecker;
}
private Map<Object, Object> _extractArgs(
Map<?, ?> args, Collection<?> keys) {
Map<Object, Object> extractedArgs = new HashMap<>();
for (Object key : keys) {
if (args.containsKey(key)) {
Object value = args.remove(key);
extractedArgs.put(key, value);
}
}
return extractedArgs;
}
private static final Collection<String> _dependencyKeyMandatoryKeys =
Arrays.asList("configuration", "group", "name");
private final Map<DependencyKey, DependencyChecker> _dependencyCheckers =
new HashMap<>();
private boolean _ignoreFailures;
private final Project _project;
}