Repository: ant
Updated Branches:
  refs/heads/master 989ca3b78 -> 36ec8947f


allbutlast resource collection

https://bz.apache.org/bugzilla/show_bug.cgi?id=57834


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/d7125a52
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/d7125a52
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/d7125a52

Branch: refs/heads/master
Commit: d7125a52429dcfc481780a6619d5aecfd023b597
Parents: 989ca3b
Author: Stefan Bodewig <[email protected]>
Authored: Sun May 17 13:02:23 2015 +0200
Committer: Stefan Bodewig <[email protected]>
Committed: Sun May 17 13:02:23 2015 +0200

----------------------------------------------------------------------
 .../apache/tools/ant/types/defaults.properties  |  1 +
 .../tools/ant/types/resources/AllButLast.java   | 53 +++++++++++++++
 .../antunit/types/resources/first-last-test.xml | 68 ++++++++++++++++++--
 3 files changed, 116 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/d7125a52/src/main/org/apache/tools/ant/types/defaults.properties
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/defaults.properties 
b/src/main/org/apache/tools/ant/types/defaults.properties
index 63c589d..1837ec7 100644
--- a/src/main/org/apache/tools/ant/types/defaults.properties
+++ b/src/main/org/apache/tools/ant/types/defaults.properties
@@ -72,6 +72,7 @@ intersect=org.apache.tools.ant.types.resources.Intersect
 sort=org.apache.tools.ant.types.resources.Sort
 resources=org.apache.tools.ant.types.resources.Resources
 allbutfirst=org.apache.tools.ant.types.resources.AllButFirst
+allbutlast=org.apache.tools.ant.types.resources.AllButLast
 first=org.apache.tools.ant.types.resources.First
 last=org.apache.tools.ant.types.resources.Last
 tarfileset=org.apache.tools.ant.types.TarFileSet

http://git-wip-us.apache.org/repos/asf/ant/blob/d7125a52/src/main/org/apache/tools/ant/types/resources/AllButLast.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/resources/AllButLast.java 
b/src/main/org/apache/tools/ant/types/resources/AllButLast.java
new file mode 100644
index 0000000..a1e6a98
--- /dev/null
+++ b/src/main/org/apache/tools/ant/types/resources/AllButLast.java
@@ -0,0 +1,53 @@
+/*
+ *  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.util.Collection;
+import java.util.List;
+
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.util.CollectionUtils;
+
+/**
+ * ResourceCollection that contains all resources of another
+ * collection except for the last <code>count</code> elements, a la
+ * the UNIX head command with parameter <code>-n -count</code>.
+ * @since Ant 1.9.5
+ */
+public class AllButLast extends SizeLimitCollection {
+
+    /**
+     * Take all elements except for the last <code>count</code> elements.
+     * @return a Collection of Resources.
+     */
+    protected Collection<Resource> getCollection() {
+        int ct = getValidCount();
+        List<Resource> result =
+            (List<Resource>) 
CollectionUtils.asCollection(getResourceCollection()
+                                                          .iterator());
+        return result.subList(0, result.size() - ct);
+    }
+
+    @Override
+    public synchronized int size() {
+        int sz = getResourceCollection().size();
+        int ct = getValidCount();
+        return sz > ct ? sz - ct : 0;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/d7125a52/src/tests/antunit/types/resources/first-last-test.xml
----------------------------------------------------------------------
diff --git a/src/tests/antunit/types/resources/first-last-test.xml 
b/src/tests/antunit/types/resources/first-last-test.xml
index 46273c1..e7fc831 100644
--- a/src/tests/antunit/types/resources/first-last-test.xml
+++ b/src/tests/antunit/types/resources/first-last-test.xml
@@ -96,9 +96,6 @@
   </target>
 
   <target name="testlast1">
-    <pathconvert>
-      <last count="1"><resources refid="testrc" /></last>
-    </pathconvert>
     <au:assertTrue>
       <resourcecount count="0">
         <difference>
@@ -110,9 +107,6 @@
   </target>
 
   <target name="testlast2">
-    <pathconvert>
-      <last count="2"><resources refid="testrc" /></last>
-    </pathconvert>
     <au:assertTrue>
       <resourcecount count="0">
         <difference>
@@ -221,4 +215,66 @@
     </au:expectfailure>
   </target>
 
+  <target name="testallbutlast5">
+    <au:assertTrue>
+      <resourcecount count="0">
+        <allbutlast count="5"><resources refid="testrc" /></allbutlast>
+      </resourcecount>
+    </au:assertTrue>
+  </target>
+
+  <target name="testallbutlast4">
+    <au:assertTrue>
+      <resourcecount count="0">
+        <difference>
+          <allbutlast count="4"><resources refid="testrc" /></allbutlast>
+          <string value="1" />
+        </difference>
+      </resourcecount>
+    </au:assertTrue>
+  </target>
+
+  <target name="testallbutlast1">
+    <au:assertTrue>
+      <resourcecount count="0">
+        <difference>
+          <allbutlast><resources refid="testrc" /></allbutlast>
+          <resources>
+            <string value="1" />
+            <string value="2" />
+            <string value="3" />
+            <string value="4" />
+          </resources>
+        </difference>
+      </resourcecount>
+    </au:assertTrue>
+  </target>
+
+  <target name="testallbutlast0">
+    <au:assertTrue>
+      <resourcecount count="0">
+        <difference>
+          <allbutlast count="0"><resources refid="testrc" /></allbutlast>
+          <resources refid="testrc" />
+        </difference>
+      </resourcecount>
+    </au:assertTrue>
+  </target>
+
+  <target name="testallbutlast6">
+    <au:assertTrue>
+      <resourcecount count="0">
+        <allbutlast count="6"><resources refid="testrc" /></allbutlast>
+      </resourcecount>
+    </au:assertTrue>
+  </target>
+
+  <target name="testallbutlast-1">
+    <au:expectfailure expectedmessage="size-limited collection count should be 
set to an int &gt;= 0">
+      <resourcecount>
+        <allbutlast count="-1"><resources refid="testrc" /></allbutlast>
+      </resourcecount>
+    </au:expectfailure>
+  </target>
+
 </project>

Reply via email to