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/09/10 21:11:40 UTC

[incubator-streampipes] branch dev updated: [STREAMPIPES-233] Make visualizations independent of pipeline element id

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

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


The following commit(s) were added to refs/heads/dev by this push:
     new d93e48d  [STREAMPIPES-233] Make visualizations independent of pipeline element id
d93e48d is described below

commit d93e48d2c773946e9a43857340f5013140097dbd
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Tue Sep 8 12:36:23 2020 +0200

    [STREAMPIPES-233] Make visualizations independent of pipeline element id
---
 .../model/dashboard/DashboardWidgetModel.java       | 19 +++++++++++++++++++
 .../rest/api/dashboard/IVisualizablePipeline.java   |  2 ++
 .../rest/impl/dashboard/VisualizablePipeline.java   | 21 +++++++++++++++++++++
 ui/src/app/core-model/gen/streampipes-model.ts      | 18 ++++++++++++------
 .../components/widget/dashboard-widget.component.ts |  3 ++-
 .../add-visualization-dialog.component.ts           |  2 ++
 ui/src/app/dashboard/services/dashboard.service.ts  |  8 ++++++++
 7 files changed, 66 insertions(+), 7 deletions(-)

diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
index 498ee16..4877162 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardWidgetModel.java
@@ -50,6 +50,9 @@ public class DashboardWidgetModel extends DashboardEntity {
   @RdfProperty(StreamPipes.HAS_TOPIC)
   private String visualizablePipelineTopic;
 
+  private String visualizationName;
+  private String pipelineId;
+
   public DashboardWidgetModel() {
     super();
   }
@@ -85,4 +88,20 @@ public class DashboardWidgetModel extends DashboardEntity {
   public void setVisualizablePipelineTopic(String visualizablePipelineTopic) {
     this.visualizablePipelineTopic = visualizablePipelineTopic;
   }
+
+  public String getVisualizationName() {
+    return visualizationName;
+  }
+
+  public void setVisualizationName(String visualizationName) {
+    this.visualizationName = visualizationName;
+  }
+
+  public String getPipelineId() {
+    return pipelineId;
+  }
+
+  public void setPipelineId(String pipelineId) {
+    this.pipelineId = pipelineId;
+  }
 }
diff --git a/streampipes-rest/src/main/java/org/apache/streampipes/rest/api/dashboard/IVisualizablePipeline.java b/streampipes-rest/src/main/java/org/apache/streampipes/rest/api/dashboard/IVisualizablePipeline.java
index d3b3d6e..9a50583 100644
--- a/streampipes-rest/src/main/java/org/apache/streampipes/rest/api/dashboard/IVisualizablePipeline.java
+++ b/streampipes-rest/src/main/java/org/apache/streampipes/rest/api/dashboard/IVisualizablePipeline.java
@@ -27,4 +27,6 @@ public interface IVisualizablePipeline {
   Response getVisualizablePipeline(String id);
 
   Response getVisualizablePipelineByTopic(String topic);
+
+  Response getVisualizablePipelineByPipelineIdAndVisualizationName(String pipelineId, String visualizationName);
 }
diff --git a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/VisualizablePipeline.java b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/VisualizablePipeline.java
index ffb345b..a3d26a8 100644
--- a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/VisualizablePipeline.java
+++ b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/dashboard/VisualizablePipeline.java
@@ -68,7 +68,28 @@ public class VisualizablePipeline extends AbstractRestInterface implements IVisu
     return matchedPipeline.isPresent() ? ok(matchedPipeline.get()) : fail();
   }
 
+  @GET
+  @JacksonSerialized
+  @Produces(MediaType.APPLICATION_JSON)
+  @Path("{pipelineId}/{visualizationName}")
+  @Override
+  public Response getVisualizablePipelineByPipelineIdAndVisualizationName(@PathParam("pipelineId") String pipelineId,
+                                                                          @PathParam("visualizationName") String visualizationName) {
+    List<org.apache.streampipes.model.dashboard.VisualizablePipeline> pipelines =
+            getVisualizablePipelineStorage().getAllVisualizablePipelines();
+
+    Optional<org.apache.streampipes.model.dashboard.VisualizablePipeline> matchedPipeline =
+            pipelines
+                    .stream()
+                    .filter(pipeline -> pipeline.getPipelineId().equals(pipelineId)
+                            && pipeline.getVisualizationName().equals(visualizationName)).findFirst();
+
+    return matchedPipeline.isPresent() ? ok(matchedPipeline.get()) : fail();
+  }
+
   private IVisualizablePipelineStorage getVisualizablePipelineStorage() {
     return getNoSqlStorage().getVisualizablePipelineStorage();
   }
