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