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 2020/02/05 18:31:56 UTC

[incubator-streampipes] 01/02: Merge branch 'dev' into new_dashboard

This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch new_dashboard
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git

commit 43284380ebaff7be89290e946cfb85c7e196a253
Merge: 6866ebc 188f610
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Sun Feb 2 16:13:56 2020 +0100

    Merge branch 'dev' into new_dashboard

 .asf.yaml                                          |  14 +
 .gitlab-ci.yml                                     | 250 +++++++++-
 LICENSE-binary                                     | 503 +++++++++++++++++++--
 README.md                                          |  18 +-
 licenses/BSD_2-Clause                              |  14 +
 licenses/BSD_3-Clause                              |  16 +
 licenses/CDDL_1.0                                  |  83 ++++
 licenses/CDDL_1.1                                  |  88 ++++
 licenses/CDDL_LICENSE_1.1                          |  90 ++++
 licenses/EPL_1.0                                   |  83 ++++
 licenses/EPL_2.0                                   |  81 ++++
 licenses/Eclipse_Distribution_License_v1.0         |  11 +
 pom.xml                                            |  10 +
 streampipes-backend/Dockerfile                     |   3 +-
 streampipes-backend/{Dockerfile => Dockerfile.arm} |   7 +-
 streampipes-connect-container-master/Dockerfile    |   3 +-
 .../{Dockerfile => Dockerfile.arm}                 |   4 +-
 .../master/init/AdapterMasterContainer.java        |   2 +-
 .../master/management/DescriptionManagement.java   |  34 ++
 .../master/management/WorkerRestClient.java        |  79 +++-
 .../container/master/rest/DescriptionResource.java |  78 ++++
 .../worker/init/AdapterWorkerContainer.java        |  34 +-
 .../init/AdapterWorkerContainerResourceConfig.java |   4 +
 .../worker/management/AdapterWorkerManagement.java |  12 +-
 .../container/worker/rest/AdapterResource.java     |  77 ++++
 .../container/worker/rest/ProtocolResource.java    |  77 ++++
 .../connect/management/AdapterUtils.java           |   4 +-
 .../connect/adapter/sdk/ParameterExtractor.java    |  83 +++-
 .../container/locales/LabelGenerator.java          |  64 ++-
 .../streampipes/container/util/AssetsUtil.java     |  22 +-
 .../model/staticproperty/AnyStaticProperty.java    |  10 +-
 .../staticproperty/CollectionStaticProperty.java   |   5 +
 .../model/staticproperty/OneOfStaticProperty.java  |   9 +
 .../RuntimeResolvableAnyStaticProperty.java        |   5 +
 .../RuntimeResolvableOneOfStaticProperty.java      |   4 +
 .../staticproperty/SelectionStaticProperty.java    |  20 +
 .../model/staticproperty/StaticPropertyGroup.java  |  25 +
 .../src/main/resources/advancedtextfilter.jsonld   | 181 --------
 .../src/main/resources/test-invocation.jsonld      | 398 ----------------
 .../src/test/resources/TestChartGenerator.jsonld   |   1 -
 .../src/test/resources/TestCompletePipeline.jsonld |   1 -
 .../src/test/resources/TestConsumerMapping.jsonld  |   1 -
 .../src/test/resources/TestGrounding.jsonld        |   1 -
 .../src/test/resources/TestGroundingMatch.jsonld   |   1 -
 .../src/test/resources/TestListMatching.jsonld     |   1 -
 .../resources/TestListMatchingListProperty.jsonld  |   1 -
 .../test/resources/TestMappingBinaryNode.jsonld    | 114 -----
 .../test/resources/TestMappingBinaryNode2.jsonld   |   1 -
 .../resources/TestMappingBinaryNode2ndNode.jsonld  |   1 -
 .../resources/TestMappingBinaryThreeNodes.jsonld   |   1 -
 .../resources/TestMappingBinaryTwoNodes2.jsonld    |   1 -
 .../src/test/resources/TestMappingFourNodes.jsonld |   1 -
 .../test/resources/TestMappingSubclasses.jsonld    |   1 -
 .../test/resources/TestMappingTextFilter.jsonld    |   1 -
 .../src/test/resources/TestMappingTwoNodes.jsonld  |   1 -
 .../src/test/resources/TestMappingTwoNodes2.jsonld |   1 -
 .../src/test/resources/TestNestedMatching.jsonld   |   1 -
 .../src/test/resources/TestPipelineRenaming.jsonld |   2 -
 .../src/test/resources/TestRecommendation.jsonld   |   1 -
 .../src/test/resources/TestRecommendation2.jsonld  |   1 -
 .../src/test/resources/pipeline.json               |   1 -
 .../rest/shared/util/JsonLdUtilsTest.java          |  29 +-
 .../apache/streampipes/sdk/StaticProperties.java   |  38 ++
 ...AbstractConfigurablePipelineElementBuilder.java |  13 +
 .../builder/adapter/AdapterDescriptionBuilder.java |   5 +
 .../adapter/ProtocolDescriptionBuilder.java        |  14 +-
 .../adapter/SpecificDataSetAdapterBuilder.java     |  13 +
 .../adapter/SpecificDataStreamAdapterBuilder.java  |  15 +
 .../sdk/extractor/AbstractParameterExtractor.java  |   4 +
 .../streampipes/sdk/helpers/EpProperties.java      |   2 +-
 .../sdk/builder/TestProcessingElementBuilder.java  |  46 --
 .../sdk/builder/TestSpDataStreamBuilder.java       |  45 --
 .../src/test/resources/pipeline.json               |   1 -
 .../resources/sepa-description-graph-sample.jsonld | 302 -------------
 .../resources/sepa-invocation-graph-sample.jsonld  | 311 -------------
 .../org/apache/streampipes/vocabulary/MhWirth.java |  48 --
 .../apache/streampipes/vocabulary/ProaSense.java   |  26 --
 .../apache/streampipes/vocabulary/SPSensor.java    |   5 +
 .../apache/streampipes/vocabulary/StreamPipes.java |   4 +
 ui/Dockerfile                                      |   3 +-
 ui/{Dockerfile => Dockerfile.arm}                  |   6 +-
 ui/src/app/connect/connect.module.ts               | 382 ++++++++--------
 .../adapter-description.component.html             | 148 +++---
 .../adapter-description.component.ts               | 255 ++++++-----
 .../data-marketplace/data-marketplace.service.ts   | 487 ++++++++++----------
 ...aticProperty.ts => CollectionStaticProperty.ts} |  16 +-
 ui/src/app/connect/model/GroupStaticProperty.ts    |   3 +
 .../app/connect/model/SelectionStaticProperty.ts   |  86 ++--
 .../connect/model/connect/AdapterDescription.ts    |  13 +
 .../connect/new-adapter/new-adapter.component.html |   2 +-
 .../protocol-component/protocol.component.html     |   2 +-
 .../static-alternatives.component.css              |   2 +-
 .../static-alternatives.component.html             |  12 +-
 .../static-any-input.component.html                |  66 ++-
 .../static-collection.component.css}               |   3 +-
 .../static-collection.component.html               |  68 +++
 .../static-collection.component.ts                 |  78 ++++
 .../static-file-input.component.html               |  10 +-
 .../static-free-input.component.html               |   5 +-
 .../static-group/static-group.component.css        |   4 +
 .../static-group/static-group.component.html       |  18 +-
 .../static-mapping-nary.component.css              |   4 +
 .../static-mapping-nary.component.html             |  12 +-
 .../static-mapping-unary.component.html            |  10 +-
 .../static-number-input.component.html             |   1 -
 .../static-one-of-input.component.css              |   3 +
 .../static-one-of-input.component.html             |  46 +-
 .../static-property-util.service.ts                | 126 +++++-
 .../static-property.component.html                 |   5 +
 .../static-properties/static-property.component.ts |   5 +
 ...atic-runtime-resolvable-any-input.component.css |   3 +
 ...tic-runtime-resolvable-any-input.component.html |  29 +-
 ...ic-runtime-resolvable-oneof-input.component.css |  16 +
 ...c-runtime-resolvable-oneof-input.component.html |  56 ++-
 .../static-secret-input.component.css              |   5 -
 .../static-secret-input.component.html             |  15 +-
 .../static-text-input.component.css                |   5 -
 .../static-text-input.component.html               |   1 -
 .../static-url-input.component.css                 |   6 -
 .../static-url-input.component.html                |   1 -
 .../pipeline-details/pipeline-details.component.ts |   2 +-
 .../pipeline-details.controller.ts                 |   1 +
 .../pipeline-details/pipeline-details.tmpl.html    |   3 +-
 ui/src/app/pipelines/pipelines.controller.ts       |   2 +
 .../platform-services/tsonld-serializer.service.ts |   2 +
 ui/src/app/platform-services/tsonld/tsonld.ts      |   8 +-
 126 files changed, 3189 insertions(+), 2409 deletions(-)

