Repository: apache/streampipes
Pull request #3458 (2025-02-03 19:42:13)

refactor(#3169): Remove deprecated code related to supported formats
<!--
  ~ 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.
  ~
  -->

  <!--
Thanks for contributing! Here are some tips you can follow to help us incorporate your contribution quickly and easily:
1. If this is your first time, please read our contributor guidelines:
    - https://streampipes.apache.org/community/get-involved/
    - https://cwiki.apache.org/confluence/display/STREAMPIPES/Getting+Started
2. Make sure the PR title is formatted like: `[#<GitHub issue id>] PR title ...`
3. If the PR is unfinished, add '[WIP]' in your PR title, e.g., `[WIP][#<GitHub issue id>] PR title ...`.
4. Please write your PR title to summarize what this PR proposes/fixes.
5. Link the PR to the corresponding GitHub issue (if present) in the `Development` section in the right menu bar.
6. Be sure to keep the PR description updated to reflect all changes.
7. If possible, provide a concise example to reproduce the issue for a faster review.
8. Make sure tests pass via `mvn clean install`.
9. (Optional) If the contribution is large, please file an Apache ICLA
    - http://apache.org/licenses/icla.pdf
-->

### Purpose
<!--
Please clarify what changes you are proposing and describe how those changes will address the issue.
Furthermore, describe potential consequences the changes might have.
-->

### Remarks
<!--
Is there anything left we need to pay attention on?
Are there some references that might be important? E.g. links to Confluence, or discussions
on the mailing list or GitHub.
-->
PR introduces (a) breaking change(s): no

PR introduces (a) deprecation(s): no



Patch:
diff --git a/NOTICE b/NOTICE
index d06150f1c5..4f62d436f5 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache StreamPipes
-Copyright 2019-2024 The Apache Software Foundation.
+Copyright 2019-2025 The Apache Software Foundation.
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/IStreamPipesClient.java b/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/IStreamPipesClient.java
index 8e91c1ce45..70d5200ed2 100644
--- a/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/IStreamPipesClient.java
+++ b/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/IStreamPipesClient.java
@@ -21,7 +21,6 @@ package org.apache.streampipes.client.api;
 import org.apache.streampipes.client.api.config.ClientConnectionUrlResolver;
 import org.apache.streampipes.client.api.config.IStreamPipesClientConfig;
 import org.apache.streampipes.client.api.credentials.CredentialsProvider;
-import org.apache.streampipes.dataformat.SpDataFormatFactory;
 import org.apache.streampipes.messaging.SpProtocolDefinitionFactory;
 import org.apache.streampipes.model.mail.SpEmail;
 
@@ -29,9 +28,6 @@ import java.io.Serializable;
 
 public interface IStreamPipesClient extends Serializable {
 
-  @Deprecated(since = "0.97.0", forRemoval = true)
-  void registerDataFormat(SpDataFormatFactory spDataFormatFactory);
-
   void registerProtocol(SpProtocolDefinitionFactory<?> spProtocolDefinitionFactory);
 
   CredentialsProvider getCredentials();
diff --git a/streampipes-client/src/main/java/org/apache/streampipes/client/StreamPipesClient.java b/streampipes-client/src/main/java/org/apache/streampipes/client/StreamPipesClient.java
index a8dfa12b14..0c7e41ca99 100644
--- a/streampipes-client/src/main/java/org/apache/streampipes/client/StreamPipesClient.java
+++ b/streampipes-client/src/main/java/org/apache/streampipes/client/StreamPipesClient.java
@@ -36,7 +36,6 @@ import org.apache.streampipes.client.api.credentials.CredentialsProvider;
 import org.apache.streampipes.client.model.StreamPipesClientConfig;
 import org.apache.streampipes.client.model.StreamPipesClientConnectionConfig;
 import org.apache.streampipes.client.paths.ApiPath;
-import org.apache.streampipes.dataformat.SpDataFormatFactory;
 import org.apache.streampipes.messaging.SpProtocolDefinitionFactory;
 import org.apache.streampipes.model.mail.SpEmail;
 
@@ -119,17 +118,6 @@ public class StreamPipesClient implements
     return new StreamPipesClient(streamPipesHost, streamPipesPort, credentials, httpsDisabled);
   }
 
-  /**
-   * Register a new data format that is used by the live API
-   *
-   * @deprecated
-   * @param spDataFormatFactory The data format factory
-   */
-  @Deprecated(forRemoval = true, since = "0.97.0")
-  @Override
-  public void registerDataFormat(SpDataFormatFactory spDataFormatFactory) {
-  }
-
   @Override
   public void registerProtocol(SpProtocolDefinitionFactory<?> spProtocolDefinitionFactory) {
     this.config.addTransportProtocol(spProtocolDefinitionFactory);
diff --git a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java
index 4bc17c2515..dee0b1cbdd 100644
--- a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java
+++ b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java
@@ -63,7 +63,7 @@ public class DataExplorerInfluxQueryExecutor extends DataExplorerQueryExecutor<Q
 
     });
 
