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:57 UTC

[incubator-streampipes] 02/02: Add serialization/deserialization support for 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 7a48b9b134d13a7d1fb83a9a7bd2c02c069cee6a
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Wed Feb 5 19:30:10 2020 +0100

    Add serialization/deserialization support for new dashboard
---
 streampipes-backend/development/env                |  1 +
 .../{DashboardModel.java => DashboardItem.java}    | 12 +----------
 .../model/dashboard/DashboardModel.java            |  6 +++++-
 .../model/dashboard/DashboardWidgetDataConfig.java |  4 ++++
 .../rest/impl/dashboard/DashboardWidget.java       |  2 +-
 .../serializers/jsonld/JsonLdTransformer.java      |  4 +++-
 .../apache/streampipes/vocabulary/StreamPipes.java |  3 ++-
 ui/src/app/connect/model/FreeTextStaticProperty.ts |  3 +--
 ui/src/app/connect/model/MappingPropertyUnary.ts   |  3 +--
 ui/src/app/connect/model/StaticProperty.ts         |  6 ++----
 .../app/connect/model/UnnamedStreamPipesEntity.ts  | 23 ++++++++++++++++++++++
 .../static-property-util.service.ts                | 10 ++++++----
 ui/src/app/core-model/dashboard/DashboardWidget.ts | 11 ++++-------
 .../dashboard/DashboardWidgetDataConfig.ts         |  9 ++++-----
 .../dashboard/DashboardWidgetSettings.ts           | 10 ++++------
 .../components/panel/dashboard-panel.component.ts  |  4 ++--
 .../widget/dashboard-widget.component.html         |  5 ++++-
 .../widget/dashboard-widget.component.ts           | 18 ++++++++++++-----
 .../widgets/number/number-config.component.ts      |  4 ++--
 .../widgets/number/number-viz.component.html       |  0
 ui/src/app/dashboard-v2/dashboard.component.ts     |  2 +-
 ui/src/app/dashboard-v2/dashboard.module.ts        |  2 --
 .../add-visualization-dialog.component.html        |  6 +++---
 .../dialogs/add-visualization-dialog.component.ts  | 13 ++++--------
 ui/src/app/dashboard-v2/models/dashboard.model.ts  | 14 ++-----------
 .../dashboard-v2/models/widget-settings.model.ts   | 10 ----------
 .../dashboard-v2/registry/widget-config-builder.ts | 15 +++++++-------
 .../app/dashboard-v2/registry/widget-registry.ts   |  6 +++---
 ui/src/app/dashboard-v2/sdk/ep-requirements.ts     |  2 +-
 .../sdk/schema-requirements-builder.ts             |  3 ++-
 .../app/dashboard-v2/services/dashboard.service.ts | 16 +++++++++++----
 ui/src/app/platform-services/tsonld/tsonld.js      | 10 ----------
 ui/src/assets/dashboards.json                      |  2 +-
 33 files changed, 120 insertions(+), 119 deletions(-)

diff --git a/streampipes-backend/development/env b/streampipes-backend/development/env
index 1a45d33..6cf517d 100644
--- a/streampipes-backend/development/env
+++ b/streampipes-backend/development/env
@@ -19,3 +19,4 @@ SP_KAFKA_REST_PORT=8073
 SP_BACKEND_HOST=localhost
 SP_INFLUX_HOST=localhost
 SP_INFLUX_PORT=8086
+SP_JMS_HOST=localhost
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
similarity index 75%
copy from streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java
copy to streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
index 3991dac..706f1dc 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardItem.java
@@ -15,17 +15,7 @@
  * limitations under the License.
  *
  */
-
 package org.apache.streampipes.model.dashboard;
 
