Stefan Bodewig 10 years ago
parent
commit
d7125a5242
3 changed files with 116 additions and 6 deletions
  1. +1
    -0
      src/main/org/apache/tools/ant/types/defaults.properties
  2. +53
    -0
      src/main/org/apache/tools/ant/types/resources/AllButLast.java
  3. +62
    -6
      src/tests/antunit/types/resources/first-last-test.xml

+ 1
- 0
src/main/org/apache/tools/ant/types/defaults.properties View File

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


+ 53
- 0
src/main/org/apache/tools/ant/types/resources/AllButLast.java View File

@@ -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;
}

}

+ 62
- 6
src/tests/antunit/types/resources/first-last-test.xml View File

@@ -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 &gt;= 0">
<resourcecount>
<allbutlast count="-1"><resources refid="testrc" /></allbutlast>
</resourcecount>
</au:expectfailure>
</target>

</project> </project>

Loading…
Cancel
Save