[jira] [Commented] (NIFI-2791) Create a new Expression Language Function to support Java.lang.Math operations
[ https://issues.apache.org/jira/browse/NIFI-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15605967#comment-15605967 ] ASF GitHub Bot commented on NIFI-2791: -- Github user pvillard31 commented on the issue: https://github.com/apache/nifi/pull/1157 +1 thanks @JPercivall ! Merged. > Create a new Expression Language Function to support Java.lang.Math operations > -- > > Key: NIFI-2791 > URL: https://issues.apache.org/jira/browse/NIFI-2791 > Project: Apache NiFi > Issue Type: Improvement >Reporter: Joseph Percivall >Assignee: Joseph Percivall > Fix For: 1.1.0 > > > Once EL is improved to support decimals (NIFI-1662) it will be desired to > support higher level math functions than are currently implemented. The > easiest way to do this is to provide access to the Math class[1]. This should > provide all the building blocks necessary to do any desired operations on > decimals. > [1] https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (NIFI-2791) Create a new Expression Language Function to support Java.lang.Math operations
[ https://issues.apache.org/jira/browse/NIFI-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15605965#comment-15605965 ] ASF GitHub Bot commented on NIFI-2791: -- Github user asfgit closed the pull request at: https://github.com/apache/nifi/pull/1157 > Create a new Expression Language Function to support Java.lang.Math operations > -- > > Key: NIFI-2791 > URL: https://issues.apache.org/jira/browse/NIFI-2791 > Project: Apache NiFi > Issue Type: Improvement >Reporter: Joseph Percivall >Assignee: Joseph Percivall > Fix For: 1.1.0 > > > Once EL is improved to support decimals (NIFI-1662) it will be desired to > support higher level math functions than are currently implemented. The > easiest way to do this is to provide access to the Math class[1]. This should > provide all the building blocks necessary to do any desired operations on > decimals. > [1] https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (NIFI-2791) Create a new Expression Language Function to support Java.lang.Math operations
[ https://issues.apache.org/jira/browse/NIFI-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15605963#comment-15605963 ] ASF subversion and git services commented on NIFI-2791: --- Commit 1d74b5d3cea7cc844ebb97bb4af1d3c9110ed487 in nifi's branch refs/heads/master from [~JPercivall] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=1d74b5d ] NIFI-2791 Adding 'math' expression language function This closes #1157. > Create a new Expression Language Function to support Java.lang.Math operations > -- > > Key: NIFI-2791 > URL: https://issues.apache.org/jira/browse/NIFI-2791 > Project: Apache NiFi > Issue Type: Improvement >Reporter: Joseph Percivall >Assignee: Joseph Percivall > Fix For: 1.1.0 > > > Once EL is improved to support decimals (NIFI-1662) it will be desired to > support higher level math functions than are currently implemented. The > easiest way to do this is to provide access to the Math class[1]. This should > provide all the building blocks necessary to do any desired operations on > decimals. > [1] https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (NIFI-2791) Create a new Expression Language Function to support Java.lang.Math operations
[ https://issues.apache.org/jira/browse/NIFI-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15604687#comment-15604687 ] ASF GitHub Bot commented on NIFI-2791: -- Github user pvillard31 commented on a diff in the pull request: https://github.com/apache/nifi/pull/1157#discussion_r84855173 --- Diff: nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/evaluation/functions/MathEvaluator.java --- @@ -0,0 +1,138 @@ +/* + * 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.nifi.attribute.expression.language.evaluation.functions; + +import org.apache.nifi.attribute.expression.language.evaluation.Evaluator; +import org.apache.nifi.attribute.expression.language.evaluation.NumberEvaluator; +import org.apache.nifi.attribute.expression.language.evaluation.NumberQueryResult; +import org.apache.nifi.attribute.expression.language.evaluation.QueryResult; +import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageException; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +public class MathEvaluator extends NumberEvaluator { + +private final Evaluator subject; +private final Evaluator methodName; +private final Evaluator optionalArg; + +public MathEvaluator(final Evaluator subject, final Evaluator methodName, final Evaluator optionalArg) { +this.subject = subject; +this.methodName = methodName; +this.optionalArg = optionalArg; +} + +@Override +public QueryResult evaluate(final Mapattributes) { +final String methodNamedValue = methodName.evaluate(attributes).getValue(); +if (methodNamedValue == null) { +return new NumberQueryResult(null); +} + +final Number subjectValue; +if(subject != null) { +subjectValue = subject.evaluate(attributes).getValue(); +if(subjectValue == null){ +return new NumberQueryResult(null); +} +} else { +subjectValue = null; +} + +final Number optionalArgValue; +if(optionalArg != null) { +optionalArgValue = optionalArg.evaluate(attributes).getValue(); + +if(optionalArgValue == null) { +return new NumberQueryResult(null); +} +} else { +optionalArgValue = null; +} + +try { +Number executionValue = null; + +if (subjectValue == null){ +Method method = Math.class.getMethod(methodNamedValue); + +if(method == null) { +throw new AttributeExpressionLanguageException("Cannot evaluate 'math' function because no subjectless method was found with the name:'" + methodNamedValue + "'"); +} + +executionValue = (Number) method.invoke(null); +} else if(optionalArg == null) { +boolean subjectIsDecimal = subjectValue instanceof Double; +Method method = Math.class.getMethod(methodNamedValue, subjectIsDecimal ? double.class : long.class); --- End diff -- If I use: ${filename:math('exp')} I'll get the following exception: org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageException: Unable to calculate math function value at org.apache.nifi.attribute.expression.language.evaluation.functions.MathEvaluator.evaluate(MathEvaluator.java:129) ~[nifi-expression-language-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] at org.apache.nifi.attribute.expression.language.Query.evaluate(Query.java:568) ~[nifi-expression-language-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] at
[jira] [Commented] (NIFI-2791) Create a new Expression Language Function to support Java.lang.Math operations
[ https://issues.apache.org/jira/browse/NIFI-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15602877#comment-15602877 ] ASF GitHub Bot commented on NIFI-2791: -- GitHub user JPercivall opened a pull request: https://github.com/apache/nifi/pull/1157 NIFI-2791 Adding 'math' expression language function Thank you for submitting a contribution to Apache NiFi. In order to streamline the review of the contribution we ask you to ensure the following steps have been taken: ### For all changes: - [x] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message? - [x] Does your PR title start with NIFI- where is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character. - [x] Has your PR been rebased against the latest commit within the target branch (typically master)? - [x] Is your initial contribution a single, squashed commit? ### For code changes: - [x] Have you ensured that the full suite of tests is executed via mvn -Pcontrib-check clean install at the root nifi folder? - [x] Have you written or updated unit tests to verify your changes? - [x] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)? - [x] If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-assembly? - [x] If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-assembly? - [x] If adding new Properties, have you added .displayName in addition to .name (programmatic access) for each of the new properties? ### For documentation related changes: - [x] Have you ensured that format looks appropriate for the output in which it is rendered? ### Note: Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible. You can merge this pull request into a Git repository by running: $ git pull https://github.com/JPercivall/nifi NIFI-2791 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/nifi/pull/1157.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #1157 commit 2c5a4fc193831464862a1a051c3a6b79dc651a9c Author: jpercivallDate: 2016-10-20T14:58:53Z NIFI-2791 Adding 'math' expression language function > Create a new Expression Language Function to support Java.lang.Math operations > -- > > Key: NIFI-2791 > URL: https://issues.apache.org/jira/browse/NIFI-2791 > Project: Apache NiFi > Issue Type: Improvement >Reporter: Joseph Percivall >Assignee: Joseph Percivall > Fix For: 1.1.0 > > > Once EL is improved to support decimals (NIFI-1662) it will be desired to > support higher level math functions than are currently implemented. The > easiest way to do this is to provide access to the Math class[1]. This should > provide all the building blocks necessary to do any desired operations on > decimals. > [1] https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (NIFI-2791) Create a new Expression Language Function to support Java.lang.Math operations
[ https://issues.apache.org/jira/browse/NIFI-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15572429#comment-15572429 ] Joseph Percivall commented on NIFI-2791: With the pruning going on for 1.1.0 I'd like this to keep it's fix version. I have done much of the work for it already but it is blocked by NIFI-1662. So just need NIFI-1662 to be reviewed/merged (fix version of 1.1.0) and then I will rebase, finalize and open a PR. These go hand in hand and having this Math functionality will go a long way to facilitate numeric operations using EL. > Create a new Expression Language Function to support Java.lang.Math operations > -- > > Key: NIFI-2791 > URL: https://issues.apache.org/jira/browse/NIFI-2791 > Project: Apache NiFi > Issue Type: Improvement >Reporter: Joseph Percivall >Assignee: Joseph Percivall > Fix For: 1.1.0 > > > Once EL is improved to support decimals (NIFI-1662) it will be desired to > support higher level math functions than are currently implemented. The > easiest way to do this is to provide access to the Math class[1]. This should > provide all the building blocks necessary to do any desired operations on > decimals. > [1] https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html -- This message was sent by Atlassian JIRA (v6.3.4#6332)