/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program 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
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.tools.expression.internal;
import java.util.LinkedList;
import java.util.List;
import com.rapidminer.tools.expression.Constant;
import com.rapidminer.tools.expression.ExpressionParserModule;
import com.rapidminer.tools.expression.Function;
import com.rapidminer.tools.expression.internal.function.bitwise.BitAnd;
import com.rapidminer.tools.expression.internal.function.bitwise.BitNot;
import com.rapidminer.tools.expression.internal.function.bitwise.BitOr;
import com.rapidminer.tools.expression.internal.function.bitwise.BitXor;
import com.rapidminer.tools.expression.internal.function.comparison.Finite;
import com.rapidminer.tools.expression.internal.function.comparison.Missing;
import com.rapidminer.tools.expression.internal.function.conversion.DateParse;
import com.rapidminer.tools.expression.internal.function.conversion.DateParseCustom;
import com.rapidminer.tools.expression.internal.function.conversion.DateParseWithLocale;
import com.rapidminer.tools.expression.internal.function.conversion.DateString;
import com.rapidminer.tools.expression.internal.function.conversion.DateStringCustom;
import com.rapidminer.tools.expression.internal.function.conversion.DateStringLocale;
import com.rapidminer.tools.expression.internal.function.conversion.NumericalToString;
import com.rapidminer.tools.expression.internal.function.conversion.StringToNumerical;
import com.rapidminer.tools.expression.internal.function.date.DateAdd;
import com.rapidminer.tools.expression.internal.function.date.DateAfter;
import com.rapidminer.tools.expression.internal.function.date.DateBefore;
import com.rapidminer.tools.expression.internal.function.date.DateDiff;
import com.rapidminer.tools.expression.internal.function.date.DateGet;
import com.rapidminer.tools.expression.internal.function.date.DateMillis;
import com.rapidminer.tools.expression.internal.function.date.DateNow;
import com.rapidminer.tools.expression.internal.function.date.DateSet;
import com.rapidminer.tools.expression.internal.function.logical.If;
import com.rapidminer.tools.expression.internal.function.mathematical.AbsoluteValue;
import com.rapidminer.tools.expression.internal.function.mathematical.BinaryLogarithm;
import com.rapidminer.tools.expression.internal.function.mathematical.CommonLogarithm;
import com.rapidminer.tools.expression.internal.function.mathematical.ExponentialFunction;
import com.rapidminer.tools.expression.internal.function.mathematical.ModulusAsFunction;
import com.rapidminer.tools.expression.internal.function.mathematical.NaturalLogarithm;
import com.rapidminer.tools.expression.internal.function.mathematical.PowerAsFunction;
import com.rapidminer.tools.expression.internal.function.mathematical.Signum;
import com.rapidminer.tools.expression.internal.function.mathematical.SquareRoot;
import com.rapidminer.tools.expression.internal.function.rounding.Ceil;
import com.rapidminer.tools.expression.internal.function.rounding.Floor;
import com.rapidminer.tools.expression.internal.function.rounding.Rint;
import com.rapidminer.tools.expression.internal.function.rounding.Round;
import com.rapidminer.tools.expression.internal.function.statistical.Average;
import com.rapidminer.tools.expression.internal.function.statistical.Binominal;
import com.rapidminer.tools.expression.internal.function.statistical.Maximum;
import com.rapidminer.tools.expression.internal.function.statistical.Minimum;
import com.rapidminer.tools.expression.internal.function.statistical.Sum;
import com.rapidminer.tools.expression.internal.function.text.CharAt;
import com.rapidminer.tools.expression.internal.function.text.Compare;
import com.rapidminer.tools.expression.internal.function.text.Concat;
import com.rapidminer.tools.expression.internal.function.text.Contains;
import com.rapidminer.tools.expression.internal.function.text.Cut;
import com.rapidminer.tools.expression.internal.function.text.Ends;
import com.rapidminer.tools.expression.internal.function.text.EscapeHTML;
import com.rapidminer.tools.expression.internal.function.text.Finds;
import com.rapidminer.tools.expression.internal.function.text.Index;
import com.rapidminer.tools.expression.internal.function.text.Length;
import com.rapidminer.tools.expression.internal.function.text.Lower;
import com.rapidminer.tools.expression.internal.function.text.Matches;
import com.rapidminer.tools.expression.internal.function.text.Prefix;
import com.rapidminer.tools.expression.internal.function.text.Replace;
import com.rapidminer.tools.expression.internal.function.text.ReplaceAll;
import com.rapidminer.tools.expression.internal.function.text.Starts;
import com.rapidminer.tools.expression.internal.function.text.Suffix;
import com.rapidminer.tools.expression.internal.function.text.TextEquals;
import com.rapidminer.tools.expression.internal.function.text.Trim;
import com.rapidminer.tools.expression.internal.function.text.Upper;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcCosine;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcHyperbolicCosine;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcHyperbolicSine;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcHyperbolicTangent;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcSine;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcTangent;
import com.rapidminer.tools.expression.internal.function.trigonometric.ArcTangent2;
import com.rapidminer.tools.expression.internal.function.trigonometric.Cosecant;
import com.rapidminer.tools.expression.internal.function.trigonometric.Cosine;
import com.rapidminer.tools.expression.internal.function.trigonometric.Cotangent;
import com.rapidminer.tools.expression.internal.function.trigonometric.HyperbolicCosine;
import com.rapidminer.tools.expression.internal.function.trigonometric.HyperbolicSine;
import com.rapidminer.tools.expression.internal.function.trigonometric.HyperbolicTangent;
import com.rapidminer.tools.expression.internal.function.trigonometric.Secant;
import com.rapidminer.tools.expression.internal.function.trigonometric.Sinus;
import com.rapidminer.tools.expression.internal.function.trigonometric.Tangent;
/**
* Singleton that holds the standard functions and the associated constants for the date functions.
* The standard functions do not include the operations (+,-,*...).
*
* @author Gisa Schaefer
*
*/
public enum StandardFunctionsWithConstants implements ExpressionParserModule {
INSTANCE;
private List<Function> standardFunctions = new LinkedList<>();
private List<Constant> functionConstants = new LinkedList<>();
private StandardFunctionsWithConstants() {
// logical functions
standardFunctions.add(new If());
// comparison functions
standardFunctions.add(new Missing());
standardFunctions.add(new Finite());
// text information functions
standardFunctions.add(new Length());
standardFunctions.add(new Index());
standardFunctions.add(new Compare());
standardFunctions.add(new TextEquals());
standardFunctions.add(new Contains());
standardFunctions.add(new Starts());
standardFunctions.add(new Ends());
standardFunctions.add(new Matches());
standardFunctions.add(new Finds());
// text transformation functions
standardFunctions.add(new Cut());
standardFunctions.add(new Concat());
standardFunctions.add(new Replace());
standardFunctions.add(new ReplaceAll());
standardFunctions.add(new Lower());
standardFunctions.add(new Upper());
standardFunctions.add(new Prefix());
standardFunctions.add(new Suffix());
standardFunctions.add(new CharAt());
standardFunctions.add(new Trim());
standardFunctions.add(new EscapeHTML());
// mathematical functions
standardFunctions.add(new SquareRoot());
standardFunctions.add(new PowerAsFunction());
standardFunctions.add(new ExponentialFunction());
standardFunctions.add(new NaturalLogarithm());
standardFunctions.add(new CommonLogarithm());
standardFunctions.add(new BinaryLogarithm());
standardFunctions.add(new Signum());
standardFunctions.add(new AbsoluteValue());
standardFunctions.add(new ModulusAsFunction());
// statistical functions
standardFunctions.add(new Average());
standardFunctions.add(new Minimum());
standardFunctions.add(new Maximum());
standardFunctions.add(new Binominal());
standardFunctions.add(new Sum());
// trigonometric functions
standardFunctions.add(new Sinus());
standardFunctions.add(new Cosine());
standardFunctions.add(new Tangent());
standardFunctions.add(new Cotangent());
standardFunctions.add(new Secant());
standardFunctions.add(new Cosecant());
standardFunctions.add(new ArcSine());
standardFunctions.add(new ArcCosine());
standardFunctions.add(new ArcTangent());
standardFunctions.add(new ArcTangent2());
standardFunctions.add(new HyperbolicSine());
standardFunctions.add(new HyperbolicCosine());
standardFunctions.add(new HyperbolicTangent());
standardFunctions.add(new ArcHyperbolicSine());
standardFunctions.add(new ArcHyperbolicCosine());
standardFunctions.add(new ArcHyperbolicTangent());
// rounding functions
standardFunctions.add(new Round());
standardFunctions.add(new Floor());
standardFunctions.add(new Ceil());
standardFunctions.add(new Rint());
// conversion functions
standardFunctions.add(new NumericalToString());
standardFunctions.add(new StringToNumerical());
standardFunctions.add(new DateParse());
standardFunctions.add(new DateParseWithLocale());
standardFunctions.add(new DateParseCustom());
standardFunctions.add(new DateString());
standardFunctions.add(new DateStringLocale());
standardFunctions.add(new DateStringCustom());
// date functions
standardFunctions.add(new DateBefore());
standardFunctions.add(new DateAfter());
standardFunctions.add(new DateNow());
standardFunctions.add(new DateDiff());
standardFunctions.add(new DateAdd());
standardFunctions.add(new DateSet());
standardFunctions.add(new DateGet());
standardFunctions.add(new DateMillis());
// bitwise functions
standardFunctions.add(new BitOr());
standardFunctions.add(new BitAnd());
standardFunctions.add(new BitXor());
standardFunctions.add(new BitNot());
// Date constants:
functionConstants.add(new SimpleConstant("DATE_SHORT", ExpressionParserConstants.DATE_FORMAT_SHORT,
"used in date_str and date_str_loc"));
functionConstants.add(new SimpleConstant("DATE_MEDIUM", ExpressionParserConstants.DATE_FORMAT_MEDIUM,
"used in date_str and date_str_loc"));
functionConstants.add(new SimpleConstant("DATE_LONG", ExpressionParserConstants.DATE_FORMAT_LONG,
"used in date_str and date_str_loc"));
functionConstants.add(new SimpleConstant("DATE_FULL", ExpressionParserConstants.DATE_FORMAT_FULL,
"used in date_str and date_str_loc"));
functionConstants.add(new SimpleConstant("DATE_SHOW_DATE_ONLY", ExpressionParserConstants.DATE_SHOW_DATE_ONLY,
"used in date_str and date_str_loc"));
functionConstants.add(new SimpleConstant("DATE_SHOW_TIME_ONLY", ExpressionParserConstants.DATE_SHOW_TIME_ONLY,
"used in date_str and date_str_loc"));
functionConstants.add(new SimpleConstant("DATE_SHOW_DATE_AND_TIME",
ExpressionParserConstants.DATE_SHOW_DATE_AND_TIME, "used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_YEAR", ExpressionParserConstants.DATE_UNIT_YEAR,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_MONTH", ExpressionParserConstants.DATE_UNIT_MONTH,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_WEEK", ExpressionParserConstants.DATE_UNIT_WEEK,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_DAY", ExpressionParserConstants.DATE_UNIT_DAY,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_HOUR", ExpressionParserConstants.DATE_UNIT_HOUR,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_MINUTE", ExpressionParserConstants.DATE_UNIT_MINUTE,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_SECOND", ExpressionParserConstants.DATE_UNIT_SECOND,
"used in date_add, date_set and date_get"));
functionConstants.add(new SimpleConstant("DATE_UNIT_MILLISECOND", ExpressionParserConstants.DATE_UNIT_MILLISECOND,
"used in date_add, date_set and date_get"));
}
@Override
public String getKey() {
return "core.function_constants";
}
@Override
public List<Constant> getConstants() {
return functionConstants;
}
@Override
public List<Function> getFunctions() {
return standardFunctions;
}
}