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/24 21:52:52 UTC

[incubator-streampipes] branch dev updated: STREAMPIPES-58: Identify widgets based on topic

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 85584b1  STREAMPIPES-58: Identify widgets based on topic
85584b1 is described below

commit 85584b1b413abac4c3b483b35ee01c9024a1645a
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Mon Feb 24 22:52:37 2020 +0100

    STREAMPIPES-58: Identify widgets based on topic
---
 .../model/dashboard/DashboardWidgetModel.java      | 11 +++++
 .../rest/api/dashboard/IVisualizablePipeline.java  |  2 +
 .../rest/impl/dashboard/VisualizablePipeline.java  | 18 ++++++++
 ui/src/app/core-model/dashboard/DashboardWidget.ts |  3 ++
 .../overview/dashboard-overview.component.css      |  1 +
 .../widget/dashboard-widget.component.ts           |  2 +-
 .../add-visualization-dialog.component.ts          |  3 +-
 .../dashboard-v2/services/MockDashboard.service.ts | 48 ---------------------
 .../app/dashboard-v2/services/dashboard.service.ts |  8 ++++
 ui/src/scss/main.scss                              |  2 +
 ui/src/scss/sp/loading-bar.scss                    | 49 ++++++++++++++++++++++
 11 files changed, 96 insertions(+), 51 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 1fb2068..70bf68a 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
@@ -42,6 +42,9 @@ public class DashboardWidgetModel extends DashboardEntity {
   @RdfProperty(StreamPipes.HAS_PIPELINE_ID)
   private String visualizablePipelineId;
 
+  @RdfProperty(StreamPipes.HAS_TOPIC)
+  private String visualizablePipelineTopic;
+
   public DashboardWidgetModel() {
     super();
   }
@@ -69,4 +72,12 @@ public class DashboardWidgetModel extends DashboardEntity {
   public void setVisualizablePipelineId(String visualizablePipelineId) {
     this.visualizablePipelineId = visualizablePipelineId;
   }
+
+  public String getVisualizablePipelineTopic() {
+    return visualizablePipelineTopic;
+  }
+
+  public void setVisualizablePipelineTopic(String visualizablePipelineTopic) {
+    this.visualizablePipelineTopic = visualizablePipelineTopic;
+  }
 }
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 d1bab1b..d3b3d6e 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
@@ -25,4 +25,6 @@ public interface IVisualizablePipeline {
   Response getVisualizablePipelines();
 
   Response getVisualizablePipeline(String id);
+
+  Response getVisualizablePipelineByTopic(String topic);
 }
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 6c3cd59..c74a904 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
@@ -24,6 +24,9 @@ import org.apache.streampipes.rest.shared.annotation.JsonLdSerialized;
 import org.apache.streampipes.rest.shared.util.SpMediaType;
 import org.apache.streampipes.storage.api.IVisualizablePipelineStorage;
 
+import java.util.List;
+import java.util.Optional;
+
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -51,6 +54,21 @@ public class VisualizablePipeline extends AbstractRestInterface implements IVisu
    return pipeline != null ? ok(pipeline) : fail();
   }
 
+  @GET
+  @JsonLdSerialized
+  @Produces(SpMediaType.JSONLD)
+  @Path("topic/{topic}")
+  @Override
+  public Response getVisualizablePipelineByTopic(@PathParam("topic") String topic) {
+    List<org.apache.streampipes.model.dashboard.VisualizablePipeline> pipelines =
+            getVisualizablePipelineStorage().getAllVisualizablePipelines();
+
+    Optional<org.apache.streampipes.model.dashboard.VisualizablePipeline> matchedPipeline =
+            pipelines.stream().filter(pipeline -> pipeline.getTopic().equals(topic)).findFirst();
+
+    return matchedPipeline.isPresent() ? ok(matchedPipeline.get()) : fail();
+  }
+
   private IVisualizablePipelineStorage getVisualizablePipelineStorage() {
     return getNoSqlStorage().getVisualizablePipelineStorage();
   }