+
+
 }
diff --git a/ui/src/app/core-model/gen/streampipes-model.ts b/ui/src/app/core-model/gen/streampipes-model.ts
index 8ca8ccf..e7e2bbd 100644
--- a/ui/src/app/core-model/gen/streampipes-model.ts
+++ b/ui/src/app/core-model/gen/streampipes-model.ts
@@ -19,7 +19,7 @@
 /* tslint:disable */
 /* eslint-disable */
 // @ts-nocheck
-// Generated using typescript-generator version 2.24.612 on 2020-08-20 14:07:30.
+// Generated using typescript-generator version 2.24.612 on 2020-09-08 12:28:17.
 
 export class AbstractStreamPipesEntity {
     "@class": "org.apache.streampipes.model.base.NamedStreamPipesEntity" | "org.apache.streampipes.model.connect.adapter.AdapterDescription" | "org.apache.streampipes.model.connect.adapter.AdapterSetDescription" | "org.apache.streampipes.model.connect.adapter.GenericAdapterSetDescription" | "org.apache.streampipes.model.connect.adapter.SpecificAdapterSetDescription" | "org.apache.streampipes.model.connect.adapter.AdapterStreamDescription" | "org.apache.streampipes.model.connect.adapter.G [...]
@@ -151,8 +151,8 @@ export class NamedStreamPipesEntity extends AbstractStreamPipesEntity {
         instance.includedLocales = __getCopyArrayFn(__identity<string>())(data.includedLocales);
         instance.applicationLinks = __getCopyArrayFn(ApplicationLink.fromData)(data.applicationLinks);
         instance.connectedTo = __getCopyArrayFn(__identity<string>())(data.connectedTo);
-        instance.dom = data.dom;
         instance.uri = data.uri;
+        instance.dom = data.dom;
         return instance;
     }
 }
@@ -187,9 +187,9 @@ export class AdapterDescription extends NamedStreamPipesEntity {
         instance.config = __getCopyArrayFn(StaticProperty.fromDataUnion)(data.config);
         instance.rules = __getCopyArrayFn(TransformationRuleDescription.fromDataUnion)(data.rules);
         instance.category = __getCopyArrayFn(__identity<string>())(data.category);
+        instance.valueRules = __getCopyArrayFn(__identity<any>())(data.valueRules);
         instance.streamRules = __getCopyArrayFn(__identity<any>())(data.streamRules);
         instance.schemaRules = __getCopyArrayFn(__identity<any>())(data.schemaRules);
-        instance.valueRules = __getCopyArrayFn(__identity<any>())(data.valueRules);
         instance.couchDBId = data.couchDBId;
         instance._rev = data._rev;
         return instance;
@@ -803,8 +803,10 @@ export class DashboardModel {
 export class DashboardWidgetModel extends DashboardEntity {
     "@class": "org.apache.streampipes.model.dashboard.DashboardWidgetModel";
     dashboardWidgetSettings: DashboardWidgetSettings;
+    pipelineId: string;
     visualizablePipelineId: string;
     visualizablePipelineTopic: string;
+    visualizationName: string;
     widgetId: string;
 
     static fromData(data: DashboardWidgetModel, target?: DashboardWidgetModel): DashboardWidgetModel {
@@ -817,6 +819,8 @@ export class DashboardWidgetModel extends DashboardEntity {
         instance.dashboardWidgetSettings = DashboardWidgetSettings.fromData(data.dashboardWidgetSettings);
         instance.visualizablePipelineId = data.visualizablePipelineId;
         instance.visualizablePipelineTopic = data.visualizablePipelineTopic;
+        instance.visualizationName = data.visualizationName;
+        instance.pipelineId = data.pipelineId;
         return instance;
     }
 }
@@ -1555,9 +1559,9 @@ export class GenericAdapterSetDescription extends AdapterSetDescription implemen
         }
         const instance = target || new GenericAdapterSetDescription();
         super.fromData(data, instance);
+        instance.eventSchema = EventSchema.fromData(data.eventSchema);
         instance.protocolDescription = ProtocolDescription.fromData(data.protocolDescription);
         instance.formatDescription = FormatDescription.fromData(data.formatDescription);
-        instance.eventSchema = EventSchema.fromData(data.eventSchema);
         return instance;
     }
 }
