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;