/* * 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; } }