Author: mbenson
Date: Thu Aug 31 12:04:12 2006
New Revision: 439014

URL: http://svn.apache.org/viewvc?rev=439014&view=rev
Log:
Auto-discover built-in conditions added >= 1.7 from the accompanying antlib so 
we can stop adding junk setters to ConditionBase.

Modified:
    
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml

Modified: 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java?rev=439014&r1=439013&r2=439014&view=diff
==============================================================================
--- 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
 (original)
+++ 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
 Thu Aug 31 12:04:12 2006
@@ -19,6 +19,9 @@
 
 import java.util.Enumeration;
 import java.util.Vector;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.DynamicElement;
+import org.apache.tools.ant.ComponentHelper;
 import org.apache.tools.ant.ProjectComponent;
 import org.apache.tools.ant.taskdefs.Available;
 import org.apache.tools.ant.taskdefs.Checksum;
@@ -31,7 +34,11 @@
  *
  * @since Ant 1.4
  */
-public abstract class ConditionBase extends ProjectComponent {
+public abstract class ConditionBase extends ProjectComponent
+    implements DynamicElement {
+
+    private static final String CONDITION_ANTLIB
+        = "antlib:org.apache.tools.ant.taskdefs.condition:";
 
     /**
      * name of the component
@@ -44,17 +51,16 @@
     private Vector conditions = new Vector();
 
     /**
-     * simple constructor.
+     * Simple constructor.
      */
     protected ConditionBase() {
         taskName = "component";
     }
 
     /**
-     * constructor that takes the name of the task
-     * in the task name
+     * Constructor that takes the name of the task in the task name.
      * @param taskName
-     * @since Ant1.7
+     * @since Ant 1.7
      */
     protected ConditionBase(String taskName) {
         this.taskName = taskName;
@@ -261,24 +267,6 @@
     }
 
     /**
-     * Add an <typefound> condition.
-     * @param test a TypeFound condition
-     * @since Ant 1.7
-     */
-    public void addTypeFound(TypeFound test) {
-        conditions.addElement(test);
-    }
-
-    /**
-     * Add an <isfailure> condition.
-     *
-     * @param test the condition
-     */
-    public void addIsFailure(IsFailure test) {
-        conditions.addElement(test);
-    }
-
-    /**
      * Add an <isfileselected> condition.
      * @param test the condition
      */
@@ -287,81 +275,30 @@
     }
 
     /**
-     * Add an <isreachable> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addIsReachable(IsReachable test) {
-        conditions.addElement(test);
-    }
-
-    /**
-     * Add an <issigned> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addIsSigned(IsSigned test) {
-        conditions.addElement(test);
-    }
-
-    /**
-     * Add an <parsersupports> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addParserSupports(ParserSupports test) {
-        conditions.addElement(test);
-    }
-
-    /**
-     * Add a <ResourcesMatch> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addResourcesMatch(ResourcesMatch test) {
-        conditions.addElement(test);
-    }
-
-    /**
-     * Add an <xor> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addXor(Xor test) {
-        conditions.addElement(test);
-    }
-
-    /**
-     * Add a  <hasMethod> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addHasMethod(HasMethod test) {
-        add(test);
-    }
-
-    /**
-     * Add an <antversion> condition.
-     *
-     * @param test the condition
-     * @since Ant 1.7
-     */
-    public void addAntVersion(AntVersion test) {
-        conditions.addElement(test);
-    }
-
-    /**
      * Add an arbitrary condition
-     * @param c a  condition
+     * @param c a condition
      * @since Ant 1.6
      */
     public void add(Condition c) {
         conditions.addElement(c);
     }
+
+    /**
+     * Create a dynamically discovered condition.  Built-in conditions can
+     * be discovered from the org.apache.tools.ant.taskdefs.condition
+     * antlib.
+     * @param name the condition to create.
+     */
+    public Object createDynamicElement(String name) {
+        Object cond = ComponentHelper.getComponentHelper(getProject())
+            .createComponent(CONDITION_ANTLIB + name);
+        if (!(cond instanceof Condition)) {
+            return null;
+        }
+        log("Dynamically discovered '" + name + "' " + cond,
+            Project.MSG_DEBUG);
+        add((Condition) cond);
+        return cond;
+    }
+
 }

Modified: 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml?rev=439014&r1=439013&r2=439014&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/antlib.xml 
Thu Aug 31 12:04:12 2006
@@ -1,8 +1,8 @@
 <?xml version="1.0"?>
 <antlib>
   <!--
-  /*
- * Copyright  2006 The Apache Software Foundation
+/*
+ * Copyright 2006 The Apache Software Foundation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -19,11 +19,17 @@
  */
 
   -->
-  <!-- ant1.6+ antlib declaration for the conditions
-  use with the declaration xmlns:cond="antlib:org.apache.tools.ant.condition" 
to
-  trigger ant's autoload of this file into a namespace.
+  <!-- Ant 1.6+ antlib declaration for conditions:
+  Use with the declaration xmlns:cond="antlib:org.apache.tools.ant.condition" 
to
+  trigger Ant's autoload of this file into namespace 'cond' (or whatever name
+  suits).
 
-  Please keep this list in alphabetical order -it is easier to verify that way
+  Please keep this list in alphabetical order; it is easier to verify that way.
+
+  Additionally, ConditionBase uses this antlib to discover built-in conditions.
+  Prior to Ant 1.7, a new built-in condition required an addXXX method to be
+  added to ConditionBase.  Conditions added in or after version 1.7 need only
+  to be added to this antlib.
   -->
 
   <typedef name="and" classname="org.apache.tools.ant.taskdefs.condition.And"/>
@@ -31,7 +37,7 @@
            classname="org.apache.tools.ant.taskdefs.condition.AntVersion"/>
   <typedef name="contains" 
classname="org.apache.tools.ant.taskdefs.condition.Contains"/>
   <typedef name="equals" 
classname="org.apache.tools.ant.taskdefs.condition.Equals"/>
-  <typedef name="filesmatch" 
classname="org.apache.tools.ant.taskdefs.condition.Filesmatch"/>
+  <typedef name="filesmatch" 
classname="org.apache.tools.ant.taskdefs.condition.FilesMatch"/>
   <typedef name="http" 
classname="org.apache.tools.ant.taskdefs.condition.Http"/>
   <typedef name="isfailure" 
classname="org.apache.tools.ant.taskdefs.condition.IsFailure"/>
   <typedef name="isfalse" 
classname="org.apache.tools.ant.taskdefs.condition.IsFalse"/>
@@ -50,4 +56,4 @@
   <typedef name="socket" 
classname="org.apache.tools.ant.taskdefs.condition.Socket"/>
   <typedef name="typefound" 
classname="org.apache.tools.ant.taskdefs.condition.TypeFound"/>
   <typedef name="xor" classname="org.apache.tools.ant.taskdefs.condition.Xor"/>
-</antlib>
\ No newline at end of file
+</antlib>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to