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> |