https://bz.apache.org/bugzilla/show_bug.cgi?id=57834master
| @@ -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 | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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 >= 0"> | |||
| <resourcecount> | |||
| <allbutlast count="-1"><resources refid="testrc" /></allbutlast> | |||
| </resourcecount> | |||
| </au:expectfailure> | |||
| </target> | |||
| </project> | |||