package aQute.bnd.ant;
import static aQute.libg.slf4j.GradleLogging.LIFECYCLE;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Property;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import aQute.bnd.build.Workspace;
import aQute.bnd.osgi.Constants;
import aQute.lib.strings.Strings;
import aQute.libg.reporter.ReporterAdapter;
import aQute.libg.reporter.ReporterMessages;
import aQute.service.reporter.Reporter;
public class BaseTask extends Task implements Reporter {
private final static Logger logger = LoggerFactory.getLogger(BaseTask.class);
ReporterAdapter reporter = new ReporterAdapter();
List<String> errors = new ArrayList<String>();
List<String> warnings = new ArrayList<String>();
List<String> progress = new ArrayList<String>();
boolean pedantic;
boolean trace;
String onfail;
final List<Property> properties = new LinkedList<Property>();
final List<Property> workspaceProps = new LinkedList<Property>();
final AntMessages messages = ReporterMessages.base(this, AntMessages.class);
boolean exceptions;
static {
Workspace.setDriver(Constants.BNDDRIVER_ANT);
Workspace.addGestalt(Constants.GESTALT_BATCH, null);
}
protected boolean report() {
return report(this);
}
protected boolean report(Reporter reporter) {
int errCount = reporter.getErrors().size();
if (errCount > 0) {
System.err.printf("%d ERRORS%n", errCount);
for (String e : reporter.getErrors()) {
System.err.println(" " + e);
}
return true;
}
int warnCount = reporter.getWarnings().size();
if (warnCount > 0) {
System.err.printf("%d WARNINGS%n", warnCount);
for (String w : reporter.getWarnings()) {
System.err.println(" " + w);
}
}
return false;
}
public static File getFile(File base, String file) {
File f = new File(file);
if (!f.isAbsolute()) {
int n;
f = base.getAbsoluteFile();
while ((n = file.indexOf('/')) > 0) {
String first = file.substring(0, n);
file = file.substring(n + 1);
if (first.equals(".."))
f = f.getParentFile();
else
f = new File(f, first);
}
f = new File(f, file);
}
try {
return f.getCanonicalFile();
} catch (IOException e) {
return f.getAbsoluteFile();
}
}
protected List<String> split(String dependsOn, String string) {
if (dependsOn == null)
return new ArrayList<String>();
return Arrays.asList(string.split("\\s*" + string + "\\s*"));
}
protected String join(Collection< ? > classpath, String string) {
StringBuilder sb = new StringBuilder();
String del = "";
for (Object name : classpath) {
sb.append(del);
sb.append(name);
del = string;
}
return sb.toString();
}
public boolean isPedantic() {
return pedantic;
}
public void setPedantic(boolean pedantic) {
this.pedantic = pedantic;
}
public void setTrace(boolean trace) {
this.trace = trace;
}
public boolean isTrace() {
return trace;
}
/**
* @deprecated Use SLF4J Logger.debug instead.
*/
@Deprecated
public void trace(String s, Object... args) {
if (logger.isDebugEnabled()) {
logger.debug("{}", Strings.format(s, args));
}
}
public void addProperty(Property property) {
properties.add(property);
}
public void addWsproperty(Property property) {
workspaceProps.add(property);
}
public boolean isExceptions() {
return exceptions;
}
public void setExceptions(boolean exceptions) {
this.exceptions = exceptions;
}
public Location getLocation(String msg) {
return reporter.getLocation(msg);
}
public boolean isOk() {
return reporter.isOk();
}
public SetLocation exception(Throwable t, String format, Object... args) {
return reporter.exception(t, format, args);
}
public SetLocation error(String s, Object... args) {
return reporter.error(s, args);
}
public List<String> getErrors() {
return reporter.getErrors();
}
public List<String> getWarnings() {
return reporter.getWarnings();
}
/**
* @deprecated Use SLF4J
* Logger.info(aQute.libg.slf4j.GradleLogging.LIFECYCLE)
* instead.
*/
@Deprecated
public void progress(float progress, String s, Object... args) {
if (logger.isInfoEnabled(LIFECYCLE)) {
String message = Strings.format(s, args);
if (progress > 0)
logger.info(LIFECYCLE, "[{}] {}", (int) progress, message);
else
logger.info(LIFECYCLE, "{}", message);
}
}
public SetLocation warning(String s, Object... args) {
return reporter.warning(s, args);
}
}