-import org.apache.streampipes.vocabulary.StreamPipes;
-import org.streampipes.empire.annotations.RdfsClass;
-
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-
-@RdfsClass(StreamPipes.DASHBOARD_MODEL)
-@MappedSuperclass
-@Entity
-public class DashboardModel {
+public class DashboardItem {
 }
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java
index 3991dac..4a5a138 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardModel.java
@@ -27,5 +27,9 @@ import javax.persistence.MappedSuperclass;
 @RdfsClass(StreamPipes.DASHBOARD_MODEL)
 @MappedSuperclass
 @Entity
-public class DashboardModel {
+public class DashboardModel extends DashboardEntity {
+
+  public DashboardModel() {
+
+  }
 }
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetDataConfig.java b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetDataConfig.java
index 9f18dc1..62ab64f 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetDataConfig.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetDataConfig.java
@@ -22,11 +22,15 @@ import org.apache.streampipes.model.base.UnnamedStreamPipesEntity;
 import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.vocabulary.StreamPipes;
 import org.streampipes.empire.annotations.RdfProperty;
+import org.streampipes.empire.annotations.RdfsClass;
 
 import javax.persistence.CascadeType;
+import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.OneToOne;
 
+@RdfsClass(StreamPipes.DASHBOARD_WIDGET_DATA_CONFIG)
+@Entity
 public class DashboardWidgetDataConfig extends UnnamedStreamPipesEntity {
 
   @RdfProperty(StreamPipes.HAS_VISUALIZATION_NAME)
diff --git a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DashboardWidget.java b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DashboardWidget.java
index ed75ff4..b919e07 100644
--- a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DashboardWidget.java
+++ b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/DashboardWidget.java
@@ -49,7 +49,7 @@ public class DashboardWidget extends AbstractRestInterface implements IDashboard
 
   @GET
   @JsonLdSerialized
-  @Produces(MediaType.APPLICATION_JSON)
+  @Produces(SpMediaType.JSONLD)
   @Path("/{widgetId}")
   @Override
   public Response getDashboardWidget(@PathParam("widgetId") String widgetId) {
diff --git a/streampipes-serializers/src/main/java/org/apache/streampipes/serializers/jsonld/JsonLdTransformer.java b/streampipes-serializers/src/main/java/org/apache/streampipes/serializers/jsonld/JsonLdTransformer.java
index 4695f4a..ee40558 100644
--- a/streampipes-serializers/src/main/java/org/apache/streampipes/serializers/jsonld/JsonLdTransformer.java
+++ b/streampipes-serializers/src/main/java/org/apache/streampipes/serializers/jsonld/JsonLdTransformer.java
@@ -67,7 +67,9 @@ public class JsonLdTransformer implements RdfTransformer {
           StreamPipes.ADAPTER_DESCRIPTION_LIST,
           StreamPipes.RUNTIME_OPTIONS_REQUEST,
           StreamPipes.RUNTIME_OPTIONS_RESPONSE,
-          StreamPipes.CONNECT_WORKER_CONTAINER
+          StreamPipes.CONNECT_WORKER_CONTAINER,
+          StreamPipes.DASHBOARD_WIDGET_MODEL,
+          StreamPipes.DASHBOARD_MODEL
 
   );
 
diff --git a/streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java b/streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java
index d8b5da5..70dac11 100644
--- a/streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java
+++ b/streampipes-vocabulary/src/main/java/org/apache/streampipes/vocabulary/StreamPipes.java
@@ -372,5 +372,6 @@ public class StreamPipes {
   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";
+  public static final String HAS_DASHBOARD_WIDGET_ID = NS + "hasDashboardWidgetId";
+  public static final String DASHBOARD_WIDGET_DATA_CONFIG = NS + "DashboardWidgetDataConfig" ;
 }
diff --git a/ui/src/app/connect/model/FreeTextStaticProperty.ts b/ui/src/app/connect/model/FreeTextStaticProperty.ts
index bf4a3db..6ac1a48 100644
--- a/ui/src/app/connect/model/FreeTextStaticProperty.ts
+++ b/ui/src/app/connect/model/FreeTextStaticProperty.ts
@@ -33,9 +33,8 @@ export class FreeTextStaticProperty extends StaticProperty {
   //TODO find better solution
   public render: boolean;
 
-  constructor(id: string) {
+  constructor() {
     super();
-    this.id = id;
     this.render = true;
   }
 
diff --git a/ui/src/app/connect/model/MappingPropertyUnary.ts b/ui/src/app/connect/model/MappingPropertyUnary.ts
index cd831b6..1199552 100644
--- a/ui/src/app/connect/model/MappingPropertyUnary.ts
+++ b/ui/src/app/connect/model/MappingPropertyUnary.ts
@@ -36,9 +36,8 @@ export class MappingPropertyUnary extends StaticProperty {
     public selectedProperty: string;
 
 
-    constructor(id: string) {
+    constructor() {
         super();
-        this.id = id;
     }
 
 }
diff --git a/ui/src/app/connect/model/StaticProperty.ts b/ui/src/app/connect/model/StaticProperty.ts
index 4806f43..daa85de 100644
--- a/ui/src/app/connect/model/StaticProperty.ts
+++ b/ui/src/app/connect/model/StaticProperty.ts
@@ -19,14 +19,12 @@
 import {RdfId} from '../../platform-services/tsonld/RdfId';
 import {RdfProperty} from '../../platform-services/tsonld/RdfsProperty';
 import {RdfsClass} from '../../platform-services/tsonld/RdfsClass';
+import {UnnamedStreamPipesEntity} from "./UnnamedStreamPipesEntity";
 
 @RdfsClass('sp:StaticProperty')
-export class StaticProperty {
+export class StaticProperty extends UnnamedStreamPipesEntity {
   public isValid = false;
 
-  @RdfId
-  public id: string;
-
   @RdfProperty('sp:elementName')
   public elementName: string;
 
diff --git a/ui/src/app/connect/model/UnnamedStreamPipesEntity.ts b/ui/src/app/connect/model/UnnamedStreamPipesEntity.ts
new file mode 100644
index 0000000..cfdfa40
--- /dev/null
+++ b/ui/src/app/connect/model/UnnamedStreamPipesEntity.ts
@@ -0,0 +1,23 @@
+import {RdfsClass} from "../../platform-services/tsonld/RdfsClass";
+import {RdfId} from "../../platform-services/tsonld/RdfId";
+
+@RdfsClass('sp:UnnamedStreamPipesEntity')
+export class UnnamedStreamPipesEntity {
+
+    private prefix = "urn:streampipes.org:spi:";
+    private chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+    @RdfId
+    public id: string;
+
+    constructor() {
+        this.id = this.prefix + this.randomString(6);
+    }
+
+    randomString(length) {
+        let result = '';
+        for (let i = length; i > 0; --i) result += this.chars[Math.floor(Math.random() * this.chars.length)];
+        return result;
+    }
+
+}
\ No newline at end of file
diff --git a/ui/src/app/connect/static-properties/static-property-util.service.ts b/ui/src/app/connect/static-properties/static-property-util.service.ts
index 0d09746..69d6f62 100644
--- a/ui/src/app/connect/static-properties/static-property-util.service.ts
+++ b/ui/src/app/connect/static-properties/static-property-util.service.ts
@@ -43,7 +43,8 @@ export class StaticPropertyUtilService{
         let id = 'urn:streampipes.org:spi::' + this.generateID(6);
 
         if (val instanceof FreeTextStaticProperty) {
-            clone = new FreeTextStaticProperty(id);
+            clone = new FreeTextStaticProperty();
+            clone.id = id;
             clone.value = val.value;
             clone.requiredDomainProperty = val.requiredDomainProperty;
         }
@@ -53,18 +54,19 @@ export class StaticPropertyUtilService{
             clone.locationPath = val.locationPath;
         }
         else if (val instanceof MappingPropertyUnary) {
-            clone = new MappingPropertyUnary(id);
+            clone = new MappingPropertyUnary();
+            clone.id = id;
             clone.requirementSelector = val.requirementSelector;
             clone.mapsFromOptions = val.mapsFromOptions;
             clone.propertyScope = val.propertyScope;
-            clone.selectedProperties = val.selectedProperties;
+            clone.selectedProperty = val.selectedProperty;
         }
         else if (val instanceof MappingPropertyNary) {
             clone = new MappingPropertyNary(id);
             clone.requirementSelector = val.requirementSelector;
             clone.mapsFromOptions = val.mapsFromOptions;
             clone.propertyScope = val.propertyScope;
-            clone.selectedProperty = val.selectedProperty;
+            clone.selectedProperties = val.selectedProperties;
         }
         else if (val instanceof SecretStaticProperty) {
             clone = new SecretStaticProperty(id);
diff --git a/ui/src/app/core-model/dashboard/DashboardWidget.ts b/ui/src/app/core-model/dashboard/DashboardWidget.ts
index 97c303b..640b994 100644
--- a/ui/src/app/core-model/dashboard/DashboardWidget.ts
+++ b/ui/src/app/core-model/dashboard/DashboardWidget.ts
@@ -5,12 +5,10 @@ import {EventSchema} from "../../connect/schema-editor/model/EventSchema";
 import {DashboardWidgetSettings} from "./DashboardWidgetSettings";
 import {DashboardWidgetDataConfig} from "./DashboardWidgetDataConfig";
 import {VisualizablePipeline} from "./VisualizablePipeline";
+import {UnnamedStreamPipesEntity} from "../../connect/model/UnnamedStreamPipesEntity";
 
 @RdfsClass('sp:DashboardWidgetModel')
-export class DashboardWidget {
-
-    @RdfId
-    public id: string;
+export class DashboardWidget extends UnnamedStreamPipesEntity {
 
     @RdfProperty('sp:hasDashboardWidgetSettings')
     dashboardWidgetSettings: DashboardWidgetSettings;
@@ -27,8 +25,7 @@ export class DashboardWidget {
     @RdfProperty('sp:hasDashboardWidgetId')
     widgetId:string;
 
-
-    constructor(id: string) {
-        this.id = id;
+    constructor() {
+        super();
     }
 }
\ No newline at end of file
diff --git a/ui/src/app/core-model/dashboard/DashboardWidgetDataConfig.ts b/ui/src/app/core-model/dashboard/DashboardWidgetDataConfig.ts
index 06027b2..738cd41 100644
--- a/ui/src/app/core-model/dashboard/DashboardWidgetDataConfig.ts
+++ b/ui/src/app/core-model/dashboard/DashboardWidgetDataConfig.ts
@@ -3,11 +3,10 @@ import {RdfProperty} from "../../platform-services/tsonld/RdfsProperty";
 import {StaticProperty} from "../../connect/model/StaticProperty";
 import {EventSchema} from "../../connect/schema-editor/model/EventSchema";
 import {RdfsClass} from "../../platform-services/tsonld/RdfsClass";
+import {UnnamedStreamPipesEntity} from "../../connect/model/UnnamedStreamPipesEntity";
 
 @RdfsClass('sp:DashboardWidgetDataConfig')
-export class DashboardWidgetDataConfig {
-    @RdfId
-    public id: string;
+export class DashboardWidgetDataConfig extends UnnamedStreamPipesEntity {
 
     @RdfProperty('sp:hasVisualizationName')
     visualizationName: string;
@@ -18,7 +17,7 @@ export class DashboardWidgetDataConfig {
     @RdfProperty('sp:hasSchema')
     schema: EventSchema;
 
-    constructor(id: string) {
-        this.id = id;
+    constructor() {
+        super();
     }
 }
\ No newline at end of file
diff --git a/ui/src/app/core-model/dashboard/DashboardWidgetSettings.ts b/ui/src/app/core-model/dashboard/DashboardWidgetSettings.ts
index 99576ad..845fff1 100644
--- a/ui/src/app/core-model/dashboard/DashboardWidgetSettings.ts
+++ b/ui/src/app/core-model/dashboard/DashboardWidgetSettings.ts
@@ -1,13 +1,11 @@
-import {RdfId} from "../../platform-services/tsonld/RdfId";
 import {RdfProperty} from "../../platform-services/tsonld/RdfsProperty";
 import {StaticProperty} from "../../connect/model/StaticProperty";
 import {EventSchema} from "../../connect/schema-editor/model/EventSchema";
 import {RdfsClass} from "../../platform-services/tsonld/RdfsClass";
+import {UnnamedStreamPipesEntity} from "../../connect/model/UnnamedStreamPipesEntity";
 
 @RdfsClass('sp:DashboardWidgetSettings')
-export class DashboardWidgetSettings {
-    @RdfId
-    public id: string;
+export class DashboardWidgetSettings extends UnnamedStreamPipesEntity {
 
     @RdfProperty('sp:hasDashboardWidgetLabel')
     widgetLabel: string;
@@ -21,7 +19,7 @@ export class DashboardWidgetSettings {
     @RdfProperty('sp:hasSchema')
     requiredSchema: EventSchema;
 
-    constructor(id: string) {
-        this.id = id;
+    constructor() {
+        super();
     }
 }
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/components/panel/dashboard-panel.component.ts b/ui/src/app/dashboard-v2/components/panel/dashboard-panel.component.ts
index 0e7cb9d..1a7e06e 100644
--- a/ui/src/app/dashboard-v2/components/panel/dashboard-panel.component.ts
+++ b/ui/src/app/dashboard-v2/components/panel/dashboard-panel.component.ts
@@ -1,5 +1,5 @@
 import {Component, Input, OnInit} from "@angular/core";
-import {Dashboard, DashboardConfig, DashboardWidget} from "../../models/dashboard.model";
+import {Dashboard, DashboardConfig, DashboardItem} from "../../models/dashboard.model";
 import {Subscription} from "rxjs";
 import {MockDashboardService} from "../../services/MockDashboard.service";
 import {GridType} from "angular-gridster2";
@@ -16,7 +16,7 @@ export class DashboardPanelComponent implements OnInit {
     @Input() dashboard: Dashboard;
 
     public options: DashboardConfig;
-    public items: DashboardWidget[];
+    public items: DashboardItem[];
 
     protected subscription: Subscription;
 
diff --git a/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.html b/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.html
index 30daee2..838a042 100644
--- a/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.html
+++ b/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.html
@@ -7,6 +7,9 @@
         </div>
     </div>
     <div class="sp-blue-border" style="height:100%;">
-<!--        <div *ngIf="widget."></div>-->
+        <!--        <div *ngIf="widget."></div>-->
+        <div *ngIf="widgetLoaded">
+            {{configuredWidget.dashboardWidgetSettings.widgetName}}
+        </div>
     </div>
 </div>
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.ts b/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.ts
index fa4e136..92bd127 100644
--- a/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.ts
+++ b/ui/src/app/dashboard-v2/components/widget/dashboard-widget.component.ts
@@ -1,5 +1,8 @@
 import {Component, Input, OnInit} from "@angular/core";
-import {Dashboard, DashboardWidget} from "../../models/dashboard.model";
+import {Dashboard, DashboardItem} from "../../models/dashboard.model";
+import {DashboardService} from "../../services/dashboard.service";
+import {DashboardImageComponent} from "../../../app-transport-monitoring/components/dashboard-image/dashboard-image.component";
+import {DashboardWidget} from "../../../core-model/dashboard/DashboardWidget";
 
 @Component({
     selector: 'dashboard-widget',
@@ -8,13 +11,18 @@ import {Dashboard, DashboardWidget} from "../../models/dashboard.model";
 })
 export class DashboardWidgetComponent implements OnInit {
 
-    @Input() widget: DashboardWidget;
+    @Input() widget: DashboardItem;
 
-    constructor() {
+    widgetLoaded: boolean = false;
+    configuredWidget: DashboardWidget;
+
+    constructor(private dashboardService: DashboardService) {
     }
 
     ngOnInit(): void {
+        this.dashboardService.getWidget(this.widget.id).subscribe(response => {
+            this.configuredWidget = response;
+            this.widgetLoaded = true;
+        });
     }
-
-
 }
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/components/widgets/number/number-config.component.ts b/ui/src/app/dashboard-v2/components/widgets/number/number-config.component.ts
index 9b6e5d8..a167b8b 100644
--- a/ui/src/app/dashboard-v2/components/widgets/number/number-config.component.ts
+++ b/ui/src/app/dashboard-v2/components/widgets/number/number-config.component.ts
@@ -1,7 +1,7 @@
 import {WidgetConfigBuilder} from "../../../registry/widget-config-builder";
-import {WidgetSettings} from "../../../models/widget-settings.model";
 import {SchemaRequirementsBuilder} from "../../../sdk/schema-requirements-builder";
 import {EpRequirements} from "../../../sdk/ep-requirements";
+import {DashboardWidgetSettings} from "../../../../core-model/dashboard/DashboardWidgetSettings";
 
 export class NumberConfig {
 
@@ -9,7 +9,7 @@ export class NumberConfig {
 
     }
 
-    static getConfig(): WidgetSettings {
+    static getConfig(): DashboardWidgetSettings {
         return WidgetConfigBuilder.create("number", "number")
             .requiredSchema(SchemaRequirementsBuilder
                 .create()
diff --git a/ui/src/app/dashboard-v2/components/widgets/number/number-viz.component.html b/ui/src/app/dashboard-v2/components/widgets/number/number-viz.component.html
new file mode 100644
index 0000000..e69de29
diff --git a/ui/src/app/dashboard-v2/dashboard.component.ts b/ui/src/app/dashboard-v2/dashboard.component.ts
index 426a010..d5e40b2 100644
--- a/ui/src/app/dashboard-v2/dashboard.component.ts
+++ b/ui/src/app/dashboard-v2/dashboard.component.ts
@@ -1,7 +1,7 @@
 import {Component, Input, OnInit} from "@angular/core";
 import {Subscription} from "rxjs";
 import {GridType} from "angular-gridster2";
-import {Dashboard, DashboardConfig, DashboardWidget} from "./models/dashboard.model";
+import {Dashboard, DashboardConfig} from "./models/dashboard.model";
 import {MockDashboardService} from "./services/MockDashboard.service";
 
 @Component({
diff --git a/ui/src/app/dashboard-v2/dashboard.module.ts b/ui/src/app/dashboard-v2/dashboard.module.ts
index 8dd90af..629fb97 100644
--- a/ui/src/app/dashboard-v2/dashboard.module.ts
+++ b/ui/src/app/dashboard-v2/dashboard.module.ts
@@ -72,8 +72,6 @@ const dashboardWidgets = [
 export class DashboardModule {
 
     constructor() {
-
-        console.log('Dashboard Module initialised');
     }
 
 }
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.html b/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.html
index 7ad2164..3267cd9 100644
--- a/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.html
+++ b/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.html
@@ -53,10 +53,10 @@
                             [gutterSize]="100">
 
                         <mat-grid-tile class="gray" *ngFor="let widget of availableWidgets">
-                            <div [ngClass]="getSelectedPipelineCss(widget.label)"
+                            <div [ngClass]="getSelectedPipelineCss(widget.widgetLabel)"
                                  (click)="selectWidget(widget)">
-                                {{iconText(widget.label)}}
-                                <h5>{{widget.label}}</h5>
+                                {{iconText(widget.widgetLabel)}}
+                                <h5>{{widget.widgetLabel}}</h5>
                             </div>
                         </mat-grid-tile>
                     </mat-grid-list>
diff --git a/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.ts b/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.ts
index b68bcfe..737d1fc 100644
--- a/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.ts
+++ b/ui/src/app/dashboard-v2/dialogs/add-visualization-dialog.component.ts
@@ -20,9 +20,7 @@ import {Component, Inject} from "@angular/core";
 import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material";
 import {DashboardService} from "../services/dashboard.service";
 import {ElementIconText} from "../../services/get-element-icon-text.service";
-import {WidgetSettings} from "../models/widget-settings.model";
 import {WidgetRegistry} from "../registry/widget-registry";
-import {ConfiguredWidget} from "../models/dashboard.model";
 import {MappingPropertyUnary} from "../../connect/model/MappingPropertyUnary";
 import {MappingPropertyGenerator} from "../sdk/matching/mapping-property-generator";
 import {EventProperty} from "../../connect/schema-editor/model/EventProperty";
@@ -53,7 +51,7 @@ export class AddVisualizationDialogComponent {
     }];
 
     visualizablePipelines: Array<VisualizablePipeline> = [];
-    availableWidgets:  Array<WidgetSettings>;
+    availableWidgets:  Array<DashboardWidgetSettings>;
 
     selectedPipeline: VisualizablePipeline;
     selectedWidget: DashboardWidgetSettings;
@@ -134,14 +132,11 @@ export class AddVisualizationDialogComponent {
         } else if (this.page == 'select-widget') {
             this.page = 'configure-widget';
         } else {
-            let configuredWidget: DashboardWidget = {} as DashboardWidget;
+            let configuredWidget: DashboardWidget = new DashboardWidget();
             configuredWidget.widgetId = "a";
-            configuredWidget.id = "asd";
-            //configuredWidget.dashboardWidgetSettings = this.selectedWidget;
-            //configuredWidget.dashboardWidgetDataConfig = this.selectedPipeline;
-            console.log(configuredWidget);
+            configuredWidget.dashboardWidgetSettings = this.selectedWidget;
+            configuredWidget.dashboardWidgetDataConfig = this.selectedPipeline;
             this.dashboardService.saveWidget(configuredWidget).subscribe(response => {
-                console.log(response);
                 this.dialogRef.close();
             });
         }
diff --git a/ui/src/app/dashboard-v2/models/dashboard.model.ts b/ui/src/app/dashboard-v2/models/dashboard.model.ts
index f47d24d..587ff4e 100644
--- a/ui/src/app/dashboard-v2/models/dashboard.model.ts
+++ b/ui/src/app/dashboard-v2/models/dashboard.model.ts
@@ -1,26 +1,16 @@
 import {GridsterConfig, GridsterItem} from "angular-gridster2";
 import {StaticProperty} from "../../connect/model/StaticProperty";
-import {WidgetSettings} from "./widget-settings.model";
 import {WidgetData} from "./widget-data.model";
 import {VisualizablePipeline} from "../../core-model/dashboard/VisualizablePipeline";
 
 export interface DashboardConfig extends GridsterConfig {}
 
-export interface DashboardItem extends GridsterItem {}
-
-export interface DashboardWidget extends DashboardItem {
-    widgetId: string;
-}
-
-export interface ConfiguredWidget {
+export interface DashboardItem extends GridsterItem {
     widgetId: string;
-    widgetSettings: WidgetSettings;
-    widgetDataConfig: VisualizablePipeline;
-    widgetType: string;
 }
 
 export interface Dashboard {
     id?: string;
     name?: string;
-    widgets?: Array<DashboardWidget>;
+    widgets?: Array<DashboardItem>;
 }
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/models/widget-settings.model.ts b/ui/src/app/dashboard-v2/models/widget-settings.model.ts
deleted file mode 100644
index 530a835..0000000
--- a/ui/src/app/dashboard-v2/models/widget-settings.model.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import {StaticProperty} from "../../connect/model/StaticProperty";
-import {EventSchema} from "../../connect/schema-editor/model/EventSchema";
-
-export interface WidgetSettings {
-    name?: string;
-    label?: string;
-    icon?: string;
-    requiredSchema?: EventSchema;
-    config?: Array<StaticProperty>;
-}
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/registry/widget-config-builder.ts b/ui/src/app/dashboard-v2/registry/widget-config-builder.ts
index 811a178..1e7df2c 100644
--- a/ui/src/app/dashboard-v2/registry/widget-config-builder.ts
+++ b/ui/src/app/dashboard-v2/registry/widget-config-builder.ts
@@ -1,16 +1,16 @@
-import {WidgetSettings} from "../models/widget-settings.model";
 import {FreeTextStaticProperty} from "../../connect/model/FreeTextStaticProperty";
 import {CollectedSchemaRequirements} from "../sdk/collected-schema-requirements";
 import {EventSchema} from "../../connect/schema-editor/model/EventSchema";
+import {DashboardWidgetSettings} from "../../core-model/dashboard/DashboardWidgetSettings";
 
 export class WidgetConfigBuilder {
 
-    private widget: WidgetSettings;
+    private widget: DashboardWidgetSettings;
 
     private constructor(widgetName: string, widgetLabel: string) {
-        this.widget = <WidgetSettings>{};
-        this.widget.label = widgetLabel;
-        this.widget.name = widgetName;
+        this.widget = new DashboardWidgetSettings();
+        this.widget.widgetLabel = widgetLabel;
+        this.widget.widgetName = widgetName;
         this.widget.config = [];
     }
 
@@ -19,7 +19,8 @@ export class WidgetConfigBuilder {
     }
 
     requiredTextParameter(id: string, label: string, description: string): WidgetConfigBuilder {
-        let fst: FreeTextStaticProperty = new FreeTextStaticProperty(id);
+        let fst: FreeTextStaticProperty = new FreeTextStaticProperty();
+        fst.internalName = id;
         fst.label = label;
         fst.description = description;
         this.widget.config.push(fst);
@@ -33,7 +34,7 @@ export class WidgetConfigBuilder {
         return this;
     }
 
-    build(): WidgetSettings {
+    build(): DashboardWidgetSettings {
         return this.widget;
     }
 
diff --git a/ui/src/app/dashboard-v2/registry/widget-registry.ts b/ui/src/app/dashboard-v2/registry/widget-registry.ts
index 499ce77..ae62523 100644
--- a/ui/src/app/dashboard-v2/registry/widget-registry.ts
+++ b/ui/src/app/dashboard-v2/registry/widget-registry.ts
@@ -1,11 +1,11 @@
 import {NumberConfig} from "../components/widgets/number/number-config.component";
-import {WidgetSettings} from "../models/widget-settings.model";
+import {DashboardWidgetSettings} from "../../core-model/dashboard/DashboardWidgetSettings";
 
 export class WidgetRegistry {
 
-    private static availableWidgets: Array<WidgetSettings> = [NumberConfig.getConfig()];
+    private static availableWidgets: Array<DashboardWidgetSettings> = [NumberConfig.getConfig()];
 
-    static getAvailableWidgets(): Array<WidgetSettings> {
+    static getAvailableWidgets(): Array<DashboardWidgetSettings> {
         return this.availableWidgets;
     }
 }
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/sdk/ep-requirements.ts b/ui/src/app/dashboard-v2/sdk/ep-requirements.ts
index 1b2a6da..c99f638 100644
--- a/ui/src/app/dashboard-v2/sdk/ep-requirements.ts
+++ b/ui/src/app/dashboard-v2/sdk/ep-requirements.ts
@@ -5,7 +5,7 @@ import {Datatypes} from "./model/datatypes";
 export class EpRequirements {
 
     private static ep(): EventPropertyPrimitive {
-        let ep = new EventPropertyPrimitive(null, null);
+        let ep = new EventPropertyPrimitive(undefined, undefined);
         return ep;
     }
 
diff --git a/ui/src/app/dashboard-v2/sdk/schema-requirements-builder.ts b/ui/src/app/dashboard-v2/sdk/schema-requirements-builder.ts
index ce79136..736aa21 100644
--- a/ui/src/app/dashboard-v2/sdk/schema-requirements-builder.ts
+++ b/ui/src/app/dashboard-v2/sdk/schema-requirements-builder.ts
@@ -19,7 +19,8 @@ export class SchemaRequirementsBuilder {
 
     requiredPropertyWithUnaryMapping(internalId: string, label: string, description: string, eventProperty: EventProperty): SchemaRequirementsBuilder {
         eventProperty.setRuntimeName(internalId);
-        let mp = new MappingPropertyUnary(internalId);
+        let mp = new MappingPropertyUnary();
+        mp.internalName = internalId;
         mp.label = label;
         mp.description = description;
         mp.internalName = internalId;
diff --git a/ui/src/app/dashboard-v2/services/dashboard.service.ts b/ui/src/app/dashboard-v2/services/dashboard.service.ts
index 8329df4..1f1b78d 100644
--- a/ui/src/app/dashboard-v2/services/dashboard.service.ts
+++ b/ui/src/app/dashboard-v2/services/dashboard.service.ts
@@ -21,7 +21,7 @@ import {Injectable} from "@angular/core";
 import {map} from "rxjs/operators";
 import {from, Observable} from "rxjs";
 import {AuthStatusService} from "../../services/auth-status.service";
-import {ConfiguredWidget, Dashboard} from "../models/dashboard.model";
+import {Dashboard} from "../models/dashboard.model";
 import {EventSchema} from "../../connect/schema-editor/model/EventSchema";
 import {EventProperty} from "../../connect/schema-editor/model/EventProperty";
 import {EventPropertyPrimitive} from "../../connect/schema-editor/model/EventPropertyPrimitive";
@@ -87,6 +87,16 @@ export class DashboardService {
         return this.baseUrl + '/api/v2/users/' + this.authStatusService.email + '/ld/pipelines'
     }
 
+    getWidget(widgetId: string): Observable<DashboardWidget> {
+        let promise = new Promise<DashboardWidget>((resolve, reject) => {
+            this.http.get(this.dashboardWidgetUrl + "/" +widgetId).subscribe(response => {
+                let dashboardWidget = this.tsonLdSerializerService.fromJsonLd(response, "sp:DashboardWidgetModel");
+                resolve(dashboardWidget);
+            });
+        });
+        return from(promise);
+    }
+
     saveWidget(widget: DashboardWidget): Observable<StatusMessage> {
         return this.serializeAndPost(this.dashboardWidgetUrl, widget);
     }
@@ -95,17 +105,15 @@ export class DashboardService {
         this.http.post('/dashboard', dashboard);
     }
 
-    serializeAndPost(url: string, object: DashboardWidget): Observable<StatusMessage> {
+    serializeAndPost(url: string, object: any): Observable<StatusMessage> {
         let promise = new Promise<StatusMessage>((resolve, reject) => {
             this.tsonLdSerializerService.toJsonLd(object).subscribe(serialized => {
-                console.log(serialized);
                 const httpOptions = {
                     headers: new HttpHeaders({
                         'Content-Type': 'application/ld+json',
                     }),
                 };
                 this.http.post(url, serialized, httpOptions).pipe(map(response => {
-                    console.log(response);
                     resolve(response as StatusMessage);
                 })).subscribe();
             });
diff --git a/ui/src/app/platform-services/tsonld/tsonld.js b/ui/src/app/platform-services/tsonld/tsonld.js
index c49424d..f0b3cf2 100644
--- a/ui/src/app/platform-services/tsonld/tsonld.js
+++ b/ui/src/app/platform-services/tsonld/tsonld.js
@@ -157,12 +157,6 @@ var TsonLd = /** @class */ (function () {
         else if (!util_1.isUndefined(ids[id])) {
             return ids[id];
         }
-        else {
-            console.log('graph: ' + graph);
-            console.log('FIX BUG: Pass id to fromJSON-LD');
-            console.log('id: ' + id);
-            console.log('ids: ' + JSON.stringify(ids, null, 2));
-        }
         // Create the result object
         var c = this.classMapping[jsonObject['@type']];
         if (util_1.isUndefined(c)) {
@@ -202,9 +196,6 @@ var TsonLd = /** @class */ (function () {
                                     }
                                     var newObj = { '@context': context, '@graph': graph };
                                     ids[jsonObject['@id']] = result;
-                                    console.log('jsonObject: ' + JSON.stringify(jsonObject, null, 2));
-                                    console.log('elem: ' + JSON.stringify(elem, null, 2));
-                                    console.log('id: ' + jsonObject['@id']);
                                     var arrayResult = this.fromJsonLd(newObj, ids, elem['@id']);
                                     // TODO hot fix not sure if it works for all cases
                                     graph.splice(0, 1);
@@ -233,7 +224,6 @@ var TsonLd = /** @class */ (function () {
                             }
                             var newObj = { '@context': context, '@graph': graph };
                             ids[jsonObject['@id']] = result;
-                            console.log('ddddd: ' + JSON.stringify(ids, null, 2));
                             var nestedResult = this.fromJsonLd(newObj, ids);
                             result[objectProp] = nestedResult;
                         }
diff --git a/ui/src/assets/dashboards.json b/ui/src/assets/dashboards.json
index a3db8733..d0d16d8 100644
--- a/ui/src/assets/dashboards.json
+++ b/ui/src/assets/dashboards.json
@@ -5,7 +5,7 @@
     "name": "Sample Dashboard 4",
     "widgets": [
       {
-        "id": "1",
+        "id": "0bca595df0654a058f71eb7069e79d98",
         "name": "Timeline",
         "component": "timeline",
         "widgetType": "number",