Author: mbenson
Date: Tue Oct 10 09:56:18 2006
New Revision: 454829

URL: http://svn.apache.org/viewvc?view=rev&rev=454829
Log:
extract DelegatedResourceComparator from Sort collection

Added:
    
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java
   (with props)
Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Sort.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Sort.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Sort.java?view=diff&rev=454829&r1=454828&r2=454829
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Sort.java 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Sort.java Tue 
Oct 10 09:56:18 2006
@@ -32,6 +32,7 @@
 import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.comparators.ResourceComparator;
+import 
org.apache.tools.ant.types.resources.comparators.DelegatedResourceComparator;
 
 /**
  * ResourceCollection that sorts another ResourceCollection.
@@ -39,29 +40,6 @@
  */
 public class Sort extends BaseResourceCollectionWrapper {
 
-    private static class MultiComparator implements Comparator {
-        private Vector v = null;
-        synchronized void add(ResourceComparator c) {
-            if (c == null) {
-                return;
-            }
-            v = (v == null) ? new Vector() : v;
-            v.add(c);
-        }
-        public synchronized int compare(Object o1, Object o2) {
-            int result = 0;
-            //if no nested, natural order:
-            if (v == null || v.size() == 0) {
-                result = ((Comparable) o1).compareTo((Comparable) o2);
-            } else {
-                for (Iterator i = v.iterator(); result == 0 && i.hasNext();) {
-                    result = ((Comparator) i.next()).compare(o1, o2);
-                }
-            }
-            return result;
-        }
-    }
-
     //sorted bag impl. borrowed from commons-collections TreeBag:
     private static class SortedBag extends AbstractCollection {
         private class MutableInt {
@@ -115,7 +93,7 @@
         }
     }
 
-    private MultiComparator comp = new MultiComparator();
+    private DelegatedResourceComparator comp = new 
DelegatedResourceComparator();
 
     /**
      * Sort the contained elements.
@@ -162,15 +140,7 @@
         if (isReference()) {
             super.dieOnCircularReference(stk, p);
         } else {
-            if (comp.v != null && comp.v.size() > 0) {
-                for (Iterator i = comp.v.iterator(); i.hasNext();) {
-                    Object o = i.next();
-                    if (o instanceof DataType) {
-                        stk.push(o);
-                        invokeCircularReferenceCheck((DataType) o, stk, p);
-                    }
-                }
-            }
+            DataType.invokeCircularReferenceCheck(comp, stk, p);
             setChecked(true);
         }
     }

Added: 
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java?view=auto&rev=454829
==============================================================================
--- 
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java
 (added)
+++ 
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java
 Tue Oct 10 09:56:18 2006
@@ -0,0 +1,108 @@
+/*
+ *  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.comparators;
+
+import java.util.Stack;
+import java.util.Vector;
+import java.util.Iterator;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
+import org.apache.tools.ant.types.resources.comparators.ResourceComparator;
+
+/**
+ * Delegates to other ResourceComparators or, if none specified,
+ * uses Resources' natural ordering.
+ * @since Ant 1.7
+ */
+public class DelegatedResourceComparator extends ResourceComparator {
+
+    private Vector v = null;
+
+    /**
+     * Add a delegate ResourceComparator.
+     * @param c the next delegate ResourceComparator.
+     */
+    public synchronized void add(ResourceComparator c) {
+        if (isReference()) {
+            throw noChildrenAllowed();
+        }
+        if (c == null) {
+            return;
+        }
+        v = (v == null) ? new Vector() : v;
+        v.add(c);
+    }
+
+    //inherit doc
+    public synchronized boolean equals(Object o) {
+        if (o == this) {
+            return true;
+        }
+        if (isReference()) {
+            return getCheckedRef().equals(o);
+        }
+        if (!(o instanceof DelegatedResourceComparator)) {
+            return false;
+        }
+        Vector ov = ((DelegatedResourceComparator) o).v;
+        return v == null ? ov == null : v.equals(ov);
+    }
+
+    //inherit doc
+    protected synchronized int resourceCompare(Resource foo, Resource bar) {
+        //if no nested, natural order:
+        if (v == null || v.isEmpty()) {
+            return foo.compareTo(bar);
+        }
+        int result = 0;
+        for (Iterator i = v.iterator(); result == 0 && i.hasNext();) {
+            result = ((ResourceComparator) i.next()).resourceCompare(foo, bar);
+        }
+        return result;
+    }
+
+    /**
+     * Overrides the version from DataType to recurse on nested 
ResourceSelector
+s.
+     * @param stk the Stack of references.
+     * @param p   the Project to resolve against.
+     * @throws BuildException on error.
+     */
+    protected void dieOnCircularReference(Stack stk, Project p) {
+        if (isChecked()) {
+            return;
+        }
+        if (isReference()) {
+            super.dieOnCircularReference(stk, p);
+        } else {
+            if (!(v == null || v.isEmpty())) {
+                for (Iterator i = v.iterator(); i.hasNext();) {
+                    Object o = i.next();
+                    if (o instanceof DataType) {
+                        stk.push(o);
+                        invokeCircularReferenceCheck((DataType) o, stk, p);
+                    }
+                }
+            }
+            setChecked(true);
+        }
+    }
+}

Propchange: 
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java
------------------------------------------------------------------------------
    svn:eol-style = native



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

Reply via email to