diff --cc streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java
index bb4e459,db8c6db..d8b5da5
--- a/streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java
+++ b/streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java
@@@ -353,20 -353,7 +353,24 @@@ public class StreamPipes 
    public static final String SECRET_STATIC_PROPERTY = NS + "SecretStaticProperty";
    public static final String IS_ENCRYPTED = NS + "isEncrypted";
  
+   // UI Rendering
+ 
+   public static final String IS_HORIZONTAL_RENDERING = NS + "isHorizontalRendering";
++
 +  public static final String DASHBOARD_ENTITY = NS + "DashboardEntity";
 +  public static final String DASHBOARD_MODEL = NS + "DashboardModel";
 +  public static final String DASHBOARD_WIDGET_MODEL = NS + "DashboardWidgetModel";
 +  public static final String DASHBOARD_WIDGET_SETTINGS = NS + "DashboardWidgetSettings";
 +
 +  public static final String HAS_DASHBOARD_WIDGET_SETTINGS = NS + "hasDashboardWidgetSettings";
 +  public static final String HAS_DASHBOARD_WIDGET_DATA_CONFIG = NS + "hasDashboardWidgetDataConfig";
 +  public static final String HAS_DASHBOARD_WIDGET_LABEL = NS + "hasDashboardWidgetLabel";
 +  public static final String HAS_DASHBOARD_WIDGET_NAME = NS + "hasDashboardWidgetName";
 +  public static final String HAS_VISUALIZATION_NAME = NS + "hasVisualizationName";
 +  public static final String HAS_TOPIC = NS + "hasTopic";
 +  public static final String HAS_PIPELINE_ID = NS + "hasPipelineId";
 +  public static final String VISUALIZABLE_PIPELINE = NS + "VisualizablePipeline" ;
 +  public static final String ENTITY_CONTAINER = NS + "EntityContainer";
 +  public static final String CONTAINS_ELEMENTS = NS + "containsElement";
 +  public static final String HAS_DASHBOARD_WIDGET_ID = "hasDashboardWidgetId";
  }
