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
+}

Reply via email to