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 c040a5a [STREAMPIPES-368] Avoid duplication of visualizable pipelines
in dashboard
c040a5a is described below
commit c040a5a79a810486dad93d0402202a5b2a44d82c
Author: Dominik Riemer <[email protected]>
AuthorDate: Fri May 21 12:05:46 2021 +0200
[STREAMPIPES-368] Avoid duplication of visualizable pipelines in dashboard
---
.../model/dashboard/DashboardEntity.java | 1 -
.../model/dashboard/DashboardWidgetModel.java | 47 ++------------
.../model/dashboard/VisualizablePipeline.java | 20 +-----
.../manager/setup/CouchDbInstallationStep.java | 1 -
.../rest/impl/dashboard/VisualizablePipeline.java | 75 +++++++++++++---------
.../streampipes/storage/api/INoSqlStorage.java | 2 -
.../storage/api/IVisualizablePipelineStorage.java | 30 ---------
.../storage/couchdb/CouchDbStorageManager.java | 5 --
.../impl/VisualizablePipelineStorageImpl.java | 43 -------------
.../streampipes/storage/couchdb/utils/Utils.java | 4 --
ui/src/app/core-model/gen/streampipes-model.ts | 31 ++++-----
.../widget/dashboard-widget.component.css | 3 +-
.../widget/dashboard-widget.component.html | 12 +++-
.../widget/dashboard-widget.component.ts | 20 ++++--
.../add-visualization-dialog.component.ts | 2 -
ui/src/app/dashboard/services/dashboard.service.ts | 19 +-----
16 files changed, 88 insertions(+), 227 deletions(-)
diff --git
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardEntity.java
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardEntity.java
index 3487940..98acdb7 100644
---
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardEntity.java
+++
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/DashboardEntity.java
@@ -35,7 +35,6 @@ import javax.persistence.MappedSuperclass;
@Entity
@JsonSubTypes({
@JsonSubTypes.Type(DashboardWidgetModel.class),
- @JsonSubTypes.Type(VisualizablePipeline.class),
@JsonSubTypes.Type(DataExplorerWidgetModel.class)
})
public abstract class DashboardEntity extends UnnamedStreamPipesEntity {
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 4877162..c529cff 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
@@ -19,39 +19,18 @@
package org.apache.streampipes.model.dashboard;
import org.apache.streampipes.model.shared.annotation.TsModel;
-import org.apache.streampipes.vocabulary.StreamPipes;
-import io.fogsy.empire.annotations.RdfProperty;
-import io.fogsy.empire.annotations.RdfsClass;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.OneToOne;
-
-@RdfsClass(StreamPipes.DASHBOARD_WIDGET_MODEL)
-@Entity
@TsModel
public class DashboardWidgetModel extends DashboardEntity {
- @RdfProperty(StreamPipes.HAS_DASHBOARD_WIDGET_ID)
private String widgetId;
- @RdfProperty(StreamPipes.HAS_DASHBOARD_WIDGET_TYPE)
private String widgetType;
- @OneToOne(fetch = FetchType.EAGER,
- cascade = {CascadeType.PERSIST, CascadeType.MERGE})
- @RdfProperty(StreamPipes.HAS_DASHBOARD_WIDGET_SETTINGS)
private DashboardWidgetSettings dashboardWidgetSettings;
- @RdfProperty(StreamPipes.HAS_PIPELINE_ID)
- private String visualizablePipelineId;
-
- @RdfProperty(StreamPipes.HAS_TOPIC)
- private String visualizablePipelineTopic;
-
- private String visualizationName;
private String pipelineId;
+ private String visualizationName;
public DashboardWidgetModel() {
super();
@@ -73,20 +52,12 @@ public class DashboardWidgetModel extends DashboardEntity {
this.dashboardWidgetSettings = dashboardWidgetSettings;
}
- public String getVisualizablePipelineId() {
- return visualizablePipelineId;
- }
-
- public void setVisualizablePipelineId(String visualizablePipelineId) {
- this.visualizablePipelineId = visualizablePipelineId;
- }
-
- public String getVisualizablePipelineTopic() {
- return visualizablePipelineTopic;
+ public String getPipelineId() {
+ return pipelineId;
}
- public void setVisualizablePipelineTopic(String visualizablePipelineTopic) {
- this.visualizablePipelineTopic = visualizablePipelineTopic;
+ public void setPipelineId(String pipelineId) {
+ this.pipelineId = pipelineId;
}
public String getVisualizationName() {
@@ -96,12 +67,4 @@ public class DashboardWidgetModel extends DashboardEntity {
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-model/src/main/java/org/apache/streampipes/model/dashboard/VisualizablePipeline.java
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/VisualizablePipeline.java
index 9bb0aa8..edb4b61 100644
---
a/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/VisualizablePipeline.java
+++
b/streampipes-model/src/main/java/org/apache/streampipes/model/dashboard/VisualizablePipeline.java
@@ -20,32 +20,14 @@ package org.apache.streampipes.model.dashboard;
import org.apache.streampipes.model.schema.EventSchema;
import org.apache.streampipes.model.shared.annotation.TsModel;
-import org.apache.streampipes.vocabulary.StreamPipes;
-import io.fogsy.empire.annotations.RdfProperty;
-import io.fogsy.empire.annotations.RdfsClass;
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-import javax.persistence.OneToOne;
-
-@RdfsClass(StreamPipes.VISUALIZABLE_PIPELINE)
@TsModel
-public class VisualizablePipeline extends DashboardEntity {
+public class VisualizablePipeline {
- @RdfProperty(StreamPipes.HAS_PIPELINE_ID)
private String pipelineId;
-
- @OneToOne(fetch = FetchType.EAGER,
- cascade = {CascadeType.PERSIST, CascadeType.MERGE})
- @RdfProperty(StreamPipes.HAS_SCHEMA)
private EventSchema schema;
-
- @RdfProperty(StreamPipes.HAS_VISUALIZATION_NAME)
private String visualizationName;
-
- @RdfProperty(StreamPipes.HAS_TOPIC)
private String topic;
-
private String pipelineName;
public VisualizablePipeline() {
diff --git
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java
index a07e50c..98ccd81 100644
---
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java
+++
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/CouchDbInstallationStep.java
@@ -74,7 +74,6 @@ public class CouchDbInstallationStep implements
InstallationStep {
Utils.getCouchDbVisualizationClient();
Utils.getCouchDbRdfEndpointClient();
Utils.getCouchDbDashboardClient();
- Utils.getCouchDbVisualizablePipelineClient();
Utils.getCouchDbDashboardWidgetClient();
Utils.getCouchDbLabelClient();
Utils.getCouchDbCategoryClient();
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 a680841..d26881d 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
@@ -18,9 +18,11 @@
package org.apache.streampipes.rest.impl.dashboard;
+import org.apache.streampipes.model.graph.DataSinkInvocation;
+import org.apache.streampipes.model.pipeline.Pipeline;
+import org.apache.streampipes.model.staticproperty.FreeTextStaticProperty;
import org.apache.streampipes.rest.impl.AbstractRestResource;
import org.apache.streampipes.rest.shared.annotation.JacksonSerialized;
-import org.apache.streampipes.storage.api.IVisualizablePipelineStorage;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -28,50 +30,34 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
@Path("/v2/users/{username}/dashboard/pipelines")
public class VisualizablePipeline extends AbstractRestResource {
- @GET
- @JacksonSerialized
- @Produces(MediaType.APPLICATION_JSON)
- public Response getVisualizablePipelines() {
- return ok(getVisualizablePipelineStorage().getAllVisualizablePipelines());
- }
-
- @GET
- @JacksonSerialized
- @Produces(MediaType.APPLICATION_JSON)
- @Path("/{id}")
- public Response getVisualizablePipeline(@PathParam("id") String id) {
- org.apache.streampipes.model.dashboard.VisualizablePipeline pipeline =
getVisualizablePipelineStorage().getVisualizablePipeline(id);
- return pipeline != null ? ok(pipeline) : fail();
- }
+ private static final String DashboardAppId =
"org.apache.streampipes.sinks.internal.jvm.dashboard";
+ private static final String VisualizationFieldInternalName =
"visualization-name";
+ private static final String Slash = "/";
@GET
@JacksonSerialized
@Produces(MediaType.APPLICATION_JSON)
- @Path("topic/{topic}")
- 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();
+ public Response getVisualizablePipelines(@PathParam("username") String
email) {
+ return ok(extractVisualizablePipelines(email));
}
@GET
@JacksonSerialized
@Produces(MediaType.APPLICATION_JSON)
@Path("{pipelineId}/{visualizationName}")
- public Response
getVisualizablePipelineByPipelineIdAndVisualizationName(@PathParam("pipelineId")
String pipelineId,
+ public Response
getVisualizablePipelineByPipelineIdAndVisualizationName(@PathParam("username")
String email,
+
@PathParam("pipelineId") String pipelineId,
@PathParam("visualizationName") String visualizationName) {
List<org.apache.streampipes.model.dashboard.VisualizablePipeline>
pipelines =
- getVisualizablePipelineStorage().getAllVisualizablePipelines();
+ extractVisualizablePipelines(email);
Optional<org.apache.streampipes.model.dashboard.VisualizablePipeline>
matchedPipeline =
pipelines
@@ -82,9 +68,40 @@ public class VisualizablePipeline extends
AbstractRestResource {
return matchedPipeline.isPresent() ? ok(matchedPipeline.get()) : fail();
}
- private IVisualizablePipelineStorage getVisualizablePipelineStorage() {
- return getNoSqlStorage().getVisualizablePipelineStorage();
+ private List<org.apache.streampipes.model.dashboard.VisualizablePipeline>
extractVisualizablePipelines(String email) {
+ List<org.apache.streampipes.model.dashboard.VisualizablePipeline>
visualizablePipelines = new ArrayList<>();
+ getUserService()
+ .getOwnPipelines(email)
+ .forEach(pipeline -> {
+ List<DataSinkInvocation> dashboardSinks =
extractDashboardSinks(pipeline);
+ dashboardSinks.forEach(sink -> {
+ org.apache.streampipes.model.dashboard.VisualizablePipeline
visualizablePipeline = new
org.apache.streampipes.model.dashboard.VisualizablePipeline();
+ visualizablePipeline.setPipelineId(pipeline.getPipelineId());
+ visualizablePipeline.setPipelineName(pipeline.getName());
+
visualizablePipeline.setVisualizationName(extractVisualizationName(sink));
+
visualizablePipeline.setSchema(sink.getInputStreams().get(0).getEventSchema());
+
visualizablePipeline.setTopic(sink.getElementId().substring(sink.getElementId().lastIndexOf(Slash)
+ 1));
+
+ visualizablePipelines.add(visualizablePipeline);
+ });
+ });
+
+ return visualizablePipelines;
}
+ private String extractVisualizationName(DataSinkInvocation sink) {
+ return sink.getStaticProperties()
+ .stream()
+ .filter(sp ->
sp.getInternalName().equals(VisualizationFieldInternalName))
+ .map(sp -> (FreeTextStaticProperty) sp)
+ .findFirst().get().getValue();
+ }
+ private List<DataSinkInvocation> extractDashboardSinks(Pipeline pipeline) {
+ return pipeline
+ .getActions()
+ .stream()
+ .filter(sink -> sink.getAppId().equals(DashboardAppId))
+ .collect(Collectors.toList());
+ }
}
diff --git
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
index fe8cd3c..4f1c176 100644
---
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
+++
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java
@@ -57,8 +57,6 @@ public interface INoSqlStorage {
IDataExplorerWidgetStorage getDataExplorerWidgetStorage();
- IVisualizablePipelineStorage getVisualizablePipelineStorage();
-
IPipelineElementTemplateStorage getPipelineElementTemplateStorage();
}
diff --git
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IVisualizablePipelineStorage.java
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IVisualizablePipelineStorage.java
deleted file mode 100644
index 06f8e16..0000000
---
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IVisualizablePipelineStorage.java
+++ /dev/null
@@ -1,30 +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.
- *
- */
-
-package org.apache.streampipes.storage.api;
-
-import org.apache.streampipes.model.dashboard.VisualizablePipeline;
-
-import java.util.List;
-
-public interface IVisualizablePipelineStorage {
-
- List<VisualizablePipeline> getAllVisualizablePipelines();
-
- VisualizablePipeline getVisualizablePipeline(String id);
-}
diff --git
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
index f15dc5b..1bcd490 100644
---
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
+++
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java
@@ -116,11 +116,6 @@ public enum CouchDbStorageManager implements INoSqlStorage
{
}
@Override
- public IVisualizablePipelineStorage getVisualizablePipelineStorage() {
- return new VisualizablePipelineStorageImpl();
- }
-
- @Override
public IPipelineElementTemplateStorage getPipelineElementTemplateStorage() {
return new PipelineElementTemplateStorageImpl();
}
diff --git
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/VisualizablePipelineStorageImpl.java
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/VisualizablePipelineStorageImpl.java
deleted file mode 100644
index 6137dde..0000000
---
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/VisualizablePipelineStorageImpl.java
+++ /dev/null
@@ -1,43 +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.
- *
- */
-
-package org.apache.streampipes.storage.couchdb.impl;
-
-import org.apache.streampipes.model.dashboard.VisualizablePipeline;
-import org.apache.streampipes.storage.api.IVisualizablePipelineStorage;
-import org.apache.streampipes.storage.couchdb.dao.AbstractDao;
-import org.apache.streampipes.storage.couchdb.utils.Utils;
-
-import java.util.List;
-
-public class VisualizablePipelineStorageImpl extends
AbstractDao<VisualizablePipeline> implements IVisualizablePipelineStorage {
-
- public VisualizablePipelineStorageImpl() {
- super(Utils::getCouchDbVisualizablePipelineClient,
VisualizablePipeline.class);
- }
-
- @Override
- public List<VisualizablePipeline> getAllVisualizablePipelines() {
- return findAll();
- }
-
- @Override
- public VisualizablePipeline getVisualizablePipeline(String id) {
- return find(id).orElse(null);
- }
-}
diff --git
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
index 5895a2b..f81a084 100644
---
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
+++
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
@@ -78,10 +78,6 @@ public class Utils {
return dbClient;
}
- public static CouchDbClient getCouchDbVisualizablePipelineClient() {
- return getCouchDbGsonClient("visualizablepipeline");
- }
-
public static CouchDbClient getCouchDbDataExplorerDashboardClient() {
return getCouchDbGsonClient("dataexplorerdashboard");
}
diff --git a/ui/src/app/core-model/gen/streampipes-model.ts
b/ui/src/app/core-model/gen/streampipes-model.ts
index aa51aee..4a7a270 100644
--- a/ui/src/app/core-model/gen/streampipes-model.ts
+++ b/ui/src/app/core-model/gen/streampipes-model.ts
@@ -16,14 +16,13 @@
*
*/
-
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
-// Generated using typescript-generator version 2.27.744 on 2021-05-19
14:58:04.
+// Generated using typescript-generator version 2.27.744 on 2021-05-21
11:31:40.
export class AbstractStreamPipesEntity {
- "@class": "org.apache.streampipes.model.base.AbstractStreamPipesEntity" |
"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.AdapterStre [...]
+ "@class": "org.apache.streampipes.model.base.AbstractStreamPipesEntity" |
"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.AdapterStre [...]
elementId: string;
static fromData(data: AbstractStreamPipesEntity, target?:
AbstractStreamPipesEntity): AbstractStreamPipesEntity {
@@ -38,7 +37,7 @@ export class AbstractStreamPipesEntity {
}
export class UnnamedStreamPipesEntity extends AbstractStreamPipesEntity {
- "@class": "org.apache.streampipes.model.base.UnnamedStreamPipesEntity" |
"org.apache.streampipes.model.connect.guess.GuessSchema" |
"org.apache.streampipes.model.connect.rules.TransformationRuleDescription" |
"org.apache.streampipes.model.connect.rules.value.ValueTransformationRuleDescription"
|
"org.apache.streampipes.model.connect.rules.value.AddTimestampRuleDescription"
|
"org.apache.streampipes.model.connect.rules.value.AddValueTransformationRuleDescription"
| "org.apache.streamp [...]
+ "@class": "org.apache.streampipes.model.base.UnnamedStreamPipesEntity" |
"org.apache.streampipes.model.connect.guess.GuessSchema" |
"org.apache.streampipes.model.connect.rules.TransformationRuleDescription" |
"org.apache.streampipes.model.connect.rules.value.ValueTransformationRuleDescription"
|
"org.apache.streampipes.model.connect.rules.value.AddTimestampRuleDescription"
|
"org.apache.streampipes.model.connect.rules.value.AddValueTransformationRuleDescription"
| "org.apache.streamp [...]
static fromData(data: UnnamedStreamPipesEntity, target?:
UnnamedStreamPipesEntity): UnnamedStreamPipesEntity {
if (!data) {
@@ -152,8 +151,8 @@ export class NamedStreamPipesEntity extends
AbstractStreamPipesEntity {
instance.applicationLinks =
__getCopyArrayFn(ApplicationLink.fromData)(data.applicationLinks);
instance.internallyManaged = data.internallyManaged;
instance.connectedTo =
__getCopyArrayFn(__identity<string>())(data.connectedTo);
- instance.uri = data.uri;
instance.dom = data.dom;
+ instance.uri = data.uri;
return instance;
}
}
@@ -190,8 +189,8 @@ export class AdapterDescription extends
NamedStreamPipesEntity {
instance.rules =
__getCopyArrayFn(TransformationRuleDescription.fromDataUnion)(data.rules);
instance.category =
__getCopyArrayFn(__identity<string>())(data.category);
instance.createdAt = data.createdAt;
- instance.valueRules =
__getCopyArrayFn(__identity<any>())(data.valueRules);
instance.streamRules =
__getCopyArrayFn(__identity<any>())(data.streamRules);
+ instance.valueRules =
__getCopyArrayFn(__identity<any>())(data.valueRules);
instance.schemaRules =
__getCopyArrayFn(__identity<any>())(data.schemaRules);
instance.couchDBId = data.couchDBId;
instance._rev = data._rev;
@@ -792,7 +791,7 @@ export class CustomTransformOutputStrategy extends
OutputStrategy {
}
export class DashboardEntity extends UnnamedStreamPipesEntity {
- "@class": "org.apache.streampipes.model.dashboard.DashboardEntity" |
"org.apache.streampipes.model.dashboard.DashboardWidgetModel" |
"org.apache.streampipes.model.dashboard.VisualizablePipeline" |
"org.apache.streampipes.model.datalake.DataExplorerWidgetModel";
+ "@class": "org.apache.streampipes.model.dashboard.DashboardEntity" |
"org.apache.streampipes.model.dashboard.DashboardWidgetModel" |
"org.apache.streampipes.model.datalake.DataExplorerWidgetModel";
_id: string;
_rev: string;
@@ -814,8 +813,6 @@ export class DashboardEntity extends
UnnamedStreamPipesEntity {
switch (data["@class"]) {
case "org.apache.streampipes.model.dashboard.DashboardWidgetModel":
return DashboardWidgetModel.fromData(data);
- case "org.apache.streampipes.model.dashboard.VisualizablePipeline":
- return VisualizablePipeline.fromData(data);
case
"org.apache.streampipes.model.datalake.DataExplorerWidgetModel":
return DataExplorerWidgetModel.fromData(data);
}
@@ -880,8 +877,6 @@ export class DashboardWidgetModel extends DashboardEntity {
"@class": "org.apache.streampipes.model.dashboard.DashboardWidgetModel";
dashboardWidgetSettings: DashboardWidgetSettings;
pipelineId: string;
- visualizablePipelineId: string;
- visualizablePipelineTopic: string;
visualizationName: string;
widgetId: string;
@@ -893,10 +888,8 @@ export class DashboardWidgetModel extends DashboardEntity {
super.fromData(data, instance);
instance.widgetId = data.widgetId;
instance.dashboardWidgetSettings =
DashboardWidgetSettings.fromData(data.dashboardWidgetSettings);
- instance.visualizablePipelineId = data.visualizablePipelineId;
- instance.visualizablePipelineTopic = data.visualizablePipelineTopic;
- instance.visualizationName = data.visualizationName;
instance.pipelineId = data.pipelineId;
+ instance.visualizationName = data.visualizationName;
return instance;
}
}
@@ -1639,9 +1632,9 @@ export class GenericAdapterSetDescription extends
AdapterSetDescription implemen
}
const instance = target || new GenericAdapterSetDescription();
super.fromData(data, instance);
+ instance.eventSchema = EventSchema.fromData(data.eventSchema);
instance.formatDescription =
FormatDescription.fromData(data.formatDescription);
instance.protocolDescription =
ProtocolDescription.fromData(data.protocolDescription);
- instance.eventSchema = EventSchema.fromData(data.eventSchema);
return instance;
}
}
@@ -1658,9 +1651,9 @@ export class GenericAdapterStreamDescription extends
AdapterStreamDescription im
}
const instance = target || new GenericAdapterStreamDescription();
super.fromData(data, instance);
+ instance.eventSchema = EventSchema.fromData(data.eventSchema);
instance.formatDescription =
FormatDescription.fromData(data.formatDescription);
instance.protocolDescription =
ProtocolDescription.fromData(data.protocolDescription);
- instance.eventSchema = EventSchema.fromData(data.eventSchema);
return instance;
}
}
@@ -2899,8 +2892,7 @@ export class UserDefinedOutputStrategy extends
OutputStrategy {
}
}
-export class VisualizablePipeline extends DashboardEntity {
- "@class": "org.apache.streampipes.model.dashboard.VisualizablePipeline";
+export class VisualizablePipeline {
pipelineId: string;
pipelineName: string;
schema: EventSchema;
@@ -2912,7 +2904,6 @@ export class VisualizablePipeline extends DashboardEntity
{
return data;
}
const instance = target || new VisualizablePipeline();
- super.fromData(data, instance);
instance.pipelineId = data.pipelineId;
instance.schema = EventSchema.fromData(data.schema);
instance.visualizationName = data.visualizationName;
@@ -2966,7 +2957,7 @@ export type AdapterSetDescriptionUnion =
GenericAdapterSetDescription | Specific
export type AdapterStreamDescriptionUnion = SpecificAdapterStreamDescription;
-export type DashboardEntityUnion = DashboardWidgetModel | VisualizablePipeline
| DataExplorerWidgetModel;
+export type DashboardEntityUnion = DashboardWidgetModel |
DataExplorerWidgetModel;
export type EventPropertyQualityDefinitionUnion = Accuracy | MeasurementRange
| Precision | Resolution;
diff --git
a/ui/src/app/dashboard/components/widget/dashboard-widget.component.css
b/ui/src/app/dashboard/components/widget/dashboard-widget.component.css
index 4e5f73c..1e55025 100644
--- a/ui/src/app/dashboard/components/widget/dashboard-widget.component.css
+++ b/ui/src/app/dashboard/components/widget/dashboard-widget.component.css
@@ -52,7 +52,8 @@
}
.pipeline-not-running {
- background: #ef9a9a;
+ background: #e2e2e2;
+ border: 1px solid #f44336;
padding: 20px;
display:flex;
align-items: center;
diff --git
a/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
b/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
index 545498e..4227fa2 100644
--- a/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
+++ b/ui/src/app/dashboard/components/widget/dashboard-widget.component.html
@@ -30,13 +30,19 @@
</div>
<div class="h-100 p-0 row content">
<!-- <div *ngIf="widget."></div>-->
- <div *ngIf="widgetLoaded && pipelineNotRunning" class="h-100
pipeline-not-running" fxFlex="100"
+ <div *ngIf="widgetLoaded && widgetNotAvailable" class="h-100
pipeline-not-running" fxFlex="100"
fxLayout="column"
fxLayoutAlign="center center">
<i class="material-icons disconnect-icon">block</i>
- <h5 style="text-align:center;">corresponding pipeline is not
running</h5>
+ <h5 style="text-align:center;">Widget not found, did you
modify the pipeline?</h5>
</div>
- <div *ngIf="widgetLoaded && !pipelineNotRunning" class="h-100">
+ <div *ngIf="widgetLoaded && !widgetNotAvailable &&
!pipelineRunning" class="h-100 pipeline-not-running" fxFlex="100"
+ fxLayout="column"
+ fxLayoutAlign="center center">
+ <i class="material-icons disconnect-icon">link_off</i>
+ <h5 style="text-align:center;">Underlying pipeline
{{pipeline.name}} is not running, did you start the pipeline?</h5>
+ </div>
+ <div *ngIf="widgetLoaded && pipelineRunning" class="h-100">
<div *ngIf="widget.widgetType === 'number'" class="h-100 p-0">
<number-widget
[gridsterItemComponent]="gridsterItemComponent" [gridsterItem]="item"
[widget]="widget" [editMode]="editMode"
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 0982a71..39a6122 100644
--- a/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
+++ b/ui/src/app/dashboard/components/widget/dashboard-widget.component.ts
@@ -22,7 +22,7 @@ import {DashboardService} from
"../../services/dashboard.service";
import {GridsterItem, GridsterItemComponent} from "angular-gridster2";
import {AddVisualizationDialogComponent} from
"../../dialogs/add-widget/add-visualization-dialog.component";
import {
- DashboardWidgetModel,
+ DashboardWidgetModel, Pipeline,
VisualizablePipeline
} from "../../../core-model/gen/streampipes-model";
import {PanelType} from
"../../../core-ui/dialog/base-dialog/base-dialog.model";
@@ -47,8 +47,10 @@ export class DashboardWidgetComponent implements OnInit {
widgetLoaded: boolean = false;
configuredWidget: DashboardWidgetModel;
widgetDataConfig: VisualizablePipeline;
+ pipeline: Pipeline;
- pipelineNotRunning: boolean = false;
+ pipelineRunning: boolean = false;
+ widgetNotAvailable: boolean = false;
constructor(private dashboardService: DashboardService,
private dialogService: DialogService) {
@@ -58,13 +60,17 @@ export class DashboardWidgetComponent implements OnInit {
this.dashboardService.getWidget(this.widget.id).subscribe(response => {
this.configuredWidget = response;
this.dashboardService.getVisualizablePipelineByPipelineIdAndVisualizationName(this.configuredWidget.pipelineId,
- this.configuredWidget.visualizationName).subscribe(pipeline =>
{
- this.widgetDataConfig = pipeline;
- this.pipelineNotRunning = false;
- this.widgetLoaded = true;
+ this.configuredWidget.visualizationName).subscribe(vizPipeline
=> {
+ this.widgetDataConfig = vizPipeline;
+
this.dashboardService.getPipelineById(vizPipeline.pipelineId).subscribe(pipeline
=> {
+ this.pipeline = pipeline;
+ this.pipelineRunning = pipeline.running;
+ this.widgetNotAvailable = false;
+ this.widgetLoaded = true;
+ });
}, err => {
this.widgetLoaded = true;
- this.pipelineNotRunning = true;
+ this.widgetNotAvailable = 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 11b1cb4..69c63b3 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
@@ -191,8 +191,6 @@ export class AddVisualizationDialogComponent implements
OnInit, AfterViewInit {
configuredWidget["@class"] =
"org.apache.streampipes.model.dashboard.DashboardWidgetModel";
configuredWidget.dashboardWidgetSettings = this.selectedWidget;
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) {
diff --git a/ui/src/app/dashboard/services/dashboard.service.ts
b/ui/src/app/dashboard/services/dashboard.service.ts
index 32681a5..8297bc8 100644
--- a/ui/src/app/dashboard/services/dashboard.service.ts
+++ b/ui/src/app/dashboard/services/dashboard.service.ts
@@ -37,7 +37,6 @@ export class DashboardService {
private authStatusService: AuthStatusService) {
}
-
getPipelineById(id: string): Observable<Pipeline> {
return this.http.get(this.pipelinesUrl + "/" +id).pipe(map(data => {
return Pipeline.fromData(data as any);
@@ -52,22 +51,6 @@ export class DashboardService {
}));
}
- getVisualizablePipelineById(id: string): Observable<VisualizablePipeline> {
- return this.http
- .get(this.visualizablePipelineUrl + "/" + id)
- .pipe(map(data => {
- return VisualizablePipeline.fromData(data as
VisualizablePipeline);
- }));
- }
-
- getVisualizablePipelineByTopic(topic: string):
Observable<VisualizablePipeline> {
- return this.http
- .get(this.visualizablePipelineUrl + "/topic/" + topic)
- .pipe(map(data => {
- return VisualizablePipeline.fromData(data as
VisualizablePipeline);
- }));
- }
-
getVisualizablePipelineByPipelineIdAndVisualizationName(pipelineId:
string, visualizationName: string): Observable<VisualizablePipeline> {
return this.http
.get(this.visualizablePipelineUrl + "/" + pipelineId + "/" +
visualizationName)
@@ -151,4 +134,4 @@ export class DashboardService {
updateWidget(widget: DashboardWidgetModel): Observable<any> {
return this.http.put(this.dashboardWidgetUrl + "/" +widget._id,
widget);
}
-}
\ No newline at end of file
+}