diff --git a/src/main/org/apache/tools/ant/TaskConfigurationChecker.java b/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
index 8cf6a4a1f..4aef6be73 100644
--- a/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
+++ b/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
@@ -1,113 +1,113 @@
-/*
- * 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.tools.ant;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- *
Helper class for the check of the configuration of a given task.
- * This class provides methods for making assumptions about the task configuration.
- * After collecting all violations with assert* and fail
- * methods the checkErrors will throw a BuildException with all collected
- * messages or does nothing if there wasn't any error.
- *
- * Example:
- *
- *
- * public class MyTask extends Task {
- * ...
- * public void execute() {
- * TaskConfigurationChecker checker = TaskConfigurationChecker(this);
- * checker.assertConfig(
- * srcdir != null,
- * "Attribute 'srcdir' must be set.
- * );
- * checker.assertConfig(
- * srcdir.exists(),
- * "Srcdir (" + srcdir + ") must exist."
- * );
- * if (someComplexCondition()) {
- * fail("Complex condition failed.");
- * }
- * checker.checkErrors();
- * }
- * }
- *
- *
- * @see Notification Pattern
- */
-public class TaskConfigurationChecker {
-
- /** List of all collected error messages. */
- private List/**/ errors = new ArrayList();
-
- /** Task for which the configuration should be checked. */
- private final Task task;
-
- /**
- * Constructor.
- * @param task which task should be checked
- */
- public TaskConfigurationChecker(Task task) {
- this.task = task;
- }
-
- /**
- * Asserts that a condition is true.
- * @param condition which condition to check
- * @param errormessage errormessage to throw if a condition failed
- */
- public void assertConfig(boolean condition, String errormessage) {
- if (!condition) {
- errors.add(errormessage);
- }
- }
-
- /**
- * Registers an error.
- * @param errormessage the message for the registered error
- */
- public void fail(String errormessage) {
- errors.add(errormessage);
- }
-
- /**
- * Checks if there are any collected errors and throws a BuildException
- * with all messages if there was one or more.
- * @throws BuildException if one or more errors were registered
- */
- public void checkErrors() throws BuildException {
- if (!errors.isEmpty()) {
- StringBuffer sb = new StringBuffer();
- sb.append("Configurationerror on <");
- sb.append(task.getTaskName());
- sb.append(">:");
- sb.append(System.getProperty("line.separator"));
- for (Iterator it = errors.iterator(); it.hasNext();) {
- String msg = (String) it.next();
- sb.append("- ");
- sb.append(msg);
- sb.append(System.getProperty("line.separator"));
- }
- throw new BuildException(sb.toString(), task.getLocation());
- }
- }
-
-}
+/*
+ * 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.tools.ant;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Helper class for the check of the configuration of a given task.
+ * This class provides methods for making assumptions about the task configuration.
+ * After collecting all violations with assert* and fail
+ * methods the checkErrors will throw a BuildException with all collected
+ * messages or does nothing if there wasn't any error.
+ *
+ * Example:
+ *
+ *
+ * public class MyTask extends Task {
+ * ...
+ * public void execute() {
+ * TaskConfigurationChecker checker = TaskConfigurationChecker(this);
+ * checker.assertConfig(
+ * srcdir != null,
+ * "Attribute 'srcdir' must be set.
+ * );
+ * checker.assertConfig(
+ * srcdir.exists(),
+ * "Srcdir (" + srcdir + ") must exist."
+ * );
+ * if (someComplexCondition()) {
+ * fail("Complex condition failed.");
+ * }
+ * checker.checkErrors();
+ * }
+ * }
+ *
+ *
+ * @see Notification Pattern
+ */
+public class TaskConfigurationChecker {
+
+ /** List of all collected error messages. */
+ private List/**/ errors = new ArrayList();
+
+ /** Task for which the configuration should be checked. */
+ private final Task task;
+
+ /**
+ * Constructor.
+ * @param task which task should be checked
+ */
+ public TaskConfigurationChecker(Task task) {
+ this.task = task;
+ }
+
+ /**
+ * Asserts that a condition is true.
+ * @param condition which condition to check
+ * @param errormessage errormessage to throw if a condition failed
+ */
+ public void assertConfig(boolean condition, String errormessage) {
+ if (!condition) {
+ errors.add(errormessage);
+ }
+ }
+
+ /**
+ * Registers an error.
+ * @param errormessage the message for the registered error
+ */
+ public void fail(String errormessage) {
+ errors.add(errormessage);
+ }
+
+ /**
+ * Checks if there are any collected errors and throws a BuildException
+ * with all messages if there was one or more.
+ * @throws BuildException if one or more errors were registered
+ */
+ public void checkErrors() throws BuildException {
+ if (!errors.isEmpty()) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("Configurationerror on <");
+ sb.append(task.getTaskName());
+ sb.append(">:");
+ sb.append(System.getProperty("line.separator"));
+ for (Iterator it = errors.iterator(); it.hasNext();) {
+ String msg = (String) it.next();
+ sb.append("- ");
+ sb.append(msg);
+ sb.append(System.getProperty("line.separator"));
+ }
+ throw new BuildException(sb.toString(), task.getLocation());
+ }
+ }
+
+}
diff --git a/src/main/org/apache/tools/ant/input/SecureInputHandler.java b/src/main/org/apache/tools/ant/input/SecureInputHandler.java
index 71d1cfd08..ca935efd9 100644
--- a/src/main/org/apache/tools/ant/input/SecureInputHandler.java
+++ b/src/main/org/apache/tools/ant/input/SecureInputHandler.java
@@ -1,60 +1,60 @@
-/*
- * 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.tools.ant.input;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.ReflectUtil;
-
-/**
- * Prompts and requests input. May loop until a valid input has
- * been entered. Doesn't echo input (requires Java6). If Java6 is not
- * available, fallsback to the DefaultHandler (insecure).
- * @since Ant 1.7.1
- */
-public class SecureInputHandler extends DefaultInputHandler {
-
- /**
- * Default no-args constructor
- */
- public SecureInputHandler() {
- }
-
- /**
- * Handle the input
- * @param request the request to handle
- * @throws BuildException if not possible to read from console
- */
- public void handleInput(InputRequest request) throws BuildException {
- String prompt = getPrompt(request);
- try {
- Class system = Class.forName("java.lang.System");
- Object console = ReflectUtil.invokeStatic(system, "console");
- do {
- char[] input = (char[]) ReflectUtil.invoke(
- console, "readPassword", String.class, prompt,
- Object[].class, (Object[]) null);
- request.setInput(new String(input));
- /* for security zero char array after retrieving value */
- java.util.Arrays.fill(input, ' ');
- } while (!request.isInputValid());
- } catch (Exception e) {
- /* Java6 not present use default handler */
- super.handleInput(request);
- }
- }
+/*
+ * 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.tools.ant.input;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.util.ReflectUtil;
+
+/**
+ * Prompts and requests input. May loop until a valid input has
+ * been entered. Doesn't echo input (requires Java6). If Java6 is not
+ * available, fallsback to the DefaultHandler (insecure).
+ * @since Ant 1.7.1
+ */
+public class SecureInputHandler extends DefaultInputHandler {
+
+ /**
+ * Default no-args constructor
+ */
+ public SecureInputHandler() {
+ }
+
+ /**
+ * Handle the input
+ * @param request the request to handle
+ * @throws BuildException if not possible to read from console
+ */
+ public void handleInput(InputRequest request) throws BuildException {
+ String prompt = getPrompt(request);
+ try {
+ Class system = Class.forName("java.lang.System");
+ Object console = ReflectUtil.invokeStatic(system, "console");
+ do {
+ char[] input = (char[]) ReflectUtil.invoke(
+ console, "readPassword", String.class, prompt,
+ Object[].class, (Object[]) null);
+ request.setInput(new String(input));
+ /* for security zero char array after retrieving value */
+ java.util.Arrays.fill(input, ' ');
+ } while (!request.isInputValid());
+ } catch (Exception e) {
+ /* Java6 not present use default handler */
+ super.handleInput(request);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/org/apache/tools/ant/listener/ProfileLogger.java b/src/main/org/apache/tools/ant/listener/ProfileLogger.java
index 5517b7608..5c7cfb1fb 100644
--- a/src/main/org/apache/tools/ant/listener/ProfileLogger.java
+++ b/src/main/org/apache/tools/ant/listener/ProfileLogger.java
@@ -1,112 +1,112 @@
-/*
- * 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.tools.ant.listener;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * This is a special logger that is designed to profile builds.
- *
- * @since Ant1.8
- */
-public class ProfileLogger extends DefaultLogger {
-
- private Map profileData = new HashMap(); //
-
- /**
- * Logs a message to say that the target has started.
- *
- * @param event
- * An event with any relevant extra information. Must not be
- * null
.
- */
- public void targetStarted(BuildEvent event) {
- Date now = new Date();
- String name = "Target " + event.getTarget().getName();
- logStart(event, now, name);
- profileData.put(event.getTarget(), now);
- }
-
- /**
- * Logs a message to say that the target has finished.
- *
- * @param event
- * An event with any relevant extra information. Must not be
- * null
.
- */
- public void targetFinished(BuildEvent event) {
- Date start = (Date) profileData.remove(event.getTarget());
- String name = "Target " + event.getTarget().getName();
- logFinish(event, start, name);
- }
-
- /**
- * Logs a message to say that the task has started.
- *
- * @param event
- * An event with any relevant extra information. Must not be
- * null
.
- */
- public void taskStarted(BuildEvent event) {
- String name = event.getTask().getTaskName();
- Date now = new Date();
- logStart(event, now, name);
- profileData.put(event.getTask(), now);
- }
-
- /**
- * Logs a message to say that the task has finished.
- *
- * @param event
- * An event with any relevant extra information. Must not be
- * null
.
- */
- public void taskFinished(BuildEvent event) {
- Date start = (Date) profileData.remove(event.getTask());
- String name = event.getTask().getTaskName();
- logFinish(event, start, name);
- }
-
- private void logFinish(BuildEvent event, Date start, String name) {
- Date now = new Date();
- String msg = null;
- if (start != null) {
- long diff = now.getTime() - start.getTime();
- msg = StringUtils.LINE_SEP + name + ": finished" + now + " ("
- + diff + "ms)";
- } else {
- msg = StringUtils.LINE_SEP + name + ": finished" + now
- + " (unknown duration, start not detected)";
- }
- printMessage(msg, out, event.getPriority());
- log(msg);
- }
-
- private void logStart(BuildEvent event, Date start, String name) {
- String msg = StringUtils.LINE_SEP + name + ": started " + start;
- printMessage(msg, out, event.getPriority());
- log(msg);
- }
-
-}
+/*
+ * 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.tools.ant.listener;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.DefaultLogger;
+import org.apache.tools.ant.util.StringUtils;
+
+/**
+ * This is a special logger that is designed to profile builds.
+ *
+ * @since Ant1.8
+ */
+public class ProfileLogger extends DefaultLogger {
+
+ private Map profileData = new HashMap(); //
+
+ /**
+ * Logs a message to say that the target has started.
+ *
+ * @param event
+ * An event with any relevant extra information. Must not be
+ * null
.
+ */
+ public void targetStarted(BuildEvent event) {
+ Date now = new Date();
+ String name = "Target " + event.getTarget().getName();
+ logStart(event, now, name);
+ profileData.put(event.getTarget(), now);
+ }
+
+ /**
+ * Logs a message to say that the target has finished.
+ *
+ * @param event
+ * An event with any relevant extra information. Must not be
+ * null
.
+ */
+ public void targetFinished(BuildEvent event) {
+ Date start = (Date) profileData.remove(event.getTarget());
+ String name = "Target " + event.getTarget().getName();
+ logFinish(event, start, name);
+ }
+
+ /**
+ * Logs a message to say that the task has started.
+ *
+ * @param event
+ * An event with any relevant extra information. Must not be
+ * null
.
+ */
+ public void taskStarted(BuildEvent event) {
+ String name = event.getTask().getTaskName();
+ Date now = new Date();
+ logStart(event, now, name);
+ profileData.put(event.getTask(), now);
+ }
+
+ /**
+ * Logs a message to say that the task has finished.
+ *
+ * @param event
+ * An event with any relevant extra information. Must not be
+ * null
.
+ */
+ public void taskFinished(BuildEvent event) {
+ Date start = (Date) profileData.remove(event.getTask());
+ String name = event.getTask().getTaskName();
+ logFinish(event, start, name);
+ }
+
+ private void logFinish(BuildEvent event, Date start, String name) {
+ Date now = new Date();
+ String msg = null;
+ if (start != null) {
+ long diff = now.getTime() - start.getTime();
+ msg = StringUtils.LINE_SEP + name + ": finished" + now + " ("
+ + diff + "ms)";
+ } else {
+ msg = StringUtils.LINE_SEP + name + ": finished" + now
+ + " (unknown duration, start not detected)";
+ }
+ printMessage(msg, out, event.getPriority());
+ log(msg);
+ }
+
+ private void logStart(BuildEvent event, Date start, String name) {
+ String msg = StringUtils.LINE_SEP + name + ": started " + start;
+ printMessage(msg, out, event.getPriority());
+ log(msg);
+ }
+
+}
diff --git a/src/main/org/apache/tools/ant/taskdefs/HostInfo.java b/src/main/org/apache/tools/ant/taskdefs/HostInfo.java
index 3aca2f748..1b1b03019 100644
--- a/src/main/org/apache/tools/ant/taskdefs/HostInfo.java
+++ b/src/main/org/apache/tools/ant/taskdefs/HostInfo.java
@@ -1,247 +1,247 @@
-/*
- * 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.tools.ant.taskdefs;
-
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-/**
- * Sets properties to the host provided, or localhost if no information is
- * provided. The default properties are NAME, FQDN, ADDR4, ADDR6;
- *
- * @since Ant 1.8
- * @ant.task category="utility"
- */
-
-
-public class HostInfo extends Task {
- private static final String DEF_REM_ADDR6 = "::";
-
- private static final String DEF_REM_ADDR4 = "0.0.0.0";
-
- private static final String DEF_LOCAL_ADDR6 = "::1";
-
- private static final String DEF_LOCAL_ADDR4 = "127.0.0.1";
-
- private static final String DEF_LOCAL_NAME = "localhost";
- private static final String DEF_DOMAIN = "localdomain";
-
- private static final String DOMAIN = "DOMAIN";
-
- private static final String NAME = "NAME";
-
- private static final String ADDR4 = "ADDR4";
-
- private static final String ADDR6 = "ADDR6";
-
- private String prefix = "";
-
- private String host;
-
- private InetAddress nameAddr;
-
- private InetAddress best6;
-
- private InetAddress best4;
-
- private List inetAddrs;
-
- /**
- * Set a prefix for the properties. If the prefix does not end with a "."
- * one is automatically added.
- *
- * @param aPrefix
- * the prefix to use.
- * @since Ant 1.8
- */
- public void setPrefix(String aPrefix) {
- prefix = aPrefix;
- if (!prefix.endsWith(".")) {
- prefix += ".";
- }
- }
-
- /**
- * Set the host to be retrieved.
- *
- * @param aHost
- * the name or the address of the host, data for the local host
- * will be retrieved if ommited.
- * @since Ant 1.8
- */
- public void setHost(String aHost) {
- host = aHost;
- }
-
- /**
- * set the properties.
- *
- * @throws BuildException
- * on error.
- */
- public void execute() throws BuildException {
- if (host == null || "".equals(host)) {
- executeLocal();
- } else {
- executeRemote();
- }
- }
-
- private void executeLocal() {
- try {
- Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
- inetAddrs = new LinkedList();
- while (interfaces.hasMoreElements()) {
- NetworkInterface currentif = (NetworkInterface) interfaces
- .nextElement();
- Enumeration addrs = currentif.getInetAddresses();
- while (addrs.hasMoreElements())
- {
- inetAddrs.add(addrs.nextElement());
- }
- }
- selectAddresses();
-
- if (nameAddr != null) {
- setDomainAndName(nameAddr.getCanonicalHostName());
- } else {
- setProperty(DOMAIN, DEF_DOMAIN);
- setProperty(NAME, DEF_LOCAL_NAME);
- }
- if (best4 != null) {
- setProperty(ADDR4, best4.getHostAddress());
- } else {
- setProperty(ADDR4, DEF_LOCAL_ADDR4);
- }
- if (best6 != null) {
- setProperty(ADDR6, best6.getHostAddress());
- } else {
- setProperty(ADDR6, DEF_LOCAL_ADDR6);
- }
- } catch (Exception e) {
- log("Error retrieving local host information", e, Project.MSG_WARN);
- setProperty(DOMAIN, DEF_DOMAIN);
- setProperty(NAME, DEF_LOCAL_NAME);
- setProperty(ADDR4, DEF_LOCAL_ADDR4);
- setProperty(ADDR6, DEF_LOCAL_ADDR6);
- }
- }
-
- private void selectAddresses() {
- Iterator i = inetAddrs.iterator();
- while (i.hasNext()) {
- InetAddress current = (InetAddress) i.next();
- if (!current.isMulticastAddress()) {
- if (current instanceof Inet4Address) {
- best4 = selectBestAddress(best4, current);
- } else if (current instanceof Inet6Address) {
- best6 = selectBestAddress(best6, current);
- }
- }
- }
-
- nameAddr = selectBestAddress(best6, best4);
- }
-
- private InetAddress selectBestAddress(InetAddress bestSoFar,
- InetAddress current) {
- InetAddress best = bestSoFar;
- if (best == null) {
- // none selected so far, so this one is better.
- best = current;
- } else {
- if (current.isLoopbackAddress()) {
- // definitely not better than the previously selected address.
- } else if (current.isLinkLocalAddress()) {
- // link local considered better than loopback
- if (best.isLoopbackAddress()) {
- best = current;
- }
- } else if (current.isSiteLocalAddress()) {
- // site local considered better than link local (and loopback)
- if (best.isLoopbackAddress() || best.isLinkLocalAddress()) {
- best = current;
- }
- } else {
- // current is a global address, and therefore best (at least
- // equally well)
- best = current;
- }
- }
- return best;
- }
-
- private void executeRemote() {
- try {
- inetAddrs = Arrays.asList(InetAddress.getAllByName(host));
-
- selectAddresses();
-
- if (nameAddr != null) {
- setDomainAndName(nameAddr.getCanonicalHostName());
- } else {
- setDomainAndName(host);
- }
- if (best4 != null) {
- setProperty(ADDR4, best4.getHostAddress());
- } else {
- setProperty(ADDR4, DEF_REM_ADDR4);
- }
- if (best6 != null) {
- setProperty(ADDR6, best6.getHostAddress());
- } else {
- setProperty(ADDR6, DEF_REM_ADDR6);
- }
- } catch (Exception e) {
- log("Error retrieving remote host information for host:" + host
- + ".", e, Project.MSG_WARN);
- setDomainAndName(host);
- setProperty(ADDR4, DEF_REM_ADDR4);
- setProperty(ADDR6, DEF_REM_ADDR6);
- }
- }
-
- private void setDomainAndName(String fqdn)
- {
- int idx = fqdn.indexOf('.');
- if (idx > 0) {
- setProperty(NAME, fqdn.substring(0, idx));
- setProperty(DOMAIN, fqdn.substring(idx+1));
- } else {
- setProperty(NAME, fqdn);
- setProperty(DOMAIN, DEF_DOMAIN);
- }
- }
-
- private void setProperty(String name, String value) {
- getProject().setNewProperty(prefix + name, value);
- }
-
-}
+/*
+ * 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.tools.ant.taskdefs;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+/**
+ * Sets properties to the host provided, or localhost if no information is
+ * provided. The default properties are NAME, FQDN, ADDR4, ADDR6;
+ *
+ * @since Ant 1.8
+ * @ant.task category="utility"
+ */
+
+
+public class HostInfo extends Task {
+ private static final String DEF_REM_ADDR6 = "::";
+
+ private static final String DEF_REM_ADDR4 = "0.0.0.0";
+
+ private static final String DEF_LOCAL_ADDR6 = "::1";
+
+ private static final String DEF_LOCAL_ADDR4 = "127.0.0.1";
+
+ private static final String DEF_LOCAL_NAME = "localhost";
+ private static final String DEF_DOMAIN = "localdomain";
+
+ private static final String DOMAIN = "DOMAIN";
+
+ private static final String NAME = "NAME";
+
+ private static final String ADDR4 = "ADDR4";
+
+ private static final String ADDR6 = "ADDR6";
+
+ private String prefix = "";
+
+ private String host;
+
+ private InetAddress nameAddr;
+
+ private InetAddress best6;
+
+ private InetAddress best4;
+
+ private List inetAddrs;
+
+ /**
+ * Set a prefix for the properties. If the prefix does not end with a "."
+ * one is automatically added.
+ *
+ * @param aPrefix
+ * the prefix to use.
+ * @since Ant 1.8
+ */
+ public void setPrefix(String aPrefix) {
+ prefix = aPrefix;
+ if (!prefix.endsWith(".")) {
+ prefix += ".";
+ }
+ }
+
+ /**
+ * Set the host to be retrieved.
+ *
+ * @param aHost
+ * the name or the address of the host, data for the local host
+ * will be retrieved if ommited.
+ * @since Ant 1.8
+ */
+ public void setHost(String aHost) {
+ host = aHost;
+ }
+
+ /**
+ * set the properties.
+ *
+ * @throws BuildException
+ * on error.
+ */
+ public void execute() throws BuildException {
+ if (host == null || "".equals(host)) {
+ executeLocal();
+ } else {
+ executeRemote();
+ }
+ }
+
+ private void executeLocal() {
+ try {
+ Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
+ inetAddrs = new LinkedList();
+ while (interfaces.hasMoreElements()) {
+ NetworkInterface currentif = (NetworkInterface) interfaces
+ .nextElement();
+ Enumeration addrs = currentif.getInetAddresses();
+ while (addrs.hasMoreElements())
+ {
+ inetAddrs.add(addrs.nextElement());
+ }
+ }
+ selectAddresses();
+
+ if (nameAddr != null) {
+ setDomainAndName(nameAddr.getCanonicalHostName());
+ } else {
+ setProperty(DOMAIN, DEF_DOMAIN);
+ setProperty(NAME, DEF_LOCAL_NAME);
+ }
+ if (best4 != null) {
+ setProperty(ADDR4, best4.getHostAddress());
+ } else {
+ setProperty(ADDR4, DEF_LOCAL_ADDR4);
+ }
+ if (best6 != null) {
+ setProperty(ADDR6, best6.getHostAddress());
+ } else {
+ setProperty(ADDR6, DEF_LOCAL_ADDR6);
+ }
+ } catch (Exception e) {
+ log("Error retrieving local host information", e, Project.MSG_WARN);
+ setProperty(DOMAIN, DEF_DOMAIN);
+ setProperty(NAME, DEF_LOCAL_NAME);
+ setProperty(ADDR4, DEF_LOCAL_ADDR4);
+ setProperty(ADDR6, DEF_LOCAL_ADDR6);
+ }
+ }
+
+ private void selectAddresses() {
+ Iterator i = inetAddrs.iterator();
+ while (i.hasNext()) {
+ InetAddress current = (InetAddress) i.next();
+ if (!current.isMulticastAddress()) {
+ if (current instanceof Inet4Address) {
+ best4 = selectBestAddress(best4, current);
+ } else if (current instanceof Inet6Address) {
+ best6 = selectBestAddress(best6, current);
+ }
+ }
+ }
+
+ nameAddr = selectBestAddress(best6, best4);
+ }
+
+ private InetAddress selectBestAddress(InetAddress bestSoFar,
+ InetAddress current) {
+ InetAddress best = bestSoFar;
+ if (best == null) {
+ // none selected so far, so this one is better.
+ best = current;
+ } else {
+ if (current.isLoopbackAddress()) {
+ // definitely not better than the previously selected address.
+ } else if (current.isLinkLocalAddress()) {
+ // link local considered better than loopback
+ if (best.isLoopbackAddress()) {
+ best = current;
+ }
+ } else if (current.isSiteLocalAddress()) {
+ // site local considered better than link local (and loopback)
+ if (best.isLoopbackAddress() || best.isLinkLocalAddress()) {
+ best = current;
+ }
+ } else {
+ // current is a global address, and therefore best (at least
+ // equally well)
+ best = current;
+ }
+ }
+ return best;
+ }
+
+ private void executeRemote() {
+ try {
+ inetAddrs = Arrays.asList(InetAddress.getAllByName(host));
+
+ selectAddresses();
+
+ if (nameAddr != null) {
+ setDomainAndName(nameAddr.getCanonicalHostName());
+ } else {
+ setDomainAndName(host);
+ }
+ if (best4 != null) {
+ setProperty(ADDR4, best4.getHostAddress());
+ } else {
+ setProperty(ADDR4, DEF_REM_ADDR4);
+ }
+ if (best6 != null) {
+ setProperty(ADDR6, best6.getHostAddress());
+ } else {
+ setProperty(ADDR6, DEF_REM_ADDR6);
+ }
+ } catch (Exception e) {
+ log("Error retrieving remote host information for host:" + host
+ + ".", e, Project.MSG_WARN);
+ setDomainAndName(host);
+ setProperty(ADDR4, DEF_REM_ADDR4);
+ setProperty(ADDR6, DEF_REM_ADDR6);
+ }
+ }
+
+ private void setDomainAndName(String fqdn)
+ {
+ int idx = fqdn.indexOf('.');
+ if (idx > 0) {
+ setProperty(NAME, fqdn.substring(0, idx));
+ setProperty(DOMAIN, fqdn.substring(idx+1));
+ } else {
+ setProperty(NAME, fqdn);
+ setProperty(DOMAIN, DEF_DOMAIN);
+ }
+ }
+
+ private void setProperty(String name, String value) {
+ getProject().setNewProperty(prefix + name, value);
+ }
+
+}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Retry.java b/src/main/org/apache/tools/ant/taskdefs/Retry.java
index 200259e16..ece55a025 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Retry.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Retry.java
@@ -1,89 +1,89 @@
-/*
- * 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.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Retries the nested task a set number of times
- * @since Ant 1.7.1
- */
-public class Retry extends Task implements TaskContainer {
-
- /**
- * task to execute n times
- */
- private Task nestedTask;
-
- /**
- * set retryCount to 1 by default
- */
- private int retryCount = 1;
-
- /**
- * set the task
- * @param t the task to retry.
- */
- public synchronized void addTask(Task t) {
- if (nestedTask != null) {
- throw new BuildException(
- "The retry task container accepts a single nested task"
- + " (which may be a sequential task container)");
- }
- nestedTask = t;
- }
-
- /**
- * set the number of times to retry the task
- * @param n the number to use.
- */
- public void setRetryCount(int n) {
- retryCount = n;
- }
-
- /**
- * perform the work
- * @throws BuildException if there is an error.
- */
- public void execute() throws BuildException {
- StringBuffer errorMessages = new StringBuffer();
- for (int i = 0; i <= retryCount; i++) {
- try {
- nestedTask.perform();
- break;
- } catch (Exception e) {
- errorMessages.append(e.getMessage());
- if (i >= retryCount) {
- StringBuffer exceptionMessage = new StringBuffer();
- exceptionMessage.append("Task [").append(nestedTask.getTaskName());
- exceptionMessage.append("] failed after [").append(retryCount);
- exceptionMessage.append("] attempts; giving up.").append(StringUtils.LINE_SEP);
- exceptionMessage.append("Error messages:").append(StringUtils.LINE_SEP);
- exceptionMessage.append(errorMessages);
- throw new BuildException(exceptionMessage.toString(), getLocation());
- }
- log("Attempt [" + i + "]: error occurred; retrying...", e, Project.MSG_INFO);
- errorMessages.append(StringUtils.LINE_SEP);
- }
- }
- }
+/*
+ * 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.tools.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskContainer;
+import org.apache.tools.ant.util.StringUtils;
+
+/**
+ * Retries the nested task a set number of times
+ * @since Ant 1.7.1
+ */
+public class Retry extends Task implements TaskContainer {
+
+ /**
+ * task to execute n times
+ */
+ private Task nestedTask;
+
+ /**
+ * set retryCount to 1 by default
+ */
+ private int retryCount = 1;
+
+ /**
+ * set the task
+ * @param t the task to retry.
+ */
+ public synchronized void addTask(Task t) {
+ if (nestedTask != null) {
+ throw new BuildException(
+ "The retry task container accepts a single nested task"
+ + " (which may be a sequential task container)");
+ }
+ nestedTask = t;
+ }
+
+ /**
+ * set the number of times to retry the task
+ * @param n the number to use.
+ */
+ public void setRetryCount(int n) {
+ retryCount = n;
+ }
+
+ /**
+ * perform the work
+ * @throws BuildException if there is an error.
+ */
+ public void execute() throws BuildException {
+ StringBuffer errorMessages = new StringBuffer();
+ for (int i = 0; i <= retryCount; i++) {
+ try {
+ nestedTask.perform();
+ break;
+ } catch (Exception e) {
+ errorMessages.append(e.getMessage());
+ if (i >= retryCount) {
+ StringBuffer exceptionMessage = new StringBuffer();
+ exceptionMessage.append("Task [").append(nestedTask.getTaskName());
+ exceptionMessage.append("] failed after [").append(retryCount);
+ exceptionMessage.append("] attempts; giving up.").append(StringUtils.LINE_SEP);
+ exceptionMessage.append("Error messages:").append(StringUtils.LINE_SEP);
+ exceptionMessage.append(errorMessages);
+ throw new BuildException(exceptionMessage.toString(), getLocation());
+ }
+ log("Attempt [" + i + "]: error occurred; retrying...", e, Project.MSG_INFO);
+ errorMessages.append(StringUtils.LINE_SEP);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/HasFreeSpace.java b/src/main/org/apache/tools/ant/taskdefs/condition/HasFreeSpace.java
index 7afe87f26..420c18946 100644
--- a/src/main/org/apache/tools/ant/taskdefs/condition/HasFreeSpace.java
+++ b/src/main/org/apache/tools/ant/taskdefs/condition/HasFreeSpace.java
@@ -1,101 +1,101 @@
-/*
- * 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.tools.ant.taskdefs.condition;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.JavaEnvUtils;
-import org.apache.tools.ant.util.ReflectWrapper;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * <hasfreespace>
- * Condition returns true if selected partition
- * has the requested space, false otherwise.
- * @since Ant 1.7
- */
-public class HasFreeSpace implements Condition {
-
- private String partition;
- private String needed;
-
- /**
- * Evaluate the condition.
- * @return true if there enough free space.
- * @throws BuildException if there is a problem.
- */
- public boolean eval() throws BuildException {
- validate();
- try {
- if (JavaEnvUtils.isAtLeastJavaVersion("1.6")) {
- //reflection to avoid bootstrap/build problems
- File fs = new File(partition);
- ReflectWrapper w = new ReflectWrapper(fs);
- long free = ((Long) w.invoke("getFreeSpace")).longValue();
- return free >= StringUtils.parseHumanSizes(needed);
- } else {
- throw new BuildException("HasFreeSpace condition not supported on Java5 or less.");
- }
- } catch (Exception e) {
- throw new BuildException(e);
- }
- }
-
- private void validate() throws BuildException {
- if (null == partition) {
- throw new BuildException("Please set the partition attribute.");
- }
- if (null == needed) {
- throw new BuildException("Please set the needed attribute.");
- }
- }
-
- /**
- * The partition/device to check
- * @return the partition.
- */
- public String getPartition() {
- return partition;
- }
-
- /**
- * Set the partition name.
- * @param partition the name to use.
- */
- public void setPartition(String partition) {
- this.partition = partition;
- }
-
- /**
- * The amount of free space required
- * @return the amount required
- */
- public String getNeeded() {
- return needed;
- }
-
- /**
- * Set the amount of space required.
- * @param needed the amount required.
- */
- public void setNeeded(String needed) {
- this.needed = needed;
- }
-}
+/*
+ * 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.tools.ant.taskdefs.condition;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.util.JavaEnvUtils;
+import org.apache.tools.ant.util.ReflectWrapper;
+import org.apache.tools.ant.util.StringUtils;
+
+/**
+ * <hasfreespace>
+ * Condition returns true if selected partition
+ * has the requested space, false otherwise.
+ * @since Ant 1.7
+ */
+public class HasFreeSpace implements Condition {
+
+ private String partition;
+ private String needed;
+
+ /**
+ * Evaluate the condition.
+ * @return true if there enough free space.
+ * @throws BuildException if there is a problem.
+ */
+ public boolean eval() throws BuildException {
+ validate();
+ try {
+ if (JavaEnvUtils.isAtLeastJavaVersion("1.6")) {
+ //reflection to avoid bootstrap/build problems
+ File fs = new File(partition);
+ ReflectWrapper w = new ReflectWrapper(fs);
+ long free = ((Long) w.invoke("getFreeSpace")).longValue();
+ return free >= StringUtils.parseHumanSizes(needed);
+ } else {
+ throw new BuildException("HasFreeSpace condition not supported on Java5 or less.");
+ }
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ private void validate() throws BuildException {
+ if (null == partition) {
+ throw new BuildException("Please set the partition attribute.");
+ }
+ if (null == needed) {
+ throw new BuildException("Please set the needed attribute.");
+ }
+ }
+
+ /**
+ * The partition/device to check
+ * @return the partition.
+ */
+ public String getPartition() {
+ return partition;
+ }
+
+ /**
+ * Set the partition name.
+ * @param partition the name to use.
+ */
+ public void setPartition(String partition) {
+ this.partition = partition;
+ }
+
+ /**
+ * The amount of free space required
+ * @return the amount required
+ */
+ public String getNeeded() {
+ return needed;
+ }
+
+ /**
+ * Set the amount of space required.
+ * @param needed the amount required.
+ */
+ public void setNeeded(String needed) {
+ this.needed = needed;
+ }
+}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java b/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java
index f636ad063..76a9ad35d 100644
--- a/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java
+++ b/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java
@@ -1,165 +1,165 @@
-/*
- * 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.tools.ant.taskdefs.condition;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Resource;
-import org.apache.tools.ant.types.ResourceCollection;
-import org.apache.tools.ant.types.resources.FileResource;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * <resourcecontains>
- * Is a string contained in a resource (file currently)?
- * @since Ant 1.7.1
- */
-public class ResourceContains implements Condition {
-
- private Project project;
- private String substring;
- private Resource resource;
- private String refid;
- private boolean casesensitive = true;
-
- /**
- * Set this condition's Project.
- * @param project Project
- */
- public void setProject(Project project) {
- this.project = project;
- }
-
- /**
- * Get this condition's Project.
- * @return Project
- */
- public Project getProject() {
- return project;
- }
-
- /**
- * Sets the resource to search
- * @param r the value to use.
- */
- public void setResource(String r) {
- this.resource = new FileResource(new File(r));
- }
-
- /**
- * Sets the refid to search; should indicate a resource directly
- * or by way of a single-element ResourceCollection.
- * @param refid the value to use.
- */
- public void setRefid(String refid) {
- this.refid = refid;
- }
-
- private void resolveRefid() {
- try {
- if (getProject() == null) {
- throw new BuildException("Cannot retrieve refid; project unset");
- }
- Object o = getProject().getReference(refid);
- if (!(o instanceof Resource)) {
- if (o instanceof ResourceCollection) {
- ResourceCollection rc = (ResourceCollection) o;
- if (rc.size() == 1) {
- o = rc.iterator().next();
- }
- } else {
- throw new BuildException(
- "Illegal value at '" + refid + "': " + String.valueOf(o));
- }
- }
- this.resource = (Resource) o;
- } finally {
- refid = null;
- }
- }
-
- /**
- * Sets the substring to look for
- * @param substring the value to use.
- */
- public void setSubstring(String substring) {
- this.substring = substring;
- }
-
- /**
- * Sets case sensitivity attribute.
- * @param casesensitive the value to use.
- */
- public void setCasesensitive(boolean casesensitive) {
- this.casesensitive = casesensitive;
- }
-
- private void validate() {
- if (resource != null && refid != null) {
- throw new BuildException("Cannot set both resource and refid");
- }
- if (resource == null && refid != null) {
- resolveRefid();
- }
- if (resource == null || substring == null) {
- throw new BuildException("both resource and substring are required "
- + "in ");
- }
- }
-
- /**
- * Evaluates the condition.
- * @return true if the substring is contained in the resource
- * @throws BuildException if there is a problem.
- */
- public synchronized boolean eval() throws BuildException {
- validate();
-
- if (substring.length() == 0) {
- if (getProject() != null) {
- getProject().log("Substring is empty; returning true",
- Project.MSG_VERBOSE);
- }
- return true;
- }
- if (resource.getSize() == 0) {
- return false;
- }
-
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new InputStreamReader(resource.getInputStream()));
- String contents = FileUtils.safeReadFully(reader);
- String sub = substring;
- if (!casesensitive) {
- contents = contents.toLowerCase();
- sub = sub.toLowerCase();
- }
- return contents.indexOf(sub) >= 0;
- } catch (IOException e) {
- throw new BuildException("There was a problem accessing resource : " + resource);
- } finally {
- FileUtils.close(reader);
- }
- }
-}
+/*
+ * 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.tools.ant.taskdefs.condition;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
+import org.apache.tools.ant.types.resources.FileResource;
+import org.apache.tools.ant.util.FileUtils;
+
+/**
+ * <resourcecontains>
+ * Is a string contained in a resource (file currently)?
+ * @since Ant 1.7.1
+ */
+public class ResourceContains implements Condition {
+
+ private Project project;
+ private String substring;
+ private Resource resource;
+ private String refid;
+ private boolean casesensitive = true;
+
+ /**
+ * Set this condition's Project.
+ * @param project Project
+ */
+ public void setProject(Project project) {
+ this.project = project;
+ }
+
+ /**
+ * Get this condition's Project.
+ * @return Project
+ */
+ public Project getProject() {
+ return project;
+ }
+
+ /**
+ * Sets the resource to search
+ * @param r the value to use.
+ */
+ public void setResource(String r) {
+ this.resource = new FileResource(new File(r));
+ }
+
+ /**
+ * Sets the refid to search; should indicate a resource directly
+ * or by way of a single-element ResourceCollection.
+ * @param refid the value to use.
+ */
+ public void setRefid(String refid) {
+ this.refid = refid;
+ }
+
+ private void resolveRefid() {
+ try {
+ if (getProject() == null) {
+ throw new BuildException("Cannot retrieve refid; project unset");
+ }
+ Object o = getProject().getReference(refid);
+ if (!(o instanceof Resource)) {
+ if (o instanceof ResourceCollection) {
+ ResourceCollection rc = (ResourceCollection) o;
+ if (rc.size() == 1) {
+ o = rc.iterator().next();
+ }
+ } else {
+ throw new BuildException(
+ "Illegal value at '" + refid + "': " + String.valueOf(o));
+ }
+ }
+ this.resource = (Resource) o;
+ } finally {
+ refid = null;
+ }
+ }
+
+ /**
+ * Sets the substring to look for
+ * @param substring the value to use.
+ */
+ public void setSubstring(String substring) {
+ this.substring = substring;
+ }
+
+ /**
+ * Sets case sensitivity attribute.
+ * @param casesensitive the value to use.
+ */
+ public void setCasesensitive(boolean casesensitive) {
+ this.casesensitive = casesensitive;
+ }
+
+ private void validate() {
+ if (resource != null && refid != null) {
+ throw new BuildException("Cannot set both resource and refid");
+ }
+ if (resource == null && refid != null) {
+ resolveRefid();
+ }
+ if (resource == null || substring == null) {
+ throw new BuildException("both resource and substring are required "
+ + "in ");
+ }
+ }
+
+ /**
+ * Evaluates the condition.
+ * @return true if the substring is contained in the resource
+ * @throws BuildException if there is a problem.
+ */
+ public synchronized boolean eval() throws BuildException {
+ validate();
+
+ if (substring.length() == 0) {
+ if (getProject() != null) {
+ getProject().log("Substring is empty; returning true",
+ Project.MSG_VERBOSE);
+ }
+ return true;
+ }
+ if (resource.getSize() == 0) {
+ return false;
+ }
+
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new InputStreamReader(resource.getInputStream()));
+ String contents = FileUtils.safeReadFully(reader);
+ String sub = substring;
+ if (!casesensitive) {
+ contents = contents.toLowerCase();
+ sub = sub.toLowerCase();
+ }
+ return contents.indexOf(sub) >= 0;
+ } catch (IOException e) {
+ throw new BuildException("There was a problem accessing resource : " + resource);
+ } finally {
+ FileUtils.close(reader);
+ }
+ }
+}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FailureRecorder.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FailureRecorder.java
index cf40922de..36dcddbb6 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FailureRecorder.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FailureRecorder.java
@@ -1,425 +1,425 @@
-/*
- * 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.tools.ant.taskdefs.optional.junit;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Vector;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Collects all failing test cases and creates a new JUnit test class containing
- * a suite() method which calls these failed tests.
- * Having classes A ... D with each several testcases you could earn a new
- * test class like
- *
- * // generated on: 2007.08.06 09:42:34,555
- * import junit.framework.*;
- * public class FailedTests extends TestCase {
- * public FailedTests(String testname) {
- * super(testname);
- * }
- * public static Test suite() {
- * TestSuite suite = new TestSuite();
- * suite.addTest( new B("test04") );
- * suite.addTest( new org.D("test10") );
- * return suite;
- * }
- * }
- *
- *
- * Because each running test case gets its own formatter, we collect
- * the failing test cases in a static list. Because we dont have a finalizer
- * method in the formatters "lifecycle", we register this formatter as
- * BuildListener and generate the new java source on taskFinished event.
- *
- * @since Ant 1.8.0
- */
-public class FailureRecorder extends ProjectComponent implements JUnitResultFormatter, BuildListener {
-
- /**
- * This is the name of a magic System property ({@value}). The value of this
- * System property should point to the location where to store the
- * generated class (without suffix).
- * Default location and name is defined in DEFAULT_CLASS_LOCATION.
- * @see #DEFAULT_CLASS_LOCATION
- */
- public static final String MAGIC_PROPERTY_CLASS_LOCATION
- = "ant.junit.failureCollector";
-
- /** Default location and name for the generated JUnit class file. {@value} */
- public static final String DEFAULT_CLASS_LOCATION
- = System.getProperty("java.io.tmpdir") + "FailedTests";
-
- /** Prefix for logging. {@value} */
- private static final String LOG_PREFIX = " [junit]";
-
- /** Class names of failed tests without duplicates. */
- private static SortedSet/**/ failedTests = new TreeSet();
-
- /** A writer for writing the generated source to. */
- private PrintWriter writer;
-
- /**
- * Location and name of the generated JUnit class.
- * Lazy instantiated via getLocationName().
- */
- private static String locationName;
-
- /**
- * Returns the (lazy evaluated) location for the collector class.
- * Order for evaluation: System property > Ant property > default value
- * @return location for the collector class
- * @see #MAGIC_PROPERTY_CLASS_LOCATION
- * @see #DEFAULT_CLASS_LOCATION
- */
- private String getLocationName() {
- if (locationName == null) {
- String syspropValue = System.getProperty(MAGIC_PROPERTY_CLASS_LOCATION);
- String antpropValue = getProject().getProperty(MAGIC_PROPERTY_CLASS_LOCATION);
-
- if (syspropValue != null) {
- locationName = syspropValue;
- verbose("System property '" + MAGIC_PROPERTY_CLASS_LOCATION + "' set, so use "
- + "its value '" + syspropValue + "' as location for collector class.");
- } else if (antpropValue != null) {
- locationName = antpropValue;
- verbose("Ant property '" + MAGIC_PROPERTY_CLASS_LOCATION + "' set, so use "
- + "its value '" + antpropValue + "' as location for collector class.");
- } else {
- locationName = DEFAULT_CLASS_LOCATION;
- verbose("System property '" + MAGIC_PROPERTY_CLASS_LOCATION + "' not set, so use "
- + "value as location for collector class: '"
- + DEFAULT_CLASS_LOCATION + "'");
- }
-
- File locationFile = new File(locationName);
- if (!locationFile.isAbsolute()) {
- File f = new File(getProject().getBaseDir(), locationName);
- locationName = f.getAbsolutePath();
- verbose("Location file is relative (" + locationFile + ")"
- + " use absolute path instead (" + locationName + ")");
- }
- }
-
- return locationName;
- }
-
- /**
- * This method is called by the Ant runtime by reflection. We use the project reference for
- * registration of this class as BuildListener.
- *
- * @param project
- * project reference
- */
- public void setProject(Project project) {
- // store project reference for logging
- super.setProject(project);
- // check if already registered
- boolean alreadyRegistered = false;
- Vector allListeners = project.getBuildListeners();
- for (int i = 0; i < allListeners.size(); i++) {
- Object listener = allListeners.get(i);
- if (listener instanceof FailureRecorder) {
- alreadyRegistered = true;
- continue;
- }
- }
- // register if needed
- if (!alreadyRegistered) {
- verbose("Register FailureRecorder (@" + this.hashCode() + ") as BuildListener");
- project.addBuildListener(this);
- }
- }
-
- // ===== JUnitResultFormatter =====
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void endTestSuite(JUnitTest suite) throws BuildException {
- }
-
- /**
- * Add the failed test to the list.
- * @param test the test that errored.
- * @param throwable the reason it errored.
- * @see junit.framework.TestListener#addError(junit.framework.Test, java.lang.Throwable)
- */
- public void addError(Test test, Throwable throwable) {
- failedTests.add(new TestInfos(test));
- }
-
- // CheckStyle:LineLengthCheck OFF - @see is long
- /**
- * Add the failed test to the list.
- * @param test the test that failed.
- * @param error the assertion that failed.
- * @see junit.framework.TestListener#addFailure(junit.framework.Test, junit.framework.AssertionFailedError)
- */
- // CheckStyle:LineLengthCheck ON
- public void addFailure(Test test, AssertionFailedError error) {
- failedTests.add(new TestInfos(test));
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void setOutput(OutputStream out) {
- // unused, close output file so it can be deleted before the VM exits
- if (out != System.out) {
- FileUtils.close(out);
- }
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void setSystemError(String err) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void setSystemOutput(String out) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void startTestSuite(JUnitTest suite) throws BuildException {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void endTest(Test test) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void startTest(Test test) {
- }
-
- // ===== "Templates" for generating the JUnit class =====
-
- private void writeJavaClass() {
- try {
- File sourceFile = new File((getLocationName() + ".java"));
- verbose("Write collector class to '" + sourceFile.getAbsolutePath() + "'");
-
- sourceFile.delete();
- writer = new PrintWriter(new FileOutputStream(sourceFile));
-
- createClassHeader();
- createSuiteMethod();
- createClassFooter();
-
- FileUtils.close(writer);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
-
- private void createClassHeader() {
- String className = getLocationName().replace('\\', '/');
- if (className.indexOf('/') > -1) {
- className = className.substring(className.lastIndexOf('/') + 1);
- }
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss,SSS");
- writer.print("// generated on: ");
- writer.println(sdf.format(new Date()));
- writer.println("import junit.framework.*;");
- writer.print("public class ");
- writer.print(className);
- // If this class does not extend TC, Ant doesnt run these
- writer.println(" extends TestCase {");
- // standard String-constructor
- writer.print(" public ");
- writer.print(className);
- writer.println("(String testname) {");
- writer.println(" super(testname);");
- writer.println(" }");
- }
-
- private void createSuiteMethod() {
- writer.println(" public static Test suite() {");
- writer.println(" TestSuite suite = new TestSuite();");
- for (Iterator iter = failedTests.iterator(); iter.hasNext();) {
- TestInfos testInfos = (TestInfos) iter.next();
- writer.print(" suite.addTest(");
- writer.print(testInfos);
- writer.println(");");
- }
- writer.println(" return suite;");
- writer.println(" }");
- }
-
- private void createClassFooter() {
- writer.println("}");
- }
-
- // ===== Helper classes and methods =====
-
- /**
- * Logging facade in INFO-mode.
- * @param message Log-message
- */
- public void log(String message) {
- getProject().log(LOG_PREFIX + " " + message, Project.MSG_INFO);
- }
-
- /**
- * Logging facade in VERBOSE-mode.
- * @param message Log-message
- */
- public void verbose(String message) {
- getProject().log(LOG_PREFIX + " " + message, Project.MSG_VERBOSE);
- }
-
- /**
- * TestInfos holds information about a given test for later use.
- */
- public class TestInfos implements Comparable {
-
- /** The class name of the test. */
- private String className;
-
- /** The method name of the testcase. */
- private String methodName;
-
- /**
- * This constructor extracts the needed information from the given test.
- * @param test Test to analyze
- */
- public TestInfos(Test test) {
- className = test.getClass().getName();
- methodName = test.toString();
- methodName = methodName.substring(0, methodName.indexOf('('));
- }
-
- /**
- * This String-Representation can directly be used for instantiation of
- * the JUnit testcase.
- * @return the string representation.
- * @see java.lang.Object#toString()
- * @see FailureRecorder#createSuiteMethod()
- */
- public String toString() {
- return "new " + className + "(\"" + methodName + "\")";
- }
-
- /**
- * The SortedMap needs comparable elements.
- * @param other the object to compare to.
- * @return the result of the comparison.
- * @see java.lang.Comparable#compareTo(T)
- * @see SortedSet#comparator()
- */
- public int compareTo(Object other) {
- if (other instanceof TestInfos) {
- TestInfos otherInfos = (TestInfos) other;
- return toString().compareTo(otherInfos.toString());
- } else {
- return -1;
- }
- }
- }
-
- // ===== BuildListener =====
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void buildFinished(BuildEvent event) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void buildStarted(BuildEvent event) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void messageLogged(BuildEvent event) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void targetFinished(BuildEvent event) {
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void targetStarted(BuildEvent event) {
- }
-
- /**
- * The task outside of this JUnitResultFormatter is the task. So all tests passed
- * and we could create the new java class.
- * @param event not used
- * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent)
- */
- public void taskFinished(BuildEvent event) {
- if (!failedTests.isEmpty()) {
- writeJavaClass();
- }
- }
-
- /**
- * Not used
- * {@inheritDoc}
- */
- public void taskStarted(BuildEvent event) {
- }
-
-}
+/*
+ * 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.tools.ant.taskdefs.optional.junit;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.Test;
+
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.util.FileUtils;
+
+/**
+ * Collects all failing test cases and creates a new JUnit test class containing
+ * a suite() method which calls these failed tests.
+ * Having classes A ... D with each several testcases you could earn a new
+ * test class like
+ *
+ * // generated on: 2007.08.06 09:42:34,555
+ * import junit.framework.*;
+ * public class FailedTests extends TestCase {
+ * public FailedTests(String testname) {
+ * super(testname);
+ * }
+ * public static Test suite() {
+ * TestSuite suite = new TestSuite();
+ * suite.addTest( new B("test04") );
+ * suite.addTest( new org.D("test10") );
+ * return suite;
+ * }
+ * }
+ *
+ *
+ * Because each running test case gets its own formatter, we collect
+ * the failing test cases in a static list. Because we dont have a finalizer
+ * method in the formatters "lifecycle", we register this formatter as
+ * BuildListener and generate the new java source on taskFinished event.
+ *
+ * @since Ant 1.8.0
+ */
+public class FailureRecorder extends ProjectComponent implements JUnitResultFormatter, BuildListener {
+
+ /**
+ * This is the name of a magic System property ({@value}). The value of this
+ * System property should point to the location where to store the
+ * generated class (without suffix).
+ * Default location and name is defined in DEFAULT_CLASS_LOCATION.
+ * @see #DEFAULT_CLASS_LOCATION
+ */
+ public static final String MAGIC_PROPERTY_CLASS_LOCATION
+ = "ant.junit.failureCollector";
+
+ /** Default location and name for the generated JUnit class file. {@value} */
+ public static final String DEFAULT_CLASS_LOCATION
+ = System.getProperty("java.io.tmpdir") + "FailedTests";
+
+ /** Prefix for logging. {@value} */
+ private static final String LOG_PREFIX = " [junit]";
+
+ /** Class names of failed tests without duplicates. */
+ private static SortedSet/**/ failedTests = new TreeSet();
+
+ /** A writer for writing the generated source to. */
+ private PrintWriter writer;
+
+ /**
+ * Location and name of the generated JUnit class.
+ * Lazy instantiated via getLocationName().
+ */
+ private static String locationName;
+
+ /**
+ * Returns the (lazy evaluated) location for the collector class.
+ * Order for evaluation: System property > Ant property > default value
+ * @return location for the collector class
+ * @see #MAGIC_PROPERTY_CLASS_LOCATION
+ * @see #DEFAULT_CLASS_LOCATION
+ */
+ private String getLocationName() {
+ if (locationName == null) {
+ String syspropValue = System.getProperty(MAGIC_PROPERTY_CLASS_LOCATION);
+ String antpropValue = getProject().getProperty(MAGIC_PROPERTY_CLASS_LOCATION);
+
+ if (syspropValue != null) {
+ locationName = syspropValue;
+ verbose("System property '" + MAGIC_PROPERTY_CLASS_LOCATION + "' set, so use "
+ + "its value '" + syspropValue + "' as location for collector class.");
+ } else if (antpropValue != null) {
+ locationName = antpropValue;
+ verbose("Ant property '" + MAGIC_PROPERTY_CLASS_LOCATION + "' set, so use "
+ + "its value '" + antpropValue + "' as location for collector class.");
+ } else {
+ locationName = DEFAULT_CLASS_LOCATION;
+ verbose("System property '" + MAGIC_PROPERTY_CLASS_LOCATION + "' not set, so use "
+ + "value as location for collector class: '"
+ + DEFAULT_CLASS_LOCATION + "'");
+ }
+
+ File locationFile = new File(locationName);
+ if (!locationFile.isAbsolute()) {
+ File f = new File(getProject().getBaseDir(), locationName);
+ locationName = f.getAbsolutePath();
+ verbose("Location file is relative (" + locationFile + ")"
+ + " use absolute path instead (" + locationName + ")");
+ }
+ }
+
+ return locationName;
+ }
+
+ /**
+ * This method is called by the Ant runtime by reflection. We use the project reference for
+ * registration of this class as BuildListener.
+ *
+ * @param project
+ * project reference
+ */
+ public void setProject(Project project) {
+ // store project reference for logging
+ super.setProject(project);
+ // check if already registered
+ boolean alreadyRegistered = false;
+ Vector allListeners = project.getBuildListeners();
+ for (int i = 0; i < allListeners.size(); i++) {
+ Object listener = allListeners.get(i);
+ if (listener instanceof FailureRecorder) {
+ alreadyRegistered = true;
+ continue;
+ }
+ }
+ // register if needed
+ if (!alreadyRegistered) {
+ verbose("Register FailureRecorder (@" + this.hashCode() + ") as BuildListener");
+ project.addBuildListener(this);
+ }
+ }
+
+ // ===== JUnitResultFormatter =====
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void endTestSuite(JUnitTest suite) throws BuildException {
+ }
+
+ /**
+ * Add the failed test to the list.
+ * @param test the test that errored.
+ * @param throwable the reason it errored.
+ * @see junit.framework.TestListener#addError(junit.framework.Test, java.lang.Throwable)
+ */
+ public void addError(Test test, Throwable throwable) {
+ failedTests.add(new TestInfos(test));
+ }
+
+ // CheckStyle:LineLengthCheck OFF - @see is long
+ /**
+ * Add the failed test to the list.
+ * @param test the test that failed.
+ * @param error the assertion that failed.
+ * @see junit.framework.TestListener#addFailure(junit.framework.Test, junit.framework.AssertionFailedError)
+ */
+ // CheckStyle:LineLengthCheck ON
+ public void addFailure(Test test, AssertionFailedError error) {
+ failedTests.add(new TestInfos(test));
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void setOutput(OutputStream out) {
+ // unused, close output file so it can be deleted before the VM exits
+ if (out != System.out) {
+ FileUtils.close(out);
+ }
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void setSystemError(String err) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void setSystemOutput(String out) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void startTestSuite(JUnitTest suite) throws BuildException {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void endTest(Test test) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void startTest(Test test) {
+ }
+
+ // ===== "Templates" for generating the JUnit class =====
+
+ private void writeJavaClass() {
+ try {
+ File sourceFile = new File((getLocationName() + ".java"));
+ verbose("Write collector class to '" + sourceFile.getAbsolutePath() + "'");
+
+ sourceFile.delete();
+ writer = new PrintWriter(new FileOutputStream(sourceFile));
+
+ createClassHeader();
+ createSuiteMethod();
+ createClassFooter();
+
+ FileUtils.close(writer);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void createClassHeader() {
+ String className = getLocationName().replace('\\', '/');
+ if (className.indexOf('/') > -1) {
+ className = className.substring(className.lastIndexOf('/') + 1);
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss,SSS");
+ writer.print("// generated on: ");
+ writer.println(sdf.format(new Date()));
+ writer.println("import junit.framework.*;");
+ writer.print("public class ");
+ writer.print(className);
+ // If this class does not extend TC, Ant doesnt run these
+ writer.println(" extends TestCase {");
+ // standard String-constructor
+ writer.print(" public ");
+ writer.print(className);
+ writer.println("(String testname) {");
+ writer.println(" super(testname);");
+ writer.println(" }");
+ }
+
+ private void createSuiteMethod() {
+ writer.println(" public static Test suite() {");
+ writer.println(" TestSuite suite = new TestSuite();");
+ for (Iterator iter = failedTests.iterator(); iter.hasNext();) {
+ TestInfos testInfos = (TestInfos) iter.next();
+ writer.print(" suite.addTest(");
+ writer.print(testInfos);
+ writer.println(");");
+ }
+ writer.println(" return suite;");
+ writer.println(" }");
+ }
+
+ private void createClassFooter() {
+ writer.println("}");
+ }
+
+ // ===== Helper classes and methods =====
+
+ /**
+ * Logging facade in INFO-mode.
+ * @param message Log-message
+ */
+ public void log(String message) {
+ getProject().log(LOG_PREFIX + " " + message, Project.MSG_INFO);
+ }
+
+ /**
+ * Logging facade in VERBOSE-mode.
+ * @param message Log-message
+ */
+ public void verbose(String message) {
+ getProject().log(LOG_PREFIX + " " + message, Project.MSG_VERBOSE);
+ }
+
+ /**
+ * TestInfos holds information about a given test for later use.
+ */
+ public class TestInfos implements Comparable {
+
+ /** The class name of the test. */
+ private String className;
+
+ /** The method name of the testcase. */
+ private String methodName;
+
+ /**
+ * This constructor extracts the needed information from the given test.
+ * @param test Test to analyze
+ */
+ public TestInfos(Test test) {
+ className = test.getClass().getName();
+ methodName = test.toString();
+ methodName = methodName.substring(0, methodName.indexOf('('));
+ }
+
+ /**
+ * This String-Representation can directly be used for instantiation of
+ * the JUnit testcase.
+ * @return the string representation.
+ * @see java.lang.Object#toString()
+ * @see FailureRecorder#createSuiteMethod()
+ */
+ public String toString() {
+ return "new " + className + "(\"" + methodName + "\")";
+ }
+
+ /**
+ * The SortedMap needs comparable elements.
+ * @param other the object to compare to.
+ * @return the result of the comparison.
+ * @see java.lang.Comparable#compareTo(T)
+ * @see SortedSet#comparator()
+ */
+ public int compareTo(Object other) {
+ if (other instanceof TestInfos) {
+ TestInfos otherInfos = (TestInfos) other;
+ return toString().compareTo(otherInfos.toString());
+ } else {
+ return -1;
+ }
+ }
+ }
+
+ // ===== BuildListener =====
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void buildFinished(BuildEvent event) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void buildStarted(BuildEvent event) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void messageLogged(BuildEvent event) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void targetFinished(BuildEvent event) {
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void targetStarted(BuildEvent event) {
+ }
+
+ /**
+ * The task outside of this JUnitResultFormatter is the task. So all tests passed
+ * and we could create the new java class.
+ * @param event not used
+ * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent)
+ */
+ public void taskFinished(BuildEvent event) {
+ if (!failedTests.isEmpty()) {
+ writeJavaClass();
+ }
+ }
+
+ /**
+ * Not used
+ * {@inheritDoc}
+ */
+ public void taskStarted(BuildEvent event) {
+ }
+
+}
diff --git a/src/main/org/apache/tools/ant/types/resources/FileProvider.java b/src/main/org/apache/tools/ant/types/resources/FileProvider.java
index 593f08824..aa283004b 100644
--- a/src/main/org/apache/tools/ant/types/resources/FileProvider.java
+++ b/src/main/org/apache/tools/ant/types/resources/FileProvider.java
@@ -1,36 +1,36 @@
-/*
- * 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.tools.ant.types.resources;
-
-import java.io.File;
-
-/**
- * This is an interface that resources that can provide a file should implement.
- * This is a refactoring of {@link FileResource}, to allow other resources
- * to act as sources of files (and to make components that only support
- * file-based resources from only support FileResource resources.
- * @since Ant 1.8
- */
-public interface FileProvider {
- /**
- * Get the file represented by this Resource.
- * @return the file.
- */
- File getFile();
-}
+/*
+ * 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.tools.ant.types.resources;
+
+import java.io.File;
+
+/**
+ * This is an interface that resources that can provide a file should implement.
+ * This is a refactoring of {@link FileResource}, to allow other resources
+ * to act as sources of files (and to make components that only support
+ * file-based resources from only support FileResource resources.
+ * @since Ant 1.8
+ */
+public interface FileProvider {
+ /**
+ * Get the file represented by this Resource.
+ * @return the file.
+ */
+ File getFile();
+}
diff --git a/src/tests/antunit/core/location/location.xml b/src/tests/antunit/core/location/location.xml
index 74c9ff0ef..091d6f337 100644
--- a/src/tests/antunit/core/location/location.xml
+++ b/src/tests/antunit/core/location/location.xml
@@ -1,4 +1,4 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hello
-
-
-
-
-
-
-
-
-
-
-
-
- Hello
-
-
-
-
-
- Hello
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hello
+
+
+
+
+
+
+
+
+
+
+
+
+ Hello
+
+
+
+
+
+ Hello
+
+
+
+
+
diff --git a/src/tests/antunit/core/location/src/task/EchoLocation.java b/src/tests/antunit/core/location/src/task/EchoLocation.java
index 9743c5286..014314511 100644
--- a/src/tests/antunit/core/location/src/task/EchoLocation.java
+++ b/src/tests/antunit/core/location/src/task/EchoLocation.java
@@ -1,26 +1,26 @@
-/*
-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 task;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-public class EchoLocation extends Task {
- public void execute() {
- log("Line: " + getLocation().getLineNumber(), Project.MSG_INFO);
- }
+/*
+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 task;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+public class EchoLocation extends Task {
+ public void execute() {
+ log("Line: " + getLocation().getLineNumber(), Project.MSG_INFO);
+ }
}
\ No newline at end of file
diff --git a/src/tests/antunit/taskdefs/condition/antversion-test.xml b/src/tests/antunit/taskdefs/condition/antversion-test.xml
index 01ebe1d68..b9d673f2e 100644
--- a/src/tests/antunit/taskdefs/condition/antversion-test.xml
+++ b/src/tests/antunit/taskdefs/condition/antversion-test.xml
@@ -1,4 +1,4 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AntVersion=${antversion}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AntVersion=${antversion}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/antunit/taskdefs/condition/hasfreespace-test.xml b/src/tests/antunit/taskdefs/condition/hasfreespace-test.xml
index 94b184f61..7507e300e 100644
--- a/src/tests/antunit/taskdefs/condition/hasfreespace-test.xml
+++ b/src/tests/antunit/taskdefs/condition/hasfreespace-test.xml
@@ -1,4 +1,4 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/tests/antunit/taskdefs/echoxml-test.xml b/src/tests/antunit/taskdefs/echoxml-test.xml
index a8bd2cbc1..d461d3d83 100644
--- a/src/tests/antunit/taskdefs/echoxml-test.xml
+++ b/src/tests/antunit/taskdefs/echoxml-test.xml
@@ -1,87 +1,87 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/antunit/taskdefs/gzip-test.xml b/src/tests/antunit/taskdefs/gzip-test.xml
index da18c6d09..38f0a7a68 100644
--- a/src/tests/antunit/taskdefs/gzip-test.xml
+++ b/src/tests/antunit/taskdefs/gzip-test.xml
@@ -1,46 +1,46 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/antunit/taskdefs/hostinfo-test.xml b/src/tests/antunit/taskdefs/hostinfo-test.xml
index 43fc7b5a4..eb5afd647 100644
--- a/src/tests/antunit/taskdefs/hostinfo-test.xml
+++ b/src/tests/antunit/taskdefs/hostinfo-test.xml
@@ -1,94 +1,94 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/antunit/taskdefs/loadresource-test.xml b/src/tests/antunit/taskdefs/loadresource-test.xml
index fc7492a11..814ded5be 100644
--- a/src/tests/antunit/taskdefs/loadresource-test.xml
+++ b/src/tests/antunit/taskdefs/loadresource-test.xml
@@ -1,41 +1,41 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tests/antunit/types/resources/files-test.xml b/src/tests/antunit/types/resources/files-test.xml
index c33ed6c0f..f4051fbe6 100644
--- a/src/tests/antunit/types/resources/files-test.xml
+++ b/src/tests/antunit/types/resources/files-test.xml
@@ -1,53 +1,53 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+