diff --cc ui/src/app/connect/connect.module.ts
index 41b25a3,d530df5..df4b923
--- a/ui/src/app/connect/connect.module.ts
+++ b/ui/src/app/connect/connect.module.ts
@@@ -1,190 -1,190 +1,192 @@@
- /*
-  * 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.
-  *
-  */
- 
- import { CommonModule } from '@angular/common';
- import { NgModule } from '@angular/core';
- import { FlexLayoutModule } from '@angular/flex-layout';
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
- import {
-     MatFormFieldModule,
-     MatGridListModule,
- } from '@angular/material';
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
- import { BrowserModule } from '@angular/platform-browser';
- 
- import { ConnectComponent } from './connect.component';
- import { NewAdapterComponent } from './new-adapter/new-adapter.component';
- 
- import { FormatFormComponent } from './format-form/format-form.component';
- import { SelectProtocolComponent } from './select-protocol-component/select-protocol.component';
- 
- import { EventPropertyPrimitiveComponent } from './schema-editor/event-property-primitive/event-property-primitive.component';
- import { EventPropertyComponent } from './schema-editor/event-property/event-property.component';
- import { EventSchemaComponent } from './schema-editor/event-schema/event-schema.component';
- 
- import { StaticPropertyComponent } from './static-properties/static-property.component';
- 
- import { CustomMaterialModule } from '../CustomMaterial/custom-material.module';
- 
- import { RestService } from './rest.service';
- 
- import { MatInputModule } from '@angular/material';
- import { DragulaModule } from 'ng2-dragula';
- import { AdapterStartedDialog } from './new-adapter/component/adapter-started-dialog.component';
- import { DataTypesService } from './schema-editor/data-type.service';
- import { StaticFreeInputComponent } from './static-properties/static-free-input/static-free-input.component';
- import { StaticNumberInputComponent } from './static-properties/static-number-input/static-number-input.component';
- import { StaticPropertyUtilService } from './static-properties/static-property-util.service';
- import { StaticTextInputComponent } from './static-properties/static-text-input/static-text-input.component';
- import { StaticUrlInputComponent } from './static-properties/static-url-input/static-url-input.component';
- import { TransformationRuleService } from './transformation-rule.service';
- import { StaticSecretInputComponent } from "./static-properties/static-secret-input/static-secret-input.component";
- 
- import { ProtocolComponent } from './protocol-component/protocol.component';
- 
- import { ShepherdService } from '../services/tour/shepherd.service';
- import { ConnectService } from './connect.service';
- import { AdapterDescriptionComponent } from './data-marketplace/adapter-description/adapter-description.component';
- import { DataMarketplaceComponent } from './data-marketplace/data-marketplace.component';
- import { DataMarketplaceService } from './data-marketplace/data-marketplace.service';
- import { FormatComponent } from './format-component/format.component';
- import { FormatListComponent } from './format-list-component/format-list.component';
- import { ProtocolListComponent } from './protocol-list-component/protocol-list.component';
- import { UnitProviderService } from './schema-editor/unit-provider.service';
- import { SelectStaticPropertiesComponent } from './select-static-properties-component/select-static-properties.component';
- import { StaticAnyInput } from './static-properties/static-any-input/static-any-input.component';
- import { StaticOneOfInputComponent } from './static-properties/static-one-of-input/static-one-of-input.component';
- import { IconService } from './new-adapter/icon.service';
- import { StaticFileInputComponent } from './static-properties/static-file-input/static-file-input.component';
- import { StaticFileRestService } from './static-properties/static-file-input/static-file-rest.service';
- import { FileManagementComponent } from './file-management/file-management.component';
- import { FileRestService } from './file-management/service/filerest.service';
- import { StaticRuntimeResolvableAnyInputComponent } from "./static-properties/static-runtime-resolvable-any-input/static-runtime-resolvable-any-input.component";
- import { StaticRuntimeResolvableOneOfInputComponent } from "./static-properties/static-runtime-resolvable-oneof-input/static-runtime-resolvable-oneof-input.component";
- import { StaticGroupComponent } from './static-properties/static-group/static-group.component';
- import { StaticAlternativesComponent } from './static-properties/static-alternatives/static-alternatives.component';
- 
- 
- import { FilterPipe } from '../connect/data-marketplace/filter.pipe';
- import { AdapterExportDialog } from './data-marketplace/adapter-export/adapter-export-dialog.component';
- import { AdapterUploadDialog } from './data-marketplace/adapter-upload/adapter-upload-dialog.component';
- import { EventPropertyListComponent } from './schema-editor/event-property-list/event-property-list.component';
- import { StaticMappingNaryComponent } from './static-properties/static-mapping-nary/static-mapping-nary.component';
- import { StaticMappingUnaryComponent } from './static-properties/static-mapping-unary/static-mapping-unary.component';
- import { TimestampPipe } from './filter/timestamp.pipe';
- import { PlatformServicesModule } from '../platform-services/platform.module';
- 
- import { TreeModule } from 'angular-tree-component';
- import { EventSchemaPreviewComponent } from './schema-editor/event-schema-preview/event-schema-preview.component';
- import {EventPropertyRowComponent} from "./schema-editor/event-property-row/event-property-row.component";
- import {PropertySelectorService} from "../services/property-selector.service";
- 
- 
- @NgModule({
-     imports: [
-         BrowserModule,
-         FormsModule,
-         ReactiveFormsModule,
-         CommonModule,
-         FlexLayoutModule,
-         MatGridListModule,
-         CustomMaterialModule,
-         DragulaModule,
-         MatProgressSpinnerModule,
-         MatInputModule,
-         MatFormFieldModule,
-         PlatformServicesModule,
-         TreeModule.forRoot(),
-     ],
-     exports: [
-         StaticPropertyComponent,
-         SelectStaticPropertiesComponent
-     ],
-     declarations: [
-         NewAdapterComponent,
-         SelectProtocolComponent,
-         FormatFormComponent,
-         EventSchemaComponent,
-         EventPropertyPrimitiveComponent,
-         EventPropertyComponent,
-         EventPropertyRowComponent,
-         EventPropertyListComponent,
-         StaticPropertyComponent,
-         AdapterStartedDialog,
-         AdapterExportDialog,
-         AdapterUploadDialog,
-         StaticNumberInputComponent,
-         StaticUrlInputComponent,
-         StaticTextInputComponent,
-         StaticFreeInputComponent,
-         StaticSecretInputComponent,
-         StaticFileInputComponent,
-         StaticMappingNaryComponent,
-         StaticMappingUnaryComponent,
-         TimestampPipe,
-         StaticAnyInput,
-         ProtocolComponent,
-         ProtocolListComponent,
-         FormatListComponent,
-         FormatComponent,
-         DataMarketplaceComponent,
-         AdapterDescriptionComponent,
-         ConnectComponent,
-         SelectStaticPropertiesComponent,
-         StaticOneOfInputComponent,
-         StaticRuntimeResolvableAnyInputComponent,
-         StaticRuntimeResolvableOneOfInputComponent,
-         FileManagementComponent,
-         FilterPipe,
-         EventSchemaPreviewComponent,
-         StaticGroupComponent,
-         StaticAlternativesComponent,
-     ],
-     providers: [
-         RestService,
-         ConnectService,
-         DataTypesService,
-         TransformationRuleService,
-         StaticPropertyUtilService,
-         DataMarketplaceService,
-         IconService,
-         ShepherdService,
-         UnitProviderService,
-         TimestampPipe,
-         FileRestService,
-         StaticFileRestService,
-         PropertySelectorService,
-         {
-             provide: '$state',
-             useFactory: ($injector: any) => $injector.get('$state'),
-             deps: ['$injector'],
-         },
-         {
-             provide: '$timeout',
-             useFactory: ($injector: any) => $injector.get('$timeout'),
-             deps: ['$injector'],
-         },
-         {
-             provide: 'TourProviderService',
-             useFactory: ($injector: any) => $injector.get('TourProviderService'),
-             deps: ['$injector'],
-         },
-     ],
-     entryComponents: [ConnectComponent, AdapterStartedDialog, AdapterExportDialog, AdapterUploadDialog, EventPropertyComponent],
- })
- export class ConnectModule { }
+ /*
+  * 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.
+  *
+  */
+ 
+ import { CommonModule } from '@angular/common';
+ import { NgModule } from '@angular/core';
+ import { FlexLayoutModule } from '@angular/flex-layout';
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+ import {
+     MatFormFieldModule,
+     MatGridListModule,
+ } from '@angular/material';
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
+ import { BrowserModule } from '@angular/platform-browser';
+ 
+ import { ConnectComponent } from './connect.component';
+ import { NewAdapterComponent } from './new-adapter/new-adapter.component';
+ 
+ import { FormatFormComponent } from './format-form/format-form.component';
+ import { SelectProtocolComponent } from './select-protocol-component/select-protocol.component';
+ 
+ import { EventPropertyPrimitiveComponent } from './schema-editor/event-property-primitive/event-property-primitive.component';
+ import { EventPropertyComponent } from './schema-editor/event-property/event-property.component';
+ import { EventSchemaComponent } from './schema-editor/event-schema/event-schema.component';
+ 
+ import { StaticPropertyComponent } from './static-properties/static-property.component';
+ 
+ import { CustomMaterialModule } from '../CustomMaterial/custom-material.module';
+ 
+ import { RestService } from './rest.service';
+ 
+ import { MatInputModule } from '@angular/material';
+ import { DragulaModule } from 'ng2-dragula';
+ import { AdapterStartedDialog } from './new-adapter/component/adapter-started-dialog.component';
+ import { DataTypesService } from './schema-editor/data-type.service';
+ import { StaticFreeInputComponent } from './static-properties/static-free-input/static-free-input.component';
+ import { StaticNumberInputComponent } from './static-properties/static-number-input/static-number-input.component';
+ import { StaticPropertyUtilService } from './static-properties/static-property-util.service';
+ import { StaticTextInputComponent } from './static-properties/static-text-input/static-text-input.component';
+ import { StaticUrlInputComponent } from './static-properties/static-url-input/static-url-input.component';
+ import { TransformationRuleService } from './transformation-rule.service';
+ import { StaticSecretInputComponent } from "./static-properties/static-secret-input/static-secret-input.component";
+ 
+ import { ProtocolComponent } from './protocol-component/protocol.component';
+ 
+ import { ShepherdService } from '../services/tour/shepherd.service';
+ import { ConnectService } from './connect.service';
+ import { AdapterDescriptionComponent } from './data-marketplace/adapter-description/adapter-description.component';
+ import { DataMarketplaceComponent } from './data-marketplace/data-marketplace.component';
+ import { DataMarketplaceService } from './data-marketplace/data-marketplace.service';
+ import { FormatComponent } from './format-component/format.component';
+ import { FormatListComponent } from './format-list-component/format-list.component';
+ import { ProtocolListComponent } from './protocol-list-component/protocol-list.component';
+ import { UnitProviderService } from './schema-editor/unit-provider.service';
+ import { SelectStaticPropertiesComponent } from './select-static-properties-component/select-static-properties.component';
+ import { StaticAnyInput } from './static-properties/static-any-input/static-any-input.component';
+ import { StaticOneOfInputComponent } from './static-properties/static-one-of-input/static-one-of-input.component';
+ import { IconService } from './new-adapter/icon.service';
+ import { StaticFileInputComponent } from './static-properties/static-file-input/static-file-input.component';
+ import { StaticFileRestService } from './static-properties/static-file-input/static-file-rest.service';
+ import { FileManagementComponent } from './file-management/file-management.component';
+ import { FileRestService } from './file-management/service/filerest.service';
+ import { StaticRuntimeResolvableAnyInputComponent } from "./static-properties/static-runtime-resolvable-any-input/static-runtime-resolvable-any-input.component";
+ import { StaticRuntimeResolvableOneOfInputComponent } from "./static-properties/static-runtime-resolvable-oneof-input/static-runtime-resolvable-oneof-input.component";
+ import { StaticGroupComponent } from './static-properties/static-group/static-group.component';
+ import { StaticAlternativesComponent } from './static-properties/static-alternatives/static-alternatives.component';
+ import {StaticCollectionComponent} from './static-properties/static-collection/static-collection.component';
+ 
+ 
+ import { FilterPipe } from '../connect/data-marketplace/filter.pipe';
+ import { AdapterExportDialog } from './data-marketplace/adapter-export/adapter-export-dialog.component';
+ import { AdapterUploadDialog } from './data-marketplace/adapter-upload/adapter-upload-dialog.component';
+ import { EventPropertyListComponent } from './schema-editor/event-property-list/event-property-list.component';
+ import { StaticMappingNaryComponent } from './static-properties/static-mapping-nary/static-mapping-nary.component';
+ import { StaticMappingUnaryComponent } from './static-properties/static-mapping-unary/static-mapping-unary.component';
+ import { TimestampPipe } from './filter/timestamp.pipe';
+ import { PlatformServicesModule } from '../platform-services/platform.module';
+ 
+ import { TreeModule } from 'angular-tree-component';
+ import { EventSchemaPreviewComponent } from './schema-editor/event-schema-preview/event-schema-preview.component';
+ import {EventPropertyRowComponent} from "./schema-editor/event-property-row/event-property-row.component";
++import {PropertySelectorService} from "../services/property-selector.service";
+ 
+ 
+ @NgModule({
+     imports: [
+         BrowserModule,
+         FormsModule,
+         ReactiveFormsModule,
+         CommonModule,
+         FlexLayoutModule,
+         MatGridListModule,
+         CustomMaterialModule,
+         DragulaModule,
+         MatProgressSpinnerModule,
+         MatInputModule,
+         MatFormFieldModule,
+         PlatformServicesModule,
+         TreeModule.forRoot(),
+     ],
+     exports: [
+         StaticPropertyComponent,
+         SelectStaticPropertiesComponent
+     ],
+     declarations: [
+         NewAdapterComponent,
+         SelectProtocolComponent,
+         FormatFormComponent,
+         EventSchemaComponent,
+         EventPropertyPrimitiveComponent,
+         EventPropertyComponent,
+         EventPropertyRowComponent,
+         EventPropertyListComponent,
+         StaticPropertyComponent,
+         AdapterStartedDialog,
+         AdapterExportDialog,
+         AdapterUploadDialog,
+         StaticNumberInputComponent,
+         StaticUrlInputComponent,
+         StaticTextInputComponent,
+         StaticFreeInputComponent,
+         StaticSecretInputComponent,
+         StaticFileInputComponent,
+         StaticMappingNaryComponent,
+         StaticMappingUnaryComponent,
+         TimestampPipe,
+         StaticAnyInput,
+         ProtocolComponent,
+         ProtocolListComponent,
+         FormatListComponent,
+         FormatComponent,
+         DataMarketplaceComponent,
+         AdapterDescriptionComponent,
+         ConnectComponent,
+         SelectStaticPropertiesComponent,
+         StaticOneOfInputComponent,
+         StaticRuntimeResolvableAnyInputComponent,
+         StaticRuntimeResolvableOneOfInputComponent,
+         FileManagementComponent,
+         FilterPipe,
+         EventSchemaPreviewComponent,
+         StaticGroupComponent,
+         StaticAlternativesComponent,
+         StaticCollectionComponent,
+     ],
+     providers: [
+         RestService,
+         ConnectService,
+         DataTypesService,
+         TransformationRuleService,
+         StaticPropertyUtilService,
+         DataMarketplaceService,
+         IconService,
+         ShepherdService,
+         UnitProviderService,
+         TimestampPipe,
+         FileRestService,
+         StaticFileRestService,
++        PropertySelectorService,
+         {
+             provide: '$state',
+             useFactory: ($injector: any) => $injector.get('$state'),
+             deps: ['$injector'],
+         },
+         {
+             provide: '$timeout',
+             useFactory: ($injector: any) => $injector.get('$timeout'),
+             deps: ['$injector'],
+         },
+         {
+             provide: 'TourProviderService',
+             useFactory: ($injector: any) => $injector.get('TourProviderService'),
+             deps: ['$injector'],
+         },
+     ],
+     entryComponents: [ConnectComponent, AdapterStartedDialog, AdapterExportDialog, AdapterUploadDialog, EventPropertyComponent],
+ })
+ export class ConnectModule { }
diff --cc ui/src/app/connect/static-properties/static-mapping-unary/static-mapping-unary.component.html
index 440b103,3212128..78cf07f
--- a/ui/src/app/connect/static-properties/static-mapping-unary/static-mapping-unary.component.html
+++ b/ui/src/app/connect/static-properties/static-mapping-unary/static-mapping-unary.component.html
@@@ -16,17 -16,19 +16,19 @@@
    ~
    -->
  
