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]