-    return new DataSeries(values.size(), resultingValues, columns, series.getTags());
+    return new DataSeries(resultingValues.size(), resultingValues, columns, series.getTags());
   }
 
   protected SpQueryResult postQuery(QueryResult queryResult,
diff --git a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/model/SpServiceDefinitionBuilder.java b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/model/SpServiceDefinitionBuilder.java
index ac02d4533b..9061fc3e53 100644
--- a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/model/SpServiceDefinitionBuilder.java
+++ b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/model/SpServiceDefinitionBuilder.java
@@ -17,7 +17,6 @@
  */
 package org.apache.streampipes.extensions.management.model;
 
-import org.apache.streampipes.dataformat.SpDataFormatFactory;
 import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter;
 import org.apache.streampipes.extensions.api.declarer.IExtensionModuleExport;
 import org.apache.streampipes.extensions.api.declarer.IStreamPipesFunctionDeclarer;
@@ -116,23 +115,6 @@ public class SpServiceDefinitionBuilder {
     return this;
   }
 
-
-  /**
-   * @deprecated data format registration is no longer required
-   */
-  @Deprecated(since = "0.97.0", forRemoval = true)
-  public SpServiceDefinitionBuilder registerMessagingFormat(SpDataFormatFactory dataFormatDefinition) {
-    return this;
-  }
-
-  /**
-   * @deprecated data format registration is no longer required
-   */
-  @Deprecated(since = "0.97.0", forRemoval = true)
-  public SpServiceDefinitionBuilder registerMessagingFormats(SpDataFormatFactory... dataFormatDefinitions) {
-    return this;
-  }
-
   public SpServiceDefinitionBuilder registerMessagingProtocol(SpProtocolDefinitionFactory<?> protocol) {
     this.serviceDefinition.addProtocolDefinitionFactory(protocol);
     return this;
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/TransformationExtensionModuleExport.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/TransformationExtensionModuleExport.java
index 8b50d99a75..61d775d217 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/TransformationExtensionModuleExport.java
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/TransformationExtensionModuleExport.java
@@ -23,6 +23,7 @@ import org.apache.streampipes.extensions.api.declarer.IExtensionModuleExport;
 import org.apache.streampipes.extensions.api.migration.IModelMigrator;
 import org.apache.streampipes.extensions.api.pe.IStreamPipesPipelineElement;
 import org.apache.streampipes.processors.transformation.jvm.migrations.StaticMetadataEnrichmentProcessorMigrationV1;
+import org.apache.streampipes.processors.transformation.jvm.migrations.StaticMetadataEnrichmentProcessorMigrationV2;
 import org.apache.streampipes.processors.transformation.jvm.processor.array.count.CountArrayProcessor;
 import org.apache.streampipes.processors.transformation.jvm.processor.array.split.SplitArrayProcessor;
 import org.apache.streampipes.processors.transformation.jvm.processor.booloperator.counter.BooleanCounterProcessor;
@@ -94,6 +95,8 @@ public class TransformationExtensionModuleExport implements IExtensionModuleExpo
 
   @Override
   public List<IModelMigrator<?, ?>> migrators() {
-    return List.of(new StaticMetadataEnrichmentProcessorMigrationV1());
+    return List.of(
+        new StaticMetadataEnrichmentProcessorMigrationV1(),
+        new StaticMetadataEnrichmentProcessorMigrationV2());
   }
 }
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/migrations/StaticMetadataEnrichmentProcessorMigrationV2.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/migrations/StaticMetadataEnrichmentProcessorMigrationV2.java
new file mode 100644
index 0000000000..93599063ef
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/migrations/StaticMetadataEnrichmentProcessorMigrationV2.java
@@ -0,0 +1,85 @@
+/*
+ * 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.transformation.jvm.migrations;
+
+import org.apache.streampipes.extensions.api.extractor.IDataProcessorParameterExtractor;
+import org.apache.streampipes.extensions.api.migration.IDataProcessorMigrator;
+import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceTagPrefix;
+import org.apache.streampipes.model.graph.DataProcessorInvocation;
+import org.apache.streampipes.model.migration.MigrationResult;
+import org.apache.streampipes.model.migration.ModelMigratorConfig;
+import org.apache.streampipes.model.staticproperty.CollectionStaticProperty;
+import org.apache.streampipes.model.staticproperty.StaticProperty;
+import org.apache.streampipes.model.staticproperty.StaticPropertyGroup;
+import org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata.StaticMetaDataEnrichmentProcessor;
+import org.apache.streampipes.sdk.StaticProperties;
+import org.apache.streampipes.sdk.helpers.Labels;
+
+import java.util.List;
+
+import static org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata.StaticMetaDataEnrichmentProcessor.STATIC_METADATA_INPUT_DESCRIPTION;
+import static org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata.StaticMetaDataEnrichmentProcessor.STATIC_METADATA_INPUT_LABEL;
+
+public class StaticMetadataEnrichmentProcessorMigrationV2 implements IDataProcessorMigrator {
+  @Override
+  public ModelMigratorConfig config() {
+    return new ModelMigratorConfig(
+        StaticMetaDataEnrichmentProcessor.ID,
+        SpServiceTagPrefix.DATA_PROCESSOR,
+        1,
+        2
+    );
+  }
+
+  @Override
+  public MigrationResult<DataProcessorInvocation> migrate(DataProcessorInvocation element,
+                                                          IDataProcessorParameterExtractor extractor)
+      throws RuntimeException {
+    element.getStaticProperties()
+        .stream()
+        .filter(sp -> sp.getInternalName().equals(StaticMetaDataEnrichmentProcessor.STATIC_METADATA_INPUT))
+        .map(sp -> (CollectionStaticProperty) sp)
+        .forEach(sp -> {
+          addLabelAndDescriptionConfig((StaticPropertyGroup) sp.getStaticPropertyTemplate());
+          sp.getMembers().forEach(member -> {
+            addLabelAndDescriptionConfig((StaticPropertyGroup) member);
+          });
+        });
+    return MigrationResult.success(element);
+  }
+
+  private void addLabelAndDescriptionConfig(StaticPropertyGroup group) {
+    group.setHorizontalRendering(false);
+    group.getStaticProperties().addAll(
+        List.of(
+            makeFreeTextProperty(STATIC_METADATA_INPUT_LABEL),
+            makeFreeTextProperty(STATIC_METADATA_INPUT_DESCRIPTION)
+        )
+    );
+  }
+
+  private StaticProperty makeFreeTextProperty(String id) {
+    var sp = StaticProperties.stringFreeTextProperty(
+        Labels.withId(
+            id));
+    sp.setOptional(true);
+    sp.setValue("");
+    return sp;
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataConfiguration.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataConfiguration.java
index d3ffdee874..ce4df542e6 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataConfiguration.java
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataConfiguration.java
@@ -21,6 +21,8 @@ package org.apache.streampipes.processors.transformation.jvm.processor.staticmet
 public record StaticMetaDataConfiguration(
     String runtimeName,
     String value,
-    String dataType
+    String dataType,
+    String label,
+    String description
 ) {
 }
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessor.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessor.java
index e60947db72..cccac4c2d0 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessor.java
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessor.java
@@ -33,6 +33,7 @@ import org.apache.streampipes.model.schema.EventPropertyPrimitive;
 import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.model.schema.PropertyScope;
 import org.apache.streampipes.model.staticproperty.CollectionStaticProperty;
+import org.apache.streampipes.model.staticproperty.FreeTextStaticProperty;
 import org.apache.streampipes.model.staticproperty.StaticProperty;
 import org.apache.streampipes.model.staticproperty.StaticPropertyGroup;
 import org.apache.streampipes.sdk.StaticProperties;
@@ -53,14 +54,16 @@ import java.util.List;
 
 public class StaticMetaDataEnrichmentProcessor
     implements IStreamPipesDataProcessor,
-               ResolvesContainerProvidedOutputStrategy<DataProcessorInvocation, ProcessingElementParameterExtractor> {
+    ResolvesContainerProvidedOutputStrategy<DataProcessorInvocation, ProcessingElementParameterExtractor> {
 
   public static final String ID = "org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata";
 
-  protected static final String STATIC_METADATA_INPUT = "static-metadata-input";
+  public static final String STATIC_METADATA_INPUT = "static-metadata-input";
   protected static final String STATIC_METADATA_INPUT_RUNTIME_NAME = "static-metadata-input-runtime-name";
   protected static final String STATIC_METADATA_INPUT_VALUE = "static-metadata-input-value";
   protected static final String STATIC_METADATA_INPUT_DATATYPE = "static-metadata-input-datatype";
+  public static final String STATIC_METADATA_INPUT_LABEL = "static-metadata-input-label";
+  public static final String STATIC_METADATA_INPUT_DESCRIPTION = "static-metadata-input-description";
 
   protected static final String OPTION_BOOL = "Bool";
   protected static final String OPTION_STRING = "String";
@@ -75,45 +78,59 @@ public class StaticMetaDataEnrichmentProcessor
     return DataProcessorConfiguration.create(
         StaticMetaDataEnrichmentProcessor::new,
         ProcessingElementBuilder.create(
-                                    ID,
-                                    1
-                                )
-                                .category(
-                                    DataProcessorType.ENRICH)
-                                .withLocales(
-                                    Locales.EN)
-                                .withAssets(
-                                    ExtensionAssetType.DOCUMENTATION,
-                                    ExtensionAssetType.ICON
-                                )
-                                .requiredCollection(
-                                    Labels.withId(
-                                        STATIC_METADATA_INPUT),
-                                    StaticProperties.stringFreeTextProperty(
-                                        Labels.withId(
-                                            STATIC_METADATA_INPUT_RUNTIME_NAME)),
-                                    StaticProperties.stringFreeTextProperty(
-                                        Labels.withId(
-                                            STATIC_METADATA_INPUT_VALUE)),
-                                    StaticProperties.singleValueSelection(
-                                        Labels.withId(
-                                            STATIC_METADATA_INPUT_DATATYPE),
-                                        Options.from(
-                                            OPTION_BOOL,
-                                            OPTION_STRING,
-                                            OPTION_FLOAT,
-                                            OPTION_INTEGER
-                                        )
-                                    )
-                                )
-                                .requiredStream(
-                                    StreamRequirementsBuilder.any())
-                                .outputStrategy(
-                                    OutputStrategies.customTransformation())
-                                .build()
+                ID,
+                2
+            )
+            .category(
+                DataProcessorType.ENRICH)
+            .withLocales(
+                Locales.EN)
+            .withAssets(
+                ExtensionAssetType.DOCUMENTATION,
+                ExtensionAssetType.ICON
+            )
+            .requiredStaticProperty(
+                StaticProperties.collection(
+                    Labels.withId(
+                        STATIC_METADATA_INPUT),
+                    false,
+                    StaticProperties.stringFreeTextProperty(
+                        Labels.withId(
+                            STATIC_METADATA_INPUT_RUNTIME_NAME)),
+                    StaticProperties.stringFreeTextProperty(
+                        Labels.withId(
+                            STATIC_METADATA_INPUT_VALUE)),
+                    StaticProperties.singleValueSelection(
+                        Labels.withId(
+                            STATIC_METADATA_INPUT_DATATYPE),
+                        Options.from(
+                            OPTION_BOOL,
+                            OPTION_STRING,
+                            OPTION_FLOAT,
+                            OPTION_INTEGER
+                        )
+                    ),
+                    makeFreeTextInput(STATIC_METADATA_INPUT_LABEL, true),
+                    makeFreeTextInput(STATIC_METADATA_INPUT_DESCRIPTION, true)
+                )
+            )
+            .requiredStream(
+                StreamRequirementsBuilder.any())
+            .outputStrategy(
+                OutputStrategies.customTransformation())
+            .build()
     );
   }
 
+  private FreeTextStaticProperty makeFreeTextInput(String label,
+                                                   boolean optional) {
+    var sp = StaticProperties.stringFreeTextProperty(
+        Labels.withId(
+            label));
+    sp.setOptional(optional);
+    return sp;
+  }
+
   @Override
   public EventSchema resolveOutputStrategy(
       DataProcessorInvocation processingElement,
@@ -123,8 +140,8 @@ public class StaticMetaDataEnrichmentProcessor
     var metaDataConfigurations = getMetaDataConfigurations(parameterExtractor);
 
     var eventSchema = processingElement.getInputStreams()
-                                       .get(0)
-                                       .getEventSchema();
+        .get(0)
+        .getEventSchema();
 
     addMetaDataConfigurationPropertiesToEventSchema(metaDataConfigurations, eventSchema);
 
@@ -185,7 +202,9 @@ public class StaticMetaDataEnrichmentProcessor
     var runtimeName = memberExtractor.textParameter(STATIC_METADATA_INPUT_RUNTIME_NAME);
     var value = memberExtractor.textParameter(STATIC_METADATA_INPUT_VALUE);
     var dataType = memberExtractor.selectedSingleValue(STATIC_METADATA_INPUT_DATATYPE, String.class);
-    return new StaticMetaDataConfiguration(runtimeName, value, dataType);
+    var label = memberExtractor.textParameter(STATIC_METADATA_INPUT_LABEL);
+    var description = memberExtractor.textParameter(STATIC_METADATA_INPUT_DESCRIPTION);
+    return new StaticMetaDataConfiguration(runtimeName, value, dataType, label, description);
   }
 
   protected Object castValueOfMetaDataConfiguration(StaticMetaDataConfiguration staticMetaDataConfiguration) {
@@ -214,7 +233,7 @@ public class StaticMetaDataEnrichmentProcessor
     for (StaticMetaDataConfiguration metaDataConfiguration : metaDataConfigurations) {
       var metaDataEventProperty = getMetaDataEventProperty(metaDataConfiguration);
       eventSchema.getEventProperties()
-                 .add(metaDataEventProperty);
+          .add(metaDataEventProperty);
     }
   }
 
@@ -226,6 +245,8 @@ public class StaticMetaDataEnrichmentProcessor
             transformToStreamPipesDataType(metaDataConfiguration.dataType()),
             metaDataConfiguration.runtimeName()
         )
+        .label(metaDataConfiguration.label())
+        .description(metaDataConfiguration.description())
         .scope(PropertyScope.MEASUREMENT_PROPERTY)
         .build();
   }
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/resources/org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata/strings.en b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/resources/org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata/strings.en
index 2c2826d82e..b4b5b747fa 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/resources/org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata/strings.en
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/resources/org.apache.streampipes.processors.transformation.jvm.processor.staticmetadata/strings.en
@@ -30,3 +30,8 @@ static-metadata-input-value.description=This is used for the runtime value in th
 static-metadata-input-datatype.title=Data Type
 static-metadata-input-datatype.description=Select the data type of the value
 
+static-metadata-input-label.title=Label
+static-metadata-input-label.description=An optional short label which describes the field
+
+static-metadata-input-description.title=Description
+static-metadata-input-description.description=An optional description of the field
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/output/CustomTransformOutputSchemaGenerator.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/output/CustomTransformOutputSchemaGenerator.java
index 77551acb4a..bf2e38aae6 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/output/CustomTransformOutputSchemaGenerator.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/output/CustomTransformOutputSchemaGenerator.java
@@ -33,6 +33,7 @@ import org.apache.http.client.fluent.Response;
 import org.apache.http.entity.ContentType;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 public class CustomTransformOutputSchemaGenerator extends OutputSchemaGenerator<CustomTransformOutputStrategy> {
 
@@ -79,7 +80,7 @@ public class CustomTransformOutputSchemaGenerator extends OutputSchemaGenerator<
   }
 
   private EventSchema handleResponse(Response httpResp) throws JsonSyntaxException, IOException {
-    String resp = httpResp.returnContent().asString();
+    String resp = httpResp.returnContent().asString(StandardCharsets.UTF_8);
 
     return JacksonSerializer
         .getObjectMapper()
diff --git a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/AbstractProcessingElementBuilder.java b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/AbstractProcessingElementBuilder.java
index b6d3a94492..13d8870eba 100644
--- a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/AbstractProcessingElementBuilder.java
+++ b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/AbstractProcessingElementBuilder.java
@@ -22,7 +22,6 @@ import org.apache.streampipes.model.SpDataStream;
 import org.apache.streampipes.model.base.ConsumableStreamPipesEntity;
 import org.apache.streampipes.model.constants.PropertySelectorConstants;
 import org.apache.streampipes.model.grounding.EventGrounding;
-import org.apache.streampipes.model.grounding.TransportFormat;
 import org.apache.streampipes.model.grounding.TransportProtocol;
 import org.apache.streampipes.model.schema.EventProperty;
 import org.apache.streampipes.model.schema.EventSchema;
@@ -141,36 +140,6 @@ public abstract class AbstractProcessingElementBuilder<K extends
     return me();
   }
 
-  /**
-   * Assigns supported transport formats to the pipeline elements that can be handled at runtime (e.g.,
-   * JSON or XMl).
-   *
-   * @deprecated format assignment is no longer necessary
-   * @param format An arbitrary number of supported {@link org.apache.streampipes.model.grounding.TransportFormat}s. Use
-   *               {@link org.apache.streampipes.sdk.helpers.SupportedFormats} to assign formats from some pre-defined
-   *               ones or create your own by following the developer guide.
-   * @return this
-   */
-  @Deprecated(forRemoval = true, since = "0.97.0")
-  public K supportedFormats(TransportFormat... format) {
-    return supportedFormats(Arrays.asList(format));
-  }
-
-  /**
-   * Assigns supported transport formats to the pipeline elements that can be handled at runtime (e.g.,
-   * JSON or XMl).
-   *
-   * @deprecated format assignment is no longer necessary
-   * @param formats A list of supported {@link org.apache.streampipes.model.grounding.TransportFormat}s. Use
-   *                {@link org.apache.streampipes.sdk.helpers.SupportedFormats} to assign formats from some pre-defined
-   *                ones or create your own by following the developer guide.
-   * @return this
-   */
-  @Deprecated(forRemoval = true, since = "0.97.0")
-  public K supportedFormats(List<TransportFormat> formats) {
-    return me();
-  }
-
   /**
    * Assigns supported communication/transport protocols to the pipeline elements that can be handled at runtime (e.g.,
    * Kafka or JMS).
diff --git a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/SupportedFormats.java b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/SupportedFormats.java
deleted file mode 100644
index e70839e182..0000000000
--- a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/SupportedFormats.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.sdk.helpers;
-
-import org.apache.streampipes.model.grounding.TransportFormat;
-import org.apache.streampipes.vocabulary.MessageFormat;
-
-/**
- * @deprecated formats are no longer necessary
- */
-@Deprecated(forRemoval = true, since = "0.97.0")
-public class SupportedFormats {
-
-  /**
-   * Defines that a pipeline element (data processor or data sink) supports processing messaging arriving in JSON format
-   *
-   * @return The resulting {@link org.apache.streampipes.model.grounding.TransportFormat}.
-   */
-  public static TransportFormat jsonFormat() {
-    return new TransportFormat(MessageFormat.JSON);
-  }
-
-  /**
-   * Defines that a pipeline element (data processor or data sink) supports processing messaging arriving in Thrift
-   * format
-   *
-   * @return The resulting {@link org.apache.streampipes.model.grounding.TransportFormat}.
-   */
-  public static TransportFormat thriftFormat() {
-    return new TransportFormat(MessageFormat.THRIFT);
-  }
-
-  /**
-   * Defines that a pipeline element (data processor or data sink) supports processing messaging
-   * arriving in Cbor format
-   *
-   * @return The resulting {@link org.apache.streampipes.model.grounding.TransportFormat}.
-   */
-  public static TransportFormat cborFormat() {
-    return new TransportFormat(MessageFormat.CBOR);
-  }
-
-  /**
-   * Defines that a pipeline element (data processor or data sink) supports processing messaging
-   * arriving in fast-serialization format
-   *
-   * @return The resulting {@link org.apache.streampipes.model.grounding.TransportFormat}.
-   */
-  public static TransportFormat fstFormat() {
-    return new TransportFormat(MessageFormat.FST);
-  }
-
-  /**
-   * Defines that a pipeline element (data processor or data sink) supports processing messaging
-   * arriving in smile format
-   *
-   * @return The resulting {@link org.apache.streampipes.model.grounding.TransportFormat}.
-   */
-  public static TransportFormat smileFormat() {
-    return new TransportFormat(MessageFormat.SMILE);
-  }
-}
diff --git a/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.html b/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.html
index 7cae7a6df9..db4ec28b7f 100644
--- a/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.html
+++ b/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.html
@@ -20,7 +20,7 @@
     fxLayout="column"
     fxFlex="100"
     class="panel-outer"
-    [ngStyle]="{ margin: outerMargin, height: '100%' }"
+    [ngStyle]="{ margin: outerMargin }"
 >
     <div
         class="general-panel-header"
@@ -40,7 +40,8 @@
 
     <div
         class="general-panel"
-        [ngStyle]="{ padding: innerPadding, height: '100%' }"
+        fxFlex="100"
+        [ngStyle]="{ padding: innerPadding }"
     >
         <ng-content fxFlex="100"></ng-content>
     </div>
diff --git a/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.scss b/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.scss
index 8c22486a15..566a81007f 100644
--- a/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.scss
+++ b/ui/projects/streampipes/shared-ui/src/lib/components/basic-inner-panel/basic-inner-panel.component.scss
@@ -19,7 +19,7 @@
 .panel-outer {
     margin-top: 15px;
     margin-bottom: 15px;
-    border: 2px solid var(--color-bg-3);
+    border: 1px solid var(--color-bg-3);
 }
 
 .general-panel {
@@ -29,19 +29,19 @@
 .general-panel-header {
     margin-top: -1px;
     background: var(--color-bg-2);
-    border: 0px solid var(--color-bg-3);
-    border-bottom: 2px solid var(--color-bg-3);
+    border-top: 1px solid var(--color-bg-3);
+    border-bottom: 1px solid var(--color-bg-3);
     padding-left: 5px;
-    height: 50px;
-    min-height: 50px;
-    max-height: 50px;
+    height: 40px;
+    min-height: 40px;
+    max-height: 40px;
 }
 
 .content-box-title {
     margin-left: 5px;
     padding-left: 5px;
-    border-left: 4px solid var(--color-accent);
-    font-weight: 600;
+    border-left: 3px solid var(--color-accent);
+    font-weight: 500;
     font-size: 13pt;
     white-space: nowrap;
 }


Test patch:
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessorTest.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessorTest.java
index 8de43fcd03..c16e270d44 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessorTest.java
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/staticmetadata/StaticMetaDataEnrichmentProcessorTest.java
@@ -104,7 +104,8 @@ public class StaticMetaDataEnrichmentProcessorTest {
 
   @Test
   public void castValueOfMetaDataConfigurationDefault() {
-    StaticMetaDataConfiguration config = new StaticMetaDataConfiguration("runtimeName", "default", "default");
+    StaticMetaDataConfiguration config = new StaticMetaDataConfiguration(
+        "runtimeName", "default", "default", "", "");
 
     assertEquals("default", processor.castValueOfMetaDataConfiguration(config));
   }
@@ -112,7 +113,7 @@ public class StaticMetaDataEnrichmentProcessorTest {
   private static StaticMetaDataConfiguration getSampleMetaDataConfiguration(
       String value, String dataType
   ) {
-    return new StaticMetaDataConfiguration("runtimeName", value, dataType);
+    return new StaticMetaDataConfiguration("runtimeName", value, dataType, "", "");
   }
 
 }