@@ -1574,9 +1578,9 @@ export class GenericAdapterStreamDescription extends AdapterStreamDescription im
         }
         const instance = target || new GenericAdapterStreamDescription();
         super.fromData(data, instance);
+        instance.eventSchema = EventSchema.fromData(data.eventSchema);
         instance.protocolDescription = ProtocolDescription.fromData(data.protocolDescription);
         instance.formatDescription = FormatDescription.fromData(data.formatDescription);
-        instance.eventSchema = EventSchema.fromData(data.eventSchema);
         return instance;
     }
 }
@@ -1651,6 +1655,7 @@ export class KafkaTransportProtocol extends TransportProtocol {
     groupId: string;
     kafkaPort: number;
     lingerMs: number;
+    maxRequestSize: string;
     messageMaxBytes: string;
     offset: string;
     zookeeperHost: string;
@@ -1667,6 +1672,7 @@ export class KafkaTransportProtocol extends TransportProtocol {
         instance.kafkaPort = data.kafkaPort;
         instance.lingerMs = data.lingerMs;
         instance.messageMaxBytes = data.messageMaxBytes;
+        instance.maxRequestSize = data.maxRequestSize;
         instance.acks = data.acks;
         instance.batchSize = data.batchSize;
         instance.offset = data.offset;
@@ -2453,8 +2459,8 @@ export class SpDataSet extends SpDataStream {
         instance.supportedGrounding = EventGrounding.fromData(data.supportedGrounding);
         instance.datasetInvocationId = data.datasetInvocationId;
         instance.correspondingPipeline = data.correspondingPipeline;
-        instance.actualTopicName = data.actualTopicName;
         instance.brokerHostname = data.brokerHostname;
+        instance.actualTopicName = data.actualTopicName;
         return instance;
     }
 }
diff --git a/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts b/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
index 63648cf..a9ca7eb 100644
--- a/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
+++ b/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
@@ -56,7 +56,8 @@ export class DashboardWidgetComponent implements OnInit {
     ngOnInit(): void {
         this.dashboardService.getWidget(this.widget.id).subscribe(response => {
             this.configuredWidget = response;
-            this.dashboardService.getVisualizablePipelineByTopic(this.configuredWidget.visualizablePipelineTopic).subscribe(pipeline => {
+            this.dashboardService.getVisualizablePipelineByPipelineIdAndVisualizationName(this.configuredWidget.pipelineId,
+                this.configuredWidget.visualizationName).subscribe(pipeline => {
                 this.widgetDataConfig = pipeline;
                 this.pipelineNotRunning = false;
                 this.widgetLoaded = true;
diff --git a/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts b/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts
index 31a064d..11b1cb4 100644
--- a/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts
+++ b/ui/src/app/dashboard/dialogs/add-widget/add-visualization-dialog.component.ts
@@ -193,6 +193,8 @@ export class AddVisualizationDialogComponent implements OnInit, AfterViewInit {
             configuredWidget.dashboardWidgetSettings["@class"] = "org.apache.streampipes.model.dashboard.DashboardWidgetSettings";
             configuredWidget.visualizablePipelineId = this.selectedPipeline._id;
             configuredWidget.visualizablePipelineTopic = this.selectedPipeline.topic;
+            configuredWidget.visualizationName = this.selectedPipeline.visualizationName;
+            configuredWidget.pipelineId = this.selectedPipeline.pipelineId;
             if (!this.editMode) {
                 this.dashboardService.saveWidget(configuredWidget).subscribe(response => {
                     this.dialogRef.close(response);
diff --git a/ui/src/app/dashboard/services/dashboard.service.ts b/ui/src/app/dashboard/services/dashboard.service.ts
index de3dae3..32681a5 100644
--- a/ui/src/app/dashboard/services/dashboard.service.ts
+++ b/ui/src/app/dashboard/services/dashboard.service.ts
@@ -68,6 +68,14 @@ export class DashboardService {
             }));
     }
 
+    getVisualizablePipelineByPipelineIdAndVisualizationName(pipelineId: string, visualizationName: string): Observable<VisualizablePipeline> {
+        return this.http
+            .get(this.visualizablePipelineUrl + "/" + pipelineId + "/" + visualizationName)
+            .pipe(map(data => {
+                return VisualizablePipeline.fromData(data as VisualizablePipeline);
+            }));
+    }
+
     getDashboards(): Observable<Array<Dashboard>> {
         return this.http.get(this.dashboardUrl).pipe(map(data => {
            return data as Dashboard[];