- <div id="formWrapper" fxFlex="90" fxLayout="row">
-     <div fxFlex="20">
-     <p>{{staticProperty.label}}: </p>
+ <div id="formWrapper" fxFlex="100" fxLayout="column">
+     <div>
+         <p>{{staticProperty.label}}: <br>
+             <mat-hint class="description">{{staticProperty.description}}</mat-hint>
+         </p>
      </div>
      <div fxFlex fxLayout="row">
-         <form fxFlex [formGroup]="unaryTextForm">
+         <form fxFlex [formGroup]="unaryTextForm" style="padding-left: 10px">
              <mat-form-field class="example-full-width">
                  <!--<mat-form-field class="example-full-width">-->
 -                <mat-select [placeholder]="staticProperty.label">
 -                    <mat-option *ngFor="let eventProperty of eventSchema.eventProperties" [value]="{'a': staticProperty, 'b': eventProperty}">
 -                        {{getName(eventProperty)}}
 +                <mat-select [placeholder]="staticProperty.label" [(value)]="staticProperty.selectedProperty">
 +                    <mat-option *ngFor="let property of availableProperties " [value]="property.runtimeName">
 +                        {{getName(property)}}
                      </mat-option>
                  </mat-select>
              </mat-form-field>
diff --cc ui/src/app/platform-services/tsonld-serializer.service.ts
index 9e3470a,79b8f9a..aedc2ed
--- a/ui/src/app/platform-services/tsonld-serializer.service.ts
+++ b/ui/src/app/platform-services/tsonld-serializer.service.ts
@@@ -91,10 -91,7 +91,11 @@@ import {SecretStaticProperty} from "../
  import {AlternativesStaticProperty} from '../connect/model/AlternativesStaticProperty';
  import {AlternativeStaticProperty} from '../connect/model/AlternativeStaticProperty';
  import {GroupStaticProperty} from '../connect/model/GroupStaticProperty';
