ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j..@apache.org
Subject svn commit: r617356 - /ant/core/trunk/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
Date Fri, 01 Feb 2008 06:37:20 GMT
Author: jhm
Date: Thu Jan 31 22:37:19 2008
New Revision: 617356

URL: http://svn.apache.org/viewvc?rev=617356&view=rev
Log:
Helper class for checking task configurations.

Added:
    ant/core/trunk/src/main/org/apache/tools/ant/TaskConfigurationChecker.java

Added: ant/core/trunk/src/main/org/apache/tools/ant/TaskConfigurationChecker.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/TaskConfigurationChecker.java?rev=617356&view=auto
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/TaskConfigurationChecker.java (added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/TaskConfigurationChecker.java Thu Jan 31
22:37:19 2008
@@ -0,0 +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;
+
+/**
+ * <p>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 <tt>assert*</tt> and <tt>fail</tt>
+ * methods the <tt>checkErrors</tt> will throw a BuildException with all collected
+ * messages or does nothing if there wasn't any error.</p>
+ *
+ * <p>Example:</p>
+ *
+ * <pre>
+ *     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();
+ *         }
+ *     }
+ * </pre>
+ *
+ * @see <a href="http://martinfowler.com/eaaDev/Notification.html">Notification Pattern</a>
+ */
+public class TaskConfigurationChecker {
+
+    /** List of all collected error messages. */
+    private List/*<String>*/ errors = new ArrayList();
+
+    /** Task for which the configuration should be checked. */
+    private 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());
+        }
+    }
+
+}



Mime
View raw message