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