diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java new file mode 100644 index 00000000..2d930f98 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java @@ -0,0 +1,148 @@ +/* + * 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.taskdefs.condition; + +import org.apache.tools.ant.BuildException; + +/** + * Simple comparison condition. + * + * @since Ant 1.4 + */ +public class Equals implements Condition { + private static final int REQUIRED = 1 | 2; + + private Object arg1, arg2; + private boolean trim = false; + private boolean caseSensitive = true; + private int args; + private boolean forcestring = false; + + /** + * Set the first argument + * @param arg1 the first argument. + * @since Ant 1.8 + */ + public void setArg1(Object arg1) { + if (arg1 instanceof String) { + setArg1((String) arg1); + } else { + setArg1Internal(arg1); + } + } + + /** + * Set the first string + * + * @param a1 the first string + */ + public void setArg1(String a1) { + setArg1Internal(a1); + } + + private void setArg1Internal(Object arg1) { + this.arg1 = arg1; + args |= 1; + } + + /** + * Set the second argument + * @param arg2 the second argument. + * @since Ant 1.8 + */ + public void setArg2(Object arg2) { + if (arg2 instanceof String) { + setArg2((String) arg2); + } else { + setArg2Internal(arg2); + } + } + + /** + * Set the second string + * + * @param a2 the second string + */ + public void setArg2(String a2) { + setArg2Internal(a2); + } + + private void setArg2Internal(Object arg2) { + this.arg2 = arg2; + args |= 2; + } + + /** + * Should we want to trim the arguments before comparing them? + * @param b if true trim the arguments + * @since Ant 1.5 + */ + public void setTrim(boolean b) { + trim = b; + } + + /** + * Should the comparison be case sensitive? + * @param b if true use a case sensitive comparison (this is the + * default) + * @since Ant 1.5 + */ + public void setCasesensitive(boolean b) { + caseSensitive = b; + } + + /** + * Set whether to force string comparisons for non-equal, non-string objects. + * This allows object properties (legal in Ant 1.8.x+) to be compared as strings. + * @param forcestring value to set + * @since Ant 1.8.1 + */ + public void setForcestring(boolean forcestring) { + this.forcestring = forcestring; + } + + /** + * @return true if the two strings are equal + * @exception BuildException if the attributes are not set correctly + */ + public boolean eval() throws BuildException { + if ((args & REQUIRED) != REQUIRED) { + throw new BuildException("both arg1 and arg2 are required in equals"); + } + if (arg1 == arg2 || arg1 != null && arg1.equals(arg2)) { + return true; + } + if (forcestring) { + arg1 = arg1 == null || arg1 instanceof String ? arg1 : arg1.toString(); + arg2 = arg2 == null || arg2 instanceof String ? arg2 : arg2.toString(); + } + if (arg1 instanceof String && trim) { + arg1 = ((String) arg1).trim(); + } + if (arg2 instanceof String && trim) { + arg2 = ((String) arg2).trim(); + } + if (arg1 instanceof String && arg2 instanceof String) { + String s1 = (String) arg1; + String s2 = (String) arg2; + return caseSensitive ? s1.equals(s2) : s1.equalsIgnoreCase(s2); + } + return false; + } +} |