/**
* Copyright (c) 2014, the Railo Company Ltd.
* Copyright (c) 2015, Lucee Assosication Switzerland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
package lucee.runtime.util;
import java.util.Date;
import lucee.runtime.exp.PageException;
/**
* class to compare objects and primitive value types
*/
public interface Operation {
/**
* compares two Objects
*
* @param left
* @param right
* @return different of objects as int
* @throws PageException
*/
public int compare(Object left, Object right) throws PageException;
/**
* compares a Object with a String
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(Object left, String right) throws PageException;
/**
* compares a Object with a double
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(Object left, double right) throws PageException;
/**
* compares a Object with a boolean
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(Object left, boolean right) throws PageException;
/**
* compares a Object with a Date
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(Object left, Date right) throws PageException;
/**
* compares a String with a Object
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(String left, Object right) throws PageException;
/**
* compares a String with a String
*
* @param left
* @param right
* @return difference as int
*/
public int compare(String left, String right);
/**
* compares a String with a double
*
* @param left
* @param right
* @return difference as int
*/
public int compare(String left, double right);
/**
* compares a String with a boolean
*
* @param left
* @param right
* @return difference as int
*/
public int compare(String left, boolean right);
/**
* compares a String with a Date
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(String left, Date right) throws PageException;
/**
* compares a double with a Object
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(double left, Object right) throws PageException;
/**
* compares a double with a String
*
* @param left
* @param right
* @return difference as int
*/
public int compare(double left, String right);
/**
* compares a double with a double
*
* @param left
* @param right
* @return difference as int
*/
public int compare(double left, double right);
/**
* compares a double with a boolean
*
* @param left
* @param right
* @return difference as int
*/
public int compare(double left, boolean right);
/**
* compares a double with a Date
*
* @param left
* @param right
* @return difference as int
*/
public int compare(double left, Date right);
/**
* compares a boolean with a Object
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(boolean left, Object right) throws PageException;
/**
* compares a boolean with a double
*
* @param left
* @param right
* @return difference as int
*/
public int compare(boolean left, double right);
/**
* compares a boolean with a double
*
* @param left
* @param right
* @return difference as int
*/
public int compare(boolean left, String right);
/**
* compares a boolean with a boolean
*
* @param left
* @param right
* @return difference as int
*/
public int compare(boolean left, boolean right);
/**
* compares a boolean with a Date
*
* @param left
* @param right
* @return difference as int
*/
public int compare(boolean left, Date right);
/**
* compares a Date with a Object
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(Date left, Object right) throws PageException;
/**
* compares a Date with a String
*
* @param left
* @param right
* @return difference as int
* @throws PageException
*/
public int compare(Date left, String right) throws PageException;
/**
* compares a Date with a double
*
* @param left
* @param right
* @return difference as int
*/
public int compare(Date left, double right);
/**
* compares a Date with a boolean
*
* @param left
* @param right
* @return difference as int
*/
public int compare(Date left, boolean right);
/**
* compares a Date with a Date
*
* @param left
* @param right
* @return difference as int
*/
public int compare(Date left, Date right);
/**
* Method to compare to different values, return true of objects are same
* otherwise false
*
* @param left left value to compare
* @param right right value to compare
* @param caseSensitive check case sensitive or not
* @return is same or not
* @throws PageException
*/
public boolean equals(Object left, Object right, boolean caseSensitive)
throws PageException;
public boolean equalsComplexEL(Object left, Object right,
boolean caseSensitive, boolean checkOnlyPublicAppearance);
public boolean equalsComplex(Object left, Object right,
boolean caseSensitive, boolean checkOnlyPublicAppearance)
throws PageException;
/**
* check if left is inside right
*
* @param left string to check
* @param right substring to find in string
* @return return if substring has been found
* @throws PageException
*/
public boolean ct(Object left, Object right) throws PageException;
/**
* Equivalence: Return True if both operands are True or both are False. The
* EQV operator is the opposite of the XOR operator. For example, True EQV
* True is True, but True EQV False is False.
*
* @param left value to check
* @param right value to check
* @return result of operation
* @throws PageException
*/
public boolean eqv(Object left, Object right) throws PageException;
/**
* Implication: The statement A IMP B is the equivalent of the logical
* statement
* "If A Then B." A IMP B is False only if A is True and B is False. It is
* True in all other cases.
*
* @param left value to check
* @param right value to check
* @return result
* @throws PageException
*/
public boolean imp(Object left, Object right) throws PageException;
/**
* check if left is not inside right
*
* @param left string to check
* @param right substring to find in string
* @return return if substring NOT has been found
* @throws PageException
*/
public boolean nct(Object left, Object right) throws PageException;
/**
* calculate the exponent of the left value
*
* @param left value to get exponent from
* @param right exponent count
* @return return expoinended value
* @throws PageException
*/
public double exponent(Object left, Object right) throws PageException;
/**
* concat to Strings
*
* @param left
* @param right
* @return concated String
*/
public String concat(String left, String right);
/**
* plus operation
*
* @param left
* @param right
* @return result of the opertions
*/
public double plus(double left, double right);
/**
* minus operation
*
* @param left
* @param right
* @return result of the opertions
*/
public double minus(double left, double right);
/**
* modulus operation
*
* @param left
* @param right
* @return result of the opertions
*/
public double modulus(double left, double right);
/**
* divide operation
*
* @param left
* @param right
* @return result of the opertions
*/
public double divide(double left, double right);
/**
* multiply operation
*
* @param left
* @param right
* @return result of the opertions
*/
public double multiply(double left, double right);
}