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 | sort=org.apache.tools.ant.types.resources.Sort | ||||
| resources=org.apache.tools.ant.types.resources.Resources | resources=org.apache.tools.ant.types.resources.Resources | ||||
| allbutfirst=org.apache.tools.ant.types.resources.AllButFirst | allbutfirst=org.apache.tools.ant.types.resources.AllButFirst | ||||
| allbutlast=org.apache.tools.ant.types.resources.AllButLast | |||||
| first=org.apache.tools.ant.types.resources.First | first=org.apache.tools.ant.types.resources.First | ||||
| last=org.apache.tools.ant.types.resources.Last | last=org.apache.tools.ant.types.resources.Last | ||||
| tarfileset=org.apache.tools.ant.types.TarFileSet | 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> | ||||
| <target name="testlast1"> | <target name="testlast1"> | ||||
| <pathconvert> | |||||
| <last count="1"><resources refid="testrc" /></last> | |||||
| </pathconvert> | |||||
| <au:assertTrue> | <au:assertTrue> | ||||
| <resourcecount count="0"> | <resourcecount count="0"> | ||||
| <difference> | <difference> | ||||
| @@ -110,9 +107,6 @@ | |||||
| </target> | </target> | ||||
| <target name="testlast2"> | <target name="testlast2"> | ||||
| <pathconvert> | |||||
| <last count="2"><resources refid="testrc" /></last> | |||||
| </pathconvert> | |||||
| <au:assertTrue> | <au:assertTrue> | ||||
| <resourcecount count="0"> | <resourcecount count="0"> | ||||
| <difference> | <difference> | ||||
| @@ -221,4 +215,66 @@ | |||||
| </au:expectfailure> | </au:expectfailure> | ||||
| </target> | </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> | </project> | ||||