+ import { CollectionStaticProperty } from "../connect/model/CollectionStaticProperty";
 +import {VisualizablePipeline} from "../core-model/dashboard/VisualizablePipeline";
 +import {DashboardWidget} from "../core-model/dashboard/DashboardWidget";
 +import {DashboardWidgetDataConfig} from "../core-model/dashboard/DashboardWidgetDataConfig";
 +import {DashboardWidgetSettings} from "../core-model/dashboard/DashboardWidgetSettings";
  
  
  @Injectable()
@@@ -180,13 -177,8 +181,14 @@@ export class TsonLdSerializerService 
          tsonld.addClassMapping(GroupStaticProperty);
          tsonld.addClassMapping(AlternativesStaticProperty);
          tsonld.addClassMapping(AlternativeStaticProperty);
+         tsonld.addClassMapping(CollectionStaticProperty);
  
 +        tsonld.addClassMapping(DashboardWidget);
 +        tsonld.addClassMapping(DashboardWidgetDataConfig);
 +        tsonld.addClassMapping(DashboardWidgetSettings);
 +
 +        tsonld.addClassMapping(VisualizablePipeline);
 +
          tsonld.addContext('sp', 'https://streampipes.org/vocabulary/v1/');
          tsonld.addContext('spi', 'urn:streampipes.org:spi:');
          tsonld.addContext('foaf', 'http://xmlns.com/foaf/0.1/');