diff --git a/ui/src/app/core-model/dashboard/DashboardWidget.ts b/ui/src/app/core-model/dashboard/DashboardWidget.ts
index e15829f..d6897fd 100644
--- a/ui/src/app/core-model/dashboard/DashboardWidget.ts
+++ b/ui/src/app/core-model/dashboard/DashboardWidget.ts
@@ -30,6 +30,9 @@ export class DashboardWidget extends UnnamedStreamPipesEntity {
     @RdfProperty('sp:hasPipelineId')
     visualizablePipelineId: string;
 
+    @RdfProperty('sp:hasTopic')
+    visualizablePipelineTopic: string;
+
     @RdfProperty('sp:couchDbId')
     _id: string;
 
diff --git a/ui/src/app/dashboard-v2/components/overview/dashboard-overview.component.css b/ui/src/app/dashboard-v2/components/overview/dashboard-overview.component.css
index dc9cc49..074edf3 100644
--- a/ui/src/app/dashboard-v2/components/overview/dashboard-overview.component.css
+++ b/ui/src/app/dashboard-v2/components/overview/dashboard-overview.component.css
@@ -18,6 +18,7 @@
 
 table {
     width:100%;
+    background: transparent;
 }
 
 .m-20 {
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 69b1663..f2994bb 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
@@ -51,7 +51,7 @@ export class DashboardWidgetComponent implements OnInit {
     ngOnInit(): void {
         this.dashboardService.getWidget(this.widget.id).subscribe(response => {
             this.configuredWidget = response;
-            this.dashboardService.getVisualizablePipelineById(this.configuredWidget.visualizablePipelineId).subscribe(pipeline => {
+            this.dashboardService.getVisualizablePipelineByTopic(this.configuredWidget.visualizablePipelineTopic).subscribe(pipeline => {
                 this.widgetDataConfig = pipeline;
                 this.widgetLoaded = true;
             });
diff --git a/ui/src/app/dashboard-v2/dialogs/add-widget/add-visualization-dialog.component.ts b/ui/src/app/dashboard-v2/dialogs/add-widget/add-visualization-dialog.component.ts
index 979139c..58ec6ad 100644
--- a/ui/src/app/dashboard-v2/dialogs/add-widget/add-visualization-dialog.component.ts
+++ b/ui/src/app/dashboard-v2/dialogs/add-widget/add-visualization-dialog.component.ts
@@ -77,7 +77,6 @@ export class AddVisualizationDialogComponent {
             this.dialogTitle = "Add widget";
             this.dashboardService.getVisualizablePipelines().subscribe(visualizations => {
                 this.visualizablePipelines = visualizations;
-                console.log(this.visualizablePipelines);
             });
             this.availableWidgets = WidgetRegistry.getAvailableWidgetTemplates();
         } else {
@@ -142,8 +141,8 @@ export class AddVisualizationDialogComponent {
             let configuredWidget: DashboardWidget = new DashboardWidget();
             configuredWidget.dashboardWidgetSettings = this.selectedWidget;
             configuredWidget.visualizablePipelineId = this.selectedPipeline._id;
+            configuredWidget.visualizablePipelineTopic = this.selectedPipeline.topic;
             if (!this.data) {
-                console.log(configuredWidget);
                 this.dashboardService.saveWidget(configuredWidget).subscribe(response => {
                     this.dialogRef.close(response);
                 });
diff --git a/ui/src/app/dashboard-v2/services/MockDashboard.service.ts b/ui/src/app/dashboard-v2/services/MockDashboard.service.ts
deleted file mode 100644
index 72b81a4..0000000
--- a/ui/src/app/dashboard-v2/services/MockDashboard.service.ts
+++ /dev/null
@@ -1,48 +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.
- *
- */
-
-import {Injectable} from '@angular/core';
-import {HttpClient} from '@angular/common/http';
-
-import {Observable} from 'rxjs';
-import {map} from 'rxjs/operators';
-
-import {Dashboard} from '../models/dashboard.model';
-
-@Injectable({
-    providedIn: 'root'
-})
-export class MockDashboardService {
-
-    private readonly DASHBOARDS = 'assets/dashboards.json';
-
-    constructor(protected httpClient: HttpClient) {}
-
-    public getDashboards(): Observable<Dashboard[]> {
-
-        return this.httpClient.get<Dashboard[]>(this.DASHBOARDS);
-    }
-
-    public getDashboard(dashboardId: string): Observable<Dashboard>  {
-
-        return this.httpClient.get<Dashboard[]>(this.DASHBOARDS).pipe(
-            map((dashboards: Dashboard[]) =>
-                dashboards.find(dashboard => dashboard.id === dashboardId)));
-    }
-
-}
\ No newline at end of file
diff --git a/ui/src/app/dashboard-v2/services/dashboard.service.ts b/ui/src/app/dashboard-v2/services/dashboard.service.ts
index 96e466f..d24d34c 100644
--- a/ui/src/app/dashboard-v2/services/dashboard.service.ts
+++ b/ui/src/app/dashboard-v2/services/dashboard.service.ts
@@ -51,6 +51,14 @@ export class DashboardService {
             });
     }
 
+    getVisualizablePipelineByTopic(topic: string): Observable<VisualizablePipeline> {
+        return this.http
+            .get(this.visualizablePipelineUrl + "/topic/" + topic)
+            .map(data => {
+                return this.tsonLdSerializerService.fromJsonLd(data, 'sp:VisualizablePipeline')
+            });
+    }
+
     getDashboards(): Observable<Array<Dashboard>> {
         return this.http.get(this.dashboardUrl).map(data => {
            return data as Dashboard[];
diff --git a/ui/src/scss/main.scss b/ui/src/scss/main.scss
index da89a35..9200d4f 100644
--- a/ui/src/scss/main.scss
+++ b/ui/src/scss/main.scss
@@ -20,6 +20,7 @@
 
 @import '~angular-tree-component/dist/angular-tree-component.css';
 @import '~angular-material/angular-material.scss';
+@import '~@angular/material/prebuilt-themes/indigo-pink.css';
 @import '~bootstrap/dist/css/bootstrap.css';
 @import '~trix/dist/trix.css';
 @import '~slick-carousel/slick/slick-theme.css';
@@ -41,6 +42,7 @@
 @import './sp/shepherd-new';
 
 @import './sp/main';
+@import './sp/loading-bar';
 @import './sp/buttons';
 @import './sp/buttons.ng1';
 @import './sp/spinner';
diff --git a/ui/src/scss/sp/loading-bar.scss b/ui/src/scss/sp/loading-bar.scss
new file mode 100644
index 0000000..e50006b
--- /dev/null
+++ b/ui/src/scss/sp/loading-bar.scss
@@ -0,0 +1,49 @@
+/*
+ *   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.
+ */
+
+#loading-bar .bar {
+  -webkit-transition: width 350ms;
+  -moz-transition: width 350ms;
+  -o-transition: width 350ms;
+  transition: width 350ms;
+
+  background: $sp-color-accent;
+  position: fixed;
+  z-index: 10002;
+  top: 0px;
+  left: 0;
+  width: 100%;
+  height: 3px;
+  border-bottom-right-radius: 1px;
+  border-top-right-radius: 1px;
+}
+
+#loading-bar-spinner .spinner-icon {
+  width: 14px;
+  height: 14px;
+
+  border:  solid 2px transparent;
+  border-top-color:  $sp-color-accent;
+  border-left-color: $sp-color-accent;
+  border-radius: 50%;
+
+  -webkit-animation: loading-bar-spinner 400ms linear infinite;
+  -moz-animation:    loading-bar-spinner 400ms linear infinite;
+  -ms-animation:     loading-bar-spinner 400ms linear infinite;
+  -o-animation:      loading-bar-spinner 400ms linear infinite;
+  animation:         loading-bar-spinner 400ms linear infinite;
+}
\ No newline at end of file