You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2022/08/12 11:13:44 UTC
[incubator-streampipes] branch dev updated: [STREAMPIPES-575] Add math processors to enricher-jvm module
This is an automated email from the ASF dual-hosted git repository.
riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git
The following commit(s) were added to refs/heads/dev by this push:
new 0cb4e158b [STREAMPIPES-575] Add math processors to enricher-jvm module
0cb4e158b is described below
commit 0cb4e158bad27578de5757900ecc131599bcc658
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Fri Aug 12 13:13:35 2022 +0200
[STREAMPIPES-575] Add math processors to enricher-jvm module
---
.../processors/enricher/jvm/EnricherJvmInit.java | 6 ++
.../jvm/processor/math/MathOpProcessor.java | 111 +++++++++++++++++++++
.../jvm/processor/math/operation/Operation.java | 25 +----
.../math/operation/OperationAddition.java | 28 ++----
.../processor/math/operation/OperationDivide.java | 28 ++----
.../processor/math/operation/OperationModulo.java | 28 ++----
.../math/operation/OperationMultiply.java | 28 ++----
.../math/operation/OperationSubtracting.java | 28 ++----
.../math/staticmathop/StaticMathOpProcessor.java | 107 ++++++++++++++++++++
.../jvm/processor/trigonometry/Operation.java | 28 ++----
.../trigonometry/TrigonometryProcessor.java | 105 +++++++++++++++++++
.../documentation.md | 50 ++++++++++
.../icon.png | Bin 0 -> 22150 bytes
.../strings.en | 11 ++
.../documentation.md | 50 ++++++++++
.../icon.png | Bin 0 -> 10608 bytes
.../strings.en | 10 ++
.../documentation.md | 50 ++++++++++
.../icon.png | Bin 0 -> 36697 bytes
.../strings.en | 9 ++
.../enrich-jvm/math1/description.json | 20 ++++
.../pipelineElement/enrich-jvm/math1/expected.csv | 3 +
.../pipelineElement/enrich-jvm/math1/input.csv | 3 +
.../enrich-jvm/math2/description.json | 20 ++++
.../pipelineElement/enrich-jvm/math2/expected.csv | 3 +
.../pipelineElement/enrich-jvm/math2/input.csv | 3 +
.../enrich-jvm/math3/description.json | 20 ++++
.../pipelineElement/enrich-jvm/math3/expected.csv | 3 +
.../pipelineElement/enrich-jvm/math3/input.csv | 3 +
.../enrich-jvm/staticmath1/description.json | 20 ++++
.../enrich-jvm/staticmath1/expected.csv | 3 +
.../enrich-jvm/staticmath1/input.csv | 3 +
.../enrich-jvm/staticmath2/description.json | 20 ++++
.../enrich-jvm/staticmath2/expected.csv | 3 +
.../enrich-jvm/staticmath2/input.csv | 3 +
.../enrich-jvm/trigonometry1/description.json | 15 +++
.../enrich-jvm/trigonometry1/expected.csv | 3 +
.../enrich-jvm/trigonometry1/input.csv | 3 +
.../enrich-jvm/trigonometry2/description.json | 15 +++
.../enrich-jvm/trigonometry2/expected.csv | 3 +
.../enrich-jvm/trigonometry2/input.csv | 3 +
ui/cypress/support/utils/DataLakeUtils.ts | 2 +-
.../tests/pipelineElement/SinglePipelineElement.ts | 2 +-
43 files changed, 729 insertions(+), 149 deletions(-)
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/EnricherJvmInit.java b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/EnricherJvmInit.java
index d022600fa..d18ece8a9 100644
--- a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/EnricherJvmInit.java
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/EnricherJvmInit.java
@@ -29,7 +29,10 @@ import org.apache.streampipes.messaging.jms.SpJmsProtocolFactory;
import org.apache.streampipes.messaging.kafka.SpKafkaProtocolFactory;
import org.apache.streampipes.messaging.mqtt.SpMqttProtocolFactory;
import org.apache.streampipes.processors.enricher.jvm.processor.jseval.JSEvalController;
+import org.apache.streampipes.processors.enricher.jvm.processor.math.MathOpProcessor;
+import org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop.StaticMathOpProcessor;
import org.apache.streampipes.processors.enricher.jvm.processor.sizemeasure.SizeMeasureController;
+import org.apache.streampipes.processors.enricher.jvm.processor.trigonometry.TrigonometryProcessor;
import org.apache.streampipes.processors.enricher.jvm.processor.valueChange.ValueChangeProcessor;
public class EnricherJvmInit extends StandaloneModelSubmitter {
@@ -46,6 +49,9 @@ public class EnricherJvmInit extends StandaloneModelSubmitter {
8090)
.registerPipelineElements(new SizeMeasureController(),
new JSEvalController(),
+ new MathOpProcessor(),
+ new StaticMathOpProcessor(),
+ new TrigonometryProcessor(),
new ValueChangeProcessor())
.registerMessagingFormats(
new JsonDataFormatFactory(),
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/MathOpProcessor.java b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/MathOpProcessor.java
new file mode 100644
index 000000000..0c54e4905
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/MathOpProcessor.java
@@ -0,0 +1,111 @@
+/*
+ * 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.streampipes.processors.enricher.jvm.processor.math;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.enricher.jvm.processor.math.operation.*;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.*;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.SO;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+public class MathOpProcessor extends StreamPipesDataProcessor {
+
+ private final String RESULT_FIELD = "calculationResult";
+ private final String LEFT_OPERAND = "leftOperand";
+ private final String RIGHT_OPERAND = "rightOperand";
+ private final String OPERATION = "operation";
+
+ Operation arithmeticOperation = null;
+ String leftOperand;
+ String rightOperand;
+
+ @Override
+ public DataProcessorDescription declareModel() {
+ return ProcessingElementBuilder.create("org.apache.streampipes.processors.enricher.jvm.processor.math.mathop")
+ .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+ .withLocales(Locales.EN)
+ .category(DataProcessorType.ALGORITHM)
+ .requiredStream(StreamRequirementsBuilder
+ .create()
+ .requiredPropertyWithUnaryMapping(EpRequirements.numberReq(),
+ Labels.withId(LEFT_OPERAND),
+ PropertyScope.NONE)
+ .requiredPropertyWithUnaryMapping(EpRequirements.numberReq(),
+ Labels.withId(RIGHT_OPERAND),
+ PropertyScope.NONE)
+ .build())
+ .outputStrategy(
+ OutputStrategies.append(
+ EpProperties.numberEp(Labels.empty(), RESULT_FIELD, SO.Number)))
+ .requiredSingleValueSelection(Labels.withId(OPERATION), Options.from("+", "-", "/",
+ "*", "%"))
+ .build();
+ }
+
+ @Override
+ public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector, EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+ this.leftOperand = parameters.extractor().mappingPropertyValue(LEFT_OPERAND);
+ this.rightOperand = parameters.extractor().mappingPropertyValue(RIGHT_OPERAND);
+ String operation = parameters.extractor().selectedSingleValue(OPERATION, String.class);
+
+ switch (operation) {
+ case "+":
+ arithmeticOperation = new OperationAddition();
+ break;
+ case "-":
+ arithmeticOperation = new OperationSubtracting();
+ break;
+ case "*":
+ arithmeticOperation = new OperationMultiply();
+ break;
+ case "/":
+ arithmeticOperation = new OperationDivide();
+ break;
+ case "%":
+ arithmeticOperation = new OperationModulo();
+ }
+ }
+
+ @Override
+ public void onEvent(Event in, SpOutputCollector out) throws SpRuntimeException {
+ Double leftValue = in.getFieldBySelector(leftOperand).getAsPrimitive().getAsDouble();
+ Double rightValue = in.getFieldBySelector(rightOperand).getAsPrimitive().getAsDouble();
+
+ Double result = arithmeticOperation.operate(leftValue, rightValue);
+ in.addField(RESULT_FIELD, result);
+
+ out.collect(in);
+ }
+
+ @Override
+ public void onDetach() throws SpRuntimeException {
+
+ }
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/Operation.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/Operation.java
index 40dc62333..f3d71bc77 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/Operation.java
@@ -16,26 +16,11 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.math.operation;
-const allTests = Cypress.env('processingElements');
+import java.io.Serializable;
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
+public interface Operation extends Serializable {
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+ Double operate(Double valLeft, Double valRight);
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationAddition.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationAddition.java
index 40dc62333..b3e850781 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationAddition.java
@@ -16,26 +16,12 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.math.operation;
-const allTests = Cypress.env('processingElements');
+public class OperationAddition implements Operation {
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
-
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+ @Override
+ public Double operate(Double valLeft, Double valRight) {
+ return valLeft + valRight;
+ }
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationDivide.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationDivide.java
index 40dc62333..e60c61033 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationDivide.java
@@ -16,26 +16,12 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.math.operation;
-const allTests = Cypress.env('processingElements');
+public class OperationDivide implements Operation {
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
-
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+ @Override
+ public Double operate(Double valLeft, Double valRight) {
+ return valLeft / valRight;
+ }
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationModulo.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationModulo.java
index 40dc62333..056172244 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationModulo.java
@@ -16,26 +16,12 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.math.operation;
-const allTests = Cypress.env('processingElements');
+public class OperationModulo implements Operation {
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
-
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+ @Override
+ public Double operate(Double valLeft, Double valRight) {
+ return valLeft % valRight;
+ }
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationMultiply.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationMultiply.java
index 40dc62333..f8d121e76 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationMultiply.java
@@ -16,26 +16,12 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.math.operation;
-const allTests = Cypress.env('processingElements');
+public class OperationMultiply implements Operation{
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
-
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+ @Override
+ public Double operate(Double valLeft, Double valRight) {
+ return valLeft * valRight;
+ }
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationSubtracting.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationSubtracting.java
index 40dc62333..d8ed36d4f 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/operation/OperationSubtracting.java
@@ -16,26 +16,12 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.math.operation;
-const allTests = Cypress.env('processingElements');
+public class OperationSubtracting implements Operation {
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
-
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+ @Override
+ public Double operate(Double valLeft, Double valRight) {
+ return valLeft - valRight;
+ }
+}
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/staticmathop/StaticMathOpProcessor.java b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/staticmathop/StaticMathOpProcessor.java
new file mode 100644
index 000000000..3fe76bc3c
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/math/staticmathop/StaticMathOpProcessor.java
@@ -0,0 +1,107 @@
+/*
+ * 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.streampipes.processors.enricher.jvm.processor.math.staticmathop;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.enricher.jvm.processor.math.operation.*;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.*;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+public class StaticMathOpProcessor extends StreamPipesDataProcessor {
+
+ private final String RESULT_FIELD = "calculationResultStatic";
+ private final String LEFT_OPERAND = "leftOperand";
+ private final String RIGHT_OPERAND_VALUE = "rightOperandValue";
+ private final String OPERATION = "operation";
+
+ Operation arithmeticOperation;
+ String leftOperand;
+ double rightOperandValue;
+
+
+ @Override
+ public DataProcessorDescription declareModel() {
+ return ProcessingElementBuilder.create("org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop")
+ .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+ .withLocales(Locales.EN)
+ .category(DataProcessorType.ALGORITHM)
+ .requiredStream(StreamRequirementsBuilder
+ .create()
+ .requiredPropertyWithUnaryMapping(EpRequirements.numberReq(),
+ Labels.withId(LEFT_OPERAND),
+ PropertyScope.NONE)
+ .build())
+ .requiredFloatParameter(Labels.withId(RIGHT_OPERAND_VALUE))
+ .outputStrategy(
+ OutputStrategies.keep())
+ .requiredSingleValueSelection(Labels.withId(OPERATION),
+ Options.from("+", "-", "/", "*", "%"))
+ .build();
+ }
+
+ @Override
+ public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector, EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+ this.leftOperand = parameters.extractor().mappingPropertyValue(LEFT_OPERAND);
+ this.rightOperandValue = parameters.extractor().singleValueParameter(RIGHT_OPERAND_VALUE, Double.class);
+ String operation = parameters.extractor().selectedSingleValue(OPERATION, String.class);
+
+ switch (operation) {
+ case "+":
+ arithmeticOperation = new OperationAddition();
+ break;
+ case "-":
+ arithmeticOperation = new OperationSubtracting();
+ break;
+ case "*":
+ arithmeticOperation = new OperationMultiply();
+ break;
+ case "/":
+ arithmeticOperation = new OperationDivide();
+ break;
+ case "%":
+ arithmeticOperation = new OperationModulo();
+ }
+ }
+
+ @Override
+ public void onEvent(Event in, SpOutputCollector out) throws SpRuntimeException {
+ Double leftValue = Double.parseDouble(String.valueOf(in.getFieldBySelector(leftOperand)
+ .getAsPrimitive().getAsDouble()));
+
+ Double result = arithmeticOperation.operate(leftValue, rightOperandValue);
+ in.updateFieldBySelector(leftOperand, result);
+
+ out.collect(in);
+ }
+
+ @Override
+ public void onDetach() throws SpRuntimeException {
+
+ }
+}
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/trigonometry/Operation.java
similarity index 55%
copy from ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
copy to streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/trigonometry/Operation.java
index 40dc62333..c2c179aca 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/trigonometry/Operation.java
@@ -16,26 +16,10 @@
*
*/
-import { ProcessingElementTestUtils } from '../../support/utils/ProcessingElementTestUtils';
-import { ProcessorTest } from '../../support/model/ProcessorTest';
+package org.apache.streampipes.processors.enricher.jvm.processor.trigonometry;
-const allTests = Cypress.env('processingElements');
-
-allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
-
- const processorTest = test as ProcessorTest;
-
- if (testNames.includes(processorTest.name)) {
-
- describe('Test Processor ' + test.dir, () => {
- beforeEach('Setup Test', () => {
- cy.initStreamPipesTest();
- });
-
- it('Initialize Test', () => {
- ProcessingElementTestUtils.testElement(processorTest);
- });
- });
- }
-});
+public enum Operation {
+ SIN,
+ COS,
+ TAN
+}
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/trigonometry/TrigonometryProcessor.java b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/trigonometry/TrigonometryProcessor.java
new file mode 100644
index 000000000..3067168a2
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/trigonometry/TrigonometryProcessor.java
@@ -0,0 +1,105 @@
+/*
+ * 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.streampipes.processors.enricher.jvm.processor.trigonometry;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.*;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.SO;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+public class TrigonometryProcessor extends StreamPipesDataProcessor {
+
+ private final String OPERAND = "operand";
+ private final String OPERATION = "operation";
+ private final String RESULT_FIELD = "trigonometryResult";
+
+ private Operation operation;
+ private String operand;
+
+
+ @Override
+ public DataProcessorDescription declareModel() {
+ return ProcessingElementBuilder.create("org.apache.streampipes.processors.enricher.jvm.processor.trigonometry")
+ .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+ .withLocales(Locales.EN)
+ .category(DataProcessorType.ALGORITHM)
+ .requiredStream(StreamRequirementsBuilder
+ .create()
+ .requiredPropertyWithUnaryMapping(EpRequirements.numberReq(),
+ Labels.withId(OPERAND),
+ PropertyScope.NONE)
+ .build())
+ .outputStrategy(
+ OutputStrategies.append(
+ EpProperties.numberEp(Labels.empty(), RESULT_FIELD, SO.Number)))
+ .requiredSingleValueSelection(Labels.withId(OPERATION),
+ Options.from("sin", "cos", "tan" ))
+ .build();
+ }
+
+ @Override
+ public void onInvocation(ProcessorParams parameters,
+ SpOutputCollector spOutputCollector,
+ EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+
+ this.operand = parameters.extractor().mappingPropertyValue(OPERAND);
+ String stringOperation = parameters.extractor().selectedSingleValue(OPERATION, String.class);
+
+ switch (stringOperation) {
+ case "sin": operation = Operation.SIN;
+ break;
+ case "cos": operation = Operation.COS;
+ break;
+ case "tan": operation = Operation.TAN;
+
+ }
+ }
+
+ @Override
+ public void onEvent(Event in, SpOutputCollector out) throws SpRuntimeException {
+ double value = in.getFieldBySelector(operand).getAsPrimitive().getAsDouble();
+ double result;
+
+ if (operation == Operation.SIN) {
+ result = Math.sin(value);
+ } else if (operation == Operation.COS) {
+ result = Math.cos(value);
+ } else {
+ result = Math.tan(value);
+ }
+ in.addField(RESULT_FIELD, result);
+
+ out.collect(in);
+ }
+
+ @Override
+ public void onDetach() throws SpRuntimeException {
+
+ }
+}
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/documentation.md b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/documentation.md
new file mode 100644
index 000000000..94c104f76
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/documentation.md
@@ -0,0 +1,50 @@
+<!--
+ ~ 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.
+ ~
+ -->
+
+## Math
+
+<p align="center">
+ <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Performs calculations on event properties (+, -, *, /, %).
+
+***
+
+## Required input
+The math processor works with any event that has at least one field containing a numerical value.
+
+***
+
+## Configuration
+
+### Left operand
+The field from the input event that should be used as the left operand.
+
+### Right operand
+The field from the input event that should be used as the right operand.
+
+### Operation
+The math operation that should be performed.
+
+## Output
+The processor appends the calculation result to each input event.
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/icon.png b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/icon.png
new file mode 100644
index 000000000..4da278963
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/strings.en b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/strings.en
new file mode 100644
index 000000000..d55af6000
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.mathop/strings.en
@@ -0,0 +1,11 @@
+org.apache.streampipes.processors.enricher.jvm.processor.math.mathop.title=Math
+org.apache.streampipes.processors.enricher.jvm.processor.math.mathop.description=Performs calculations on event properties (+, -, *, /, %)
+
+leftOperand.title=Left operand
+leftOperand.description=Select left operand
+
+rightOperand.title=Right operand
+rightOperand.description=Select right operand
+
+operation.title=Select Operation
+operation.description=
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/documentation.md b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/documentation.md
new file mode 100644
index 000000000..4e699fe7d
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/documentation.md
@@ -0,0 +1,50 @@
+<!--
+ ~ 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.
+ ~
+ -->
+
+## Static Math
+
+<p align="center">
+ <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Performs calculation on an event property with a static value (+, -, *, /, %).
+
+***
+
+## Required input
+The math processor works with any event that has at least one field containing a numerical value.
+
+***
+
+## Configuration
+
+### Left operand
+The field from the input event that should be used as the left operand.
+
+### Right operand value
+Specify the value of the right operand.
+
+### Operation
+The math operation that should be performed.
+
+## Output
+The processor appends the calculation result to each input event.
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/icon.png b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/icon.png
new file mode 100644
index 000000000..6146d8da1
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/strings.en b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/strings.en
new file mode 100644
index 000000000..8c3c82bd7
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop/strings.en
@@ -0,0 +1,10 @@
+org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop.title=Static Math
+org.apache.streampipes.processors.enricher.jvm.processor.math.staticmathop.description=Performs calculation on an event property with a static value (+, -, *, /, %)
+
+leftOperand.title=Left operand
+leftOperand.description=Select left operand
+
+rightOperandValue.title=Right operand value
+rightOperandValue.description=Specify the value of the right operand.
+
+operation.title=Select operation
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/documentation.md b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/documentation.md
new file mode 100644
index 000000000..0454239b9
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/documentation.md
@@ -0,0 +1,50 @@
+<!--
+ ~ 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.
+ ~
+ -->
+
+## Trigonometry
+
+<p align="center">
+ <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
+***
+
+## Description
+
+Performs Trigonometric functions (sin, cos, tan) on event properties.
+
+***
+
+## Required input
+The trigonometry processor works with any event that has at least one field containing a numerical value.
+
+***
+
+## Configuration
+
+Describe the configuration parameters here
+
+### Alpha
+The field that should be used for calculating the trigonometric function.
+
+
+### Operation
+The trigonometric function that should be calculated.
+
+## Output
+The processor appends the calculation result to each input event.
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/icon.png b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/icon.png
new file mode 100644
index 000000000..77fc667cb
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/strings.en b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/strings.en
new file mode 100644
index 000000000..7280fa91d
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/resources/org.apache.streampipes.processors.enricher.jvm.processor.trigonometry/strings.en
@@ -0,0 +1,9 @@
+org.apache.streampipes.processors.enricher.jvm.processor.trigonometry.title=Trigonometry Functions
+org.apache.streampipes.processors.enricher.jvm.processor.trigonometry.description=Performs Trigonometric functions on event properties
+
+operand.title=Alpha
+operand.description=Select the alpha parameter
+
+operation.title=Operation
+operation.description=
+
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/description.json
new file mode 100644
index 000000000..704e89289
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/description.json
@@ -0,0 +1,20 @@
+{
+ "name": "math",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "leftOperand",
+ "value": "temperature1"
+ },
+ {
+ "type": "drop-down",
+ "selector": "rightOperand",
+ "value": "temperature2"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "\\+"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/expected.csv
new file mode 100644
index 000000000..e1040968d
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/expected.csv
@@ -0,0 +1,3 @@
+time;calculationResult;temperature1;temperature2
+1623871499055;5.0;2.0;3.0;
+1623871500059;7.0;3.0;4.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/input.csv
new file mode 100644
index 000000000..1b75ffa70
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math1/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1;temperature2
+1623871499055;2;3
+1623871500059;3;4
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/description.json
new file mode 100644
index 000000000..710455950
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/description.json
@@ -0,0 +1,20 @@
+{
+ "name": "math",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "leftOperand",
+ "value": "temperature1"
+ },
+ {
+ "type": "drop-down",
+ "selector": "rightOperand",
+ "value": "temperature2"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "\\/"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/expected.csv
new file mode 100644
index 000000000..43a07791f
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/expected.csv
@@ -0,0 +1,3 @@
+time;calculationResult;temperature1;temperature2
+1623871499055;1.0;4.0;4.0
+1623871500059;20.0;100.0;5.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/input.csv
new file mode 100644
index 000000000..aaad2528e
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math2/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1;temperature2
+1623871499055;4;4
+1623871500059;100.0;5.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/description.json
new file mode 100644
index 000000000..968a447ba
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/description.json
@@ -0,0 +1,20 @@
+{
+ "name": "math",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "leftOperand",
+ "value": "temperature1"
+ },
+ {
+ "type": "drop-down",
+ "selector": "rightOperand",
+ "value": "temperature2"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "\\*"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/expected.csv
new file mode 100644
index 000000000..3f681d912
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/expected.csv
@@ -0,0 +1,3 @@
+time;calculationResult;temperature1;temperature2
+1623871499055;8.0;4.0;2.0
+1623871500059;17.5;3.5;5.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/input.csv
new file mode 100644
index 000000000..9e97f5707
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/math3/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1;temperature2
+1623871499055;4;2
+1623871500059;3.5;5.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/description.json
new file mode 100644
index 000000000..7416eea99
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/description.json
@@ -0,0 +1,20 @@
+{
+ "name": "static_math",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "leftOperand",
+ "value": "temperature1"
+ },
+ {
+ "type": "input",
+ "selector": "rightOperandValue",
+ "value": "5"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "\\*"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/expected.csv
new file mode 100644
index 000000000..ad9430c2b
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/expected.csv
@@ -0,0 +1,3 @@
+time;temperature1
+1623871499055;12.0
+1623871500059;17.5
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/input.csv
new file mode 100644
index 000000000..57ae1b77e
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath1/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1;
+1623871499055;4
+1623871500059;3.5
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/description.json
new file mode 100644
index 000000000..948f8420e
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/description.json
@@ -0,0 +1,20 @@
+{
+ "name": "static_math",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "leftOperand",
+ "value": "temperature1"
+ },
+ {
+ "type": "input",
+ "selector": "rightOperandValue",
+ "value": "1.5"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "\\/"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/expected.csv
new file mode 100644
index 000000000..5a04b8ad5
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/expected.csv
@@ -0,0 +1,3 @@
+time;temperature1
+1623871499055;4.0
+1623871500059;2.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/input.csv
new file mode 100644
index 000000000..933646d2a
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/staticmath2/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1
+1623871499055;6
+1623871500059;3
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/description.json
new file mode 100644
index 000000000..7edea59da
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/description.json
@@ -0,0 +1,15 @@
+{
+ "name": "trigonometry_functions",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "operand",
+ "value": "temperature1"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "sin"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/expected.csv
new file mode 100644
index 000000000..bef8e9274
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/expected.csv
@@ -0,0 +1,3 @@
+time;temperature1;trigonometryResult
+1623871499055;90.0;0.8939966636005579
+1623871500059;180.0;-0.8011526357338304
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/input.csv
new file mode 100644
index 000000000..13f65438b
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry1/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1
+1623871499055;90
+1623871500059;180.0
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/description.json b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/description.json
new file mode 100644
index 000000000..d8304c3b6
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/description.json
@@ -0,0 +1,15 @@
+{
+ "name": "trigonometry_functions",
+ "config": [
+ {
+ "type": "drop-down",
+ "selector": "operand",
+ "value": "temperature1"
+ },
+ {
+ "type": "radio",
+ "selector": "operation",
+ "value": "cos"
+ }
+ ]
+}
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/expected.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/expected.csv
new file mode 100644
index 000000000..5ca7cff4f
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/expected.csv
@@ -0,0 +1,3 @@
+time;temperature1;trigonometryResult
+1623871499055;120.0;0.8141809705265618
+1623871500059;150.0;0.6992508064783751
diff --git a/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/input.csv b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/input.csv
new file mode 100644
index 000000000..1de8e270b
--- /dev/null
+++ b/ui/cypress/fixtures/pipelineElement/enrich-jvm/trigonometry2/input.csv
@@ -0,0 +1,3 @@
+timestamp;temperature1
+1623871499055;120
+1623871500059;150.0
diff --git a/ui/cypress/support/utils/DataLakeUtils.ts b/ui/cypress/support/utils/DataLakeUtils.ts
index 5d3d057c7..9596f3891 100644
--- a/ui/cypress/support/utils/DataLakeUtils.ts
+++ b/ui/cypress/support/utils/DataLakeUtils.ts
@@ -253,7 +253,7 @@ export class DataLakeUtils {
// Validate result in datalake
cy.request({
method: 'GET',
- url: `/streampipes-backend/api/v4/datalake/measurements/${dataLakeIndex}/download?format=csv`,
+ url: `/streampipes-backend/api/v4/datalake/measurements/${dataLakeIndex}/download?format=csv&delimiter=semicolon`,
headers: {
'content-type': 'application/octet-stream'
},
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts b/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
index 40dc62333..167d76786 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
@@ -22,7 +22,7 @@ import { ProcessorTest } from '../../support/model/ProcessorTest';
const allTests = Cypress.env('processingElements');
allTests.forEach(test => {
- const testNames = ['booleanCounter1'];
+ const testNames = ['trigonometry2'];
const processorTest = test as ProcessorTest;