|
|
@@ -0,0 +1,92 @@ |
|
|
|
/* |
|
|
|
* Copyright 2005 The Apache Software Foundation |
|
|
|
* |
|
|
|
* Licensed 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.taskdefs.condition; |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.util.Iterator; |
|
|
|
|
|
|
|
import org.apache.tools.ant.BuildException; |
|
|
|
import org.apache.tools.ant.types.Resource; |
|
|
|
import org.apache.tools.ant.types.ResourceCollection; |
|
|
|
import org.apache.tools.ant.types.resources.Union; |
|
|
|
import org.apache.tools.ant.util.ResourceUtils; |
|
|
|
|
|
|
|
/** |
|
|
|
* Compares resources for equality based on size and content. |
|
|
|
* All resources specified must match; no resource collections |
|
|
|
* specified is an error condition; if resource collections are |
|
|
|
* specified, but yield fewer than two elements, the condition |
|
|
|
* evaluates to <code>true</code>. |
|
|
|
* @since Ant 1.7 |
|
|
|
*/ |
|
|
|
public class ResourcesMatch implements Condition { |
|
|
|
|
|
|
|
private Union resources = null; |
|
|
|
private boolean asText = false; |
|
|
|
|
|
|
|
/** |
|
|
|
* Set whether to treat resources as if they were text files, |
|
|
|
* ignoring line endings. |
|
|
|
* @param astext whether to ignore line endings. |
|
|
|
*/ |
|
|
|
public void setAsText(boolean asText) { |
|
|
|
this.asText = asText; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Add a resource collection. |
|
|
|
* @param rc the resource collection to add. |
|
|
|
*/ |
|
|
|
public void add(ResourceCollection rc) { |
|
|
|
if (rc == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
resources = resources == null ? new Union() : resources; |
|
|
|
resources.add(rc); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Verify that all resources match. |
|
|
|
* @return true if all resources are equal. |
|
|
|
* @exception BuildException if there is an error. |
|
|
|
*/ |
|
|
|
public boolean eval() throws BuildException { |
|
|
|
if (resources == null) { |
|
|
|
throw new BuildException( |
|
|
|
"You must specify one or more nested resource collections"); |
|
|
|
} |
|
|
|
if (resources.size() > 1) { |
|
|
|
Iterator i = resources.iterator(); |
|
|
|
Resource r1 = (Resource) i.next(); |
|
|
|
Resource r2 = null; |
|
|
|
|
|
|
|
while (i.hasNext()) { |
|
|
|
r2 = (Resource) i.next(); |
|
|
|
try { |
|
|
|
if (!ResourceUtils.contentEquals(r1, r2, asText)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} catch (IOException ioe) { |
|
|
|
throw new BuildException("when comparing resources " |
|
|
|
+ r1.toString() + " and " + r2.toString(), ioe); |
|
|
|
} |
|
|
|
r1 = r2; |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |