You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2020/09/17 21:25:20 UTC

[incubator-streampipes] branch rel/0.67.0 updated (28654c5 -> daabe8c)

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

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


    from 28654c5  [STREAMPIPES-242] Mqtt adapter next button can not be clicked
     new 8daee40  [hotfix] Fix bug that caused pipeline element recommender to crash
     new b4c1d42  [hotfix] Improve loading of remote static properties
     new daabe8c  Merge branch 'rel/0.67.0' of github.com:apache/incubator-streampipes into rel/0.67.0

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../manager/matching/ConnectionValidator.java      |  4 +-
 .../manager/matching/InvocationGraphBuilder.java   |  3 +-
 .../matching/PipelineVerificationHandler.java      | 18 +++--
 .../manager/recommender/ElementRecommender.java    | 20 +++--
 .../confirm-dialog/confirm-dialog.component.html   |  2 +-
 .../confirm-dialog/confirm-dialog.component.ts     |  4 +
 .../static-mapping-unary.component.ts              |  4 +-
 .../pipeline-element-options.component.html        | 91 +++++++++++-----------
 .../pipeline-element-options.component.ts          | 21 +++--
 .../pipeline-element-recommendation.component.html |  4 +-
 .../pipeline-element-recommendation.component.ts   | 35 ++++-----
 .../components/pipeline/pipeline.component.ts      |  3 +-
 12 files changed, 114 insertions(+), 95 deletions(-)


[incubator-streampipes] 01/03: [hotfix] Fix bug that caused pipeline element recommender to crash

Posted by ri...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8daee400d31ad7bb61f22f3a400e4739bbb1de55
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Thu Sep 17 23:20:52 2020 +0200

    [hotfix] Fix bug that caused pipeline element recommender to crash
---
 .../manager/matching/ConnectionValidator.java      |  4 +-
 .../manager/matching/InvocationGraphBuilder.java   |  3 +-
 .../matching/PipelineVerificationHandler.java      | 18 +++--
 .../manager/recommender/ElementRecommender.java    | 20 +++--
 .../pipeline-element-options.component.html        | 91 +++++++++++-----------
 .../pipeline-element-options.component.ts          | 21 +++--
 .../pipeline-element-recommendation.component.html |  4 +-
 .../pipeline-element-recommendation.component.ts   | 35 ++++-----
 .../components/pipeline/pipeline.component.ts      |  3 +-
 9 files changed, 106 insertions(+), 93 deletions(-)

diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/ConnectionValidator.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/ConnectionValidator.java
index a52126a..4e383c5 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/ConnectionValidator.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/ConnectionValidator.java
@@ -44,7 +44,7 @@ public class ConnectionValidator {
     this.verifier = new ElementVerification();
   }
 
-  public void validateConnection() throws InvalidConnectionException {
+  public List<InvocableStreamPipesEntity> validateConnection() throws InvalidConnectionException {
     boolean verified = true;
     InvocableStreamPipesEntity rightElement = rootPipelineElement;
     List<String> connectedTo = rootPipelineElement.getConnectedTo();
@@ -66,6 +66,8 @@ public class ConnectionValidator {
     if (!verified) {
       throw new InvalidConnectionException(verifier.getErrorLog());
     }
+
+    return invocationGraphs;
   }
 
   private DataProcessorInvocation findInvocationGraph(List<InvocableStreamPipesEntity> graphs, String domId) {
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/InvocationGraphBuilder.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/InvocationGraphBuilder.java
index fc2547e..7a2ffc8 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/InvocationGraphBuilder.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/InvocationGraphBuilder.java
@@ -72,7 +72,7 @@ public class InvocationGraphBuilder {
             .getEventGrounding();
 
     if (source instanceof InvocableStreamPipesEntity) {
-      if (source instanceof DataProcessorInvocation) {
+      if (source instanceof DataProcessorInvocation && ((DataProcessorInvocation) source).isConfigured()) {
 
         DataProcessorInvocation dataProcessorInvocation = (DataProcessorInvocation) source;
         Tuple2<EventSchema, ? extends OutputStrategy> outputSettings;
@@ -190,4 +190,5 @@ public class InvocationGraphBuilder {
             .findFirst()
             .get();
   }
+
 }
\ No newline at end of file
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/PipelineVerificationHandler.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/PipelineVerificationHandler.java
index bbdc6bd..ff80bdb 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/PipelineVerificationHandler.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/matching/PipelineVerificationHandler.java
@@ -44,7 +44,7 @@ public class PipelineVerificationHandler {
 
   private final Pipeline pipeline;
   private final PipelineModificationMessage pipelineModificationMessage;
-  private final List<InvocableStreamPipesEntity> invocationGraphs;
+  private List<InvocableStreamPipesEntity> invocationGraphs;
   private final InvocableStreamPipesEntity rootPipelineElement;
 
   public PipelineVerificationHandler(Pipeline pipeline) throws NoSepaInPipelineException {
@@ -61,7 +61,8 @@ public class PipelineVerificationHandler {
    * @throws InvalidConnectionException if the connection is not considered valid
    */
   public PipelineVerificationHandler validateConnection() throws InvalidConnectionException {
-    new ConnectionValidator(pipeline, invocationGraphs, rootPipelineElement).validateConnection();
+    invocationGraphs = new ConnectionValidator(pipeline, invocationGraphs, rootPipelineElement)
+            .validateConnection();
     return this;
   }
 
@@ -182,13 +183,13 @@ public class PipelineVerificationHandler {
     return pipelineModificationMessage;
   }
 
+  public List<InvocableStreamPipesEntity> getInvocationGraphs() {
+    return this.invocationGraphs;
+  }
+
   public List<InvocableStreamPipesEntity> makeInvocationGraphs() {
-    if (onlyStreamAncestorsPresentInPipeline()) {
-      return new ArrayList<>();
-    } else {
-      PipelineGraph pipelineGraph = new PipelineGraphBuilder(pipeline).buildGraph();
-      return new InvocationGraphBuilder(pipelineGraph, null).buildGraphs();
-    }
+    PipelineGraph pipelineGraph = new PipelineGraphBuilder(pipeline).buildGraph();
+    return new InvocationGraphBuilder(pipelineGraph, null).buildGraphs();
   }
 
   private boolean onlyStreamAncestorsPresentInPipeline() {
@@ -198,4 +199,5 @@ public class PipelineVerificationHandler {
             .map(connectedTo -> TreeUtils.findSEPAElement(connectedTo, pipeline.getSepas(), pipeline.getStreams()))
             .allMatch(pe -> pe instanceof SpDataStream);
   }
+
 }
\ No newline at end of file
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/recommender/ElementRecommender.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/recommender/ElementRecommender.java
index d409d77..60f2b34 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/recommender/ElementRecommender.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/recommender/ElementRecommender.java
@@ -20,7 +20,9 @@ package org.apache.streampipes.manager.recommender;
 
 import org.apache.streampipes.commons.exceptions.NoSepaInPipelineException;
 import org.apache.streampipes.commons.exceptions.NoSuitableSepasAvailableException;
-import org.apache.streampipes.manager.matching.PipelineVerificationHandler;
+import org.apache.streampipes.manager.data.PipelineGraph;
+import org.apache.streampipes.manager.data.PipelineGraphBuilder;
+import org.apache.streampipes.manager.matching.InvocationGraphBuilder;
 import org.apache.streampipes.manager.matching.v2.StreamMatch;
 import org.apache.streampipes.manager.storage.UserManagementService;
 import org.apache.streampipes.manager.util.PipelineVerificationUtils;
@@ -30,17 +32,19 @@ import org.apache.streampipes.model.base.InvocableStreamPipesEntity;
 import org.apache.streampipes.model.base.NamedStreamPipesEntity;
 import org.apache.streampipes.model.client.exception.InvalidConnectionException;
 import org.apache.streampipes.model.client.matching.MatchingResultMessage;
-import org.apache.streampipes.model.pipeline.Pipeline;
-import org.apache.streampipes.model.pipeline.PipelineElementRecommendation;
-import org.apache.streampipes.model.pipeline.PipelineElementRecommendationMessage;
 import org.apache.streampipes.model.graph.DataProcessorDescription;
 import org.apache.streampipes.model.graph.DataProcessorInvocation;
 import org.apache.streampipes.model.graph.DataSinkDescription;
 import org.apache.streampipes.model.graph.DataSinkInvocation;
+import org.apache.streampipes.model.pipeline.Pipeline;
+import org.apache.streampipes.model.pipeline.PipelineElementRecommendation;
+import org.apache.streampipes.model.pipeline.PipelineElementRecommendationMessage;
 import org.apache.streampipes.storage.api.INoSqlStorage;
 import org.apache.streampipes.storage.api.IPipelineElementDescriptionStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 import org.apache.streampipes.storage.management.StorageManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -49,6 +53,8 @@ import java.util.stream.Collectors;
 
 public class ElementRecommender {
 
+  private static final Logger LOG = LoggerFactory.getLogger(ElementRecommender.class);
+
   private Pipeline pipeline;
   private String email;
   private PipelineElementRecommendationMessage recommendationMessage;
@@ -205,9 +211,9 @@ public class ElementRecommender {
     } else if (rootNode instanceof DataSinkInvocation) {
       return Optional.empty();
     } else {
-      List<InvocableStreamPipesEntity> graphs = new PipelineVerificationHandler(pipeline)
-              .validateConnection()
-              .makeInvocationGraphs();
+      ((DataProcessorInvocation) rootNode).setConfigured(true);
+      PipelineGraph pipelineGraph = new PipelineGraphBuilder(pipeline).buildGraph();
+      List<InvocableStreamPipesEntity> graphs = new InvocationGraphBuilder(pipelineGraph, null).buildGraphs();
 
       Optional<InvocableStreamPipesEntity> rootElementWithOutputStream = graphs
               .stream()
diff --git a/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.html b/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.html
index b345465..976a382 100644
--- a/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.html
+++ b/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.html
@@ -15,55 +15,56 @@
   ~ limitations under the License.
   ~
   -->
-
-<div *ngIf="currentMouseOverElement==pipelineElement.payload.dom" class="sp-fade-options">
-    <span class="options-button customize-button" *ngIf="pipelineElement.type!='stream'" style="z-index:10">
-        <button mat-button mat-icon-button matTooltip="Configure Element"
-                [matTooltipPosition]="'above'"
-                (click)="customizeElement(pipelineElement)">
-            <i class="material-icons">settings</i>
+<div>
+    <div [ngStyle]="currentMouseOverElement==pipelineElement.payload.dom ? {opacity: 1} : {opacity: 0}" class="sp-fade-options">
+        <span class="options-button customize-button" *ngIf="pipelineElement.type!='stream'" style="z-index:10">
+            <button mat-button mat-icon-button matTooltip="Configure Element"
+                    [matTooltipPosition]="'above'"
+                    (click)="customizeElement(pipelineElement)">
+                <i class="material-icons">settings</i>
+                </button>
+        </span>
+        <span class="options-button customize-button"
+              *ngIf="pipelineElement.type=='stream' && isWildcardTopic()"
+              style="z-index:10">
+            <button mat-button mat-icon-button matTooltip="Configure Element" [matTooltipPosition]="'above'"
+                    (click)="openCustomizeStreamDialog()" [disabled]="!isRootElement()">
+                <i class="material-icons">settings</i>
             </button>
-    </span>
-    <span class="options-button customize-button"
-          *ngIf="pipelineElement.type=='stream' && isWildcardTopic()"
-          style="z-index:10">
-        <button mat-button mat-icon-button matTooltip="Configure Element" [matTooltipPosition]="'above'"
-                (click)="openCustomizeStreamDialog()" [disabled]="!isRootElement()">
-            <i class="material-icons">settings</i>
-        </button>
-    </span>
-    <span class="options-button delete-button" style="z-index:10">
-        <button mat-button mat-icon-button matTooltip="Delete Element" [matTooltipPosition]="'above'"
-                (click)="removeElement(pipelineElement)" [disabled]="!isRootElement()">
-            <i class="material-icons">clear</i>
-        </button>
-    </span>
-    <span class="options-button possible-button" *ngIf="pipelineElement.type!='action'" style="z-index:10">
-        <button mat-button mat-icon-button matTooltip="Compatible Elements" [matTooltipPosition]="'below'"
-                [disabled]="!possibleElements || possibleElements.length == 0 || !isConfigured()"
-                (click)="openPossibleElementsDialog()">
-            <i class="material-icons">visibility</i>
-    </button>
-    </span>
-    <span class="options-button recommended-button"
-          *ngIf="pipelineElement.type!='action' && (recommendationsAvailable) && recommendedElements.length > 0"
-          style="z-index:10">
-        <button mat-button mat-icon-button matTooltip="Recommended Elements" [matTooltipPosition]="'below'"
-                (click)="showRecommendations($event)"
-                [disabled]="!recommendationsAvailable || !isConfigured()">
-            <i class="material-icons">add</i>
+        </span>
+        <span class="options-button delete-button" style="z-index:10">
+            <button mat-button mat-icon-button matTooltip="Delete Element" [matTooltipPosition]="'above'"
+                    (click)="removeElement(pipelineElement)" [disabled]="!isRootElement()">
+                <i class="material-icons">clear</i>
+            </button>
+        </span>
+        <span class="options-button possible-button" *ngIf="pipelineElement.type!='action'" style="z-index:10">
+            <button mat-button mat-icon-button matTooltip="Compatible Elements" [matTooltipPosition]="'below'"
+                    [disabled]="!possibleElements || possibleElements.length == 0 || !isConfigured()"
+                    (click)="openPossibleElementsDialog()">
+                <i class="material-icons">visibility</i>
         </button>
-    </span>
-    <span class="options-button help-button" style="z-index:10">
-        <button matTooltip="Help" [matTooltipPosition]="'below'"
-                mat-button mat-icon-button (click)="openHelpDialog()">?
+        </span>
+        <span class="options-button recommended-button"
+              *ngIf="pipelineElement.type!='action' && (recommendationsAvailable) && recommendedElements.length > 0"
+              style="z-index:10">
+            <button mat-button mat-icon-button matTooltip="Recommended Elements" [matTooltipPosition]="'below'"
+                    (click)="showRecommendations($event)"
+                    [disabled]="!recommendationsAvailable || !isConfigured()">
+                <i class="material-icons">add</i>
             </button>
-    </span>
-    <div class="editor-pe-info" [ngClass]="'pe-info-' + pipelineElementCssType">
-        {{pipelineElement.payload.name}}
+        </span>
+        <span class="options-button help-button" style="z-index:10">
+            <button matTooltip="Help" [matTooltipPosition]="'below'"
+                    mat-button mat-icon-button (click)="openHelpDialog()">?
+                </button>
+        </span>
+        <div class="editor-pe-info" [ngClass]="'pe-info-' + pipelineElementCssType">
+            {{pipelineElement.payload.name}}
+        </div>
     </div>
-</div>
-<pipeline-element-recommendation [rawPipelineModel]="rawPipelineModel"
+    <pipeline-element-recommendation [rawPipelineModel]="rawPipelineModel"
                                  [pipelineElementDomId]="pipelineElement.payload.dom"
                                  [recommendedElements]="recommendedElements"
                                  [recommendationsShown]="recommendationsShown" *ngIf="recommendationsAvailable"></pipeline-element-recommendation>
+</div>
\ No newline at end of file
diff --git a/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.ts b/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.ts
index 6a84660..6d20d18 100644
--- a/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.ts
+++ b/ui/src/app/editor/components/pipeline-element-options/pipeline-element-options.component.ts
@@ -20,7 +20,7 @@ import {JsplumbBridge} from "../../services/jsplumb-bridge.service";
 import {JsplumbService} from "../../services/jsplumb.service";
 import {PipelineValidationService} from "../../services/pipeline-validation.service";
 import {RestApi} from "../../../services/rest-api.service";
-import {Component, EventEmitter, Input, OnInit, Output} from "@angular/core";
+import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from "@angular/core";
 import {PipelineElementRecommendationService} from "../../services/pipeline-element-recommendation.service";
 import {ObjectProvider} from "../../services/object-provider.service";
 import {
@@ -35,18 +35,19 @@ import {DialogService} from "../../../core-ui/dialog/base-dialog/base-dialog.ser
 import {CompatibleElementsComponent} from "../../dialog/compatible-elements/compatible-elements.component";
 import {Tuple2} from "../../../core-model/base/Tuple2";
 import { cloneDeep } from "lodash";
+import {Observable, Subscription} from "rxjs";
 
 @Component({
   selector: 'pipeline-element-options',
   templateUrl: './pipeline-element-options.component.html',
   styleUrls: ['./pipeline-element-options.component.css']
 })
-export class PipelineElementOptionsComponent implements OnInit{
+export class PipelineElementOptionsComponent implements OnInit, OnDestroy {
 
-  recommendationsAvailable: any;
+  recommendationsAvailable: any = false;
   possibleElements: PipelineElementUnion[];
   recommendedElements: PipelineElementUnion[];
-  recommendationsShown: any;
+  recommendationsShown: any = false;
   pipelineElementCssType: string;
 
   @Input()
@@ -76,6 +77,8 @@ export class PipelineElementOptionsComponent implements OnInit{
   @Output()
   customize: EventEmitter<Tuple2<Boolean, PipelineElementConfig>> = new EventEmitter<Tuple2<Boolean, PipelineElementConfig>>();
 
+  pipelineElementConfiguredObservable: Subscription;
+
   constructor(private ObjectProvider: ObjectProvider,
               private PipelineElementRecommendationService: PipelineElementRecommendationService,
               private DialogService: DialogService,
@@ -91,7 +94,7 @@ export class PipelineElementOptionsComponent implements OnInit{
   }
 
   ngOnInit() {
-    this.EditorService.pipelineElementConfigured$.subscribe(pipelineElementDomId => {
+    this.pipelineElementConfiguredObservable = this.EditorService.pipelineElementConfigured$.subscribe(pipelineElementDomId => {
       this.pipelineElement.settings.openCustomize = false;
       this.RestApi.updateCachedPipeline(this.rawPipelineModel);
       if (pipelineElementDomId === this.pipelineElement.payload.dom) {
@@ -134,8 +137,8 @@ export class PipelineElementOptionsComponent implements OnInit{
     var currentPipeline = this.ObjectProvider.makePipeline(clonedModel);
     this.EditorService.recommendPipelineElement(currentPipeline).subscribe((result) => {
       if (result.success) {
-        this.possibleElements = this.PipelineElementRecommendationService.collectPossibleElements(this.allElements, result.possibleElements);
-        this.recommendedElements = this.PipelineElementRecommendationService.populateRecommendedList(this.allElements, result.recommendedElements);
+        this.possibleElements = cloneDeep(this.PipelineElementRecommendationService.collectPossibleElements(this.allElements, result.possibleElements));
+        this.recommendedElements = cloneDeep(this.PipelineElementRecommendationService.populateRecommendedList(this.allElements, result.recommendedElements));
         this.recommendationsAvailable = true;
       }
     });
@@ -180,4 +183,8 @@ export class PipelineElementOptionsComponent implements OnInit{
         .transportProtocols[0]
         .topicDefinition instanceof WildcardTopicDefinition;
   }
+
+  ngOnDestroy(): void {
+    this.pipelineElementConfiguredObservable.unsubscribe();
+  }
 }
\ No newline at end of file
diff --git a/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.html b/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.html
index fe13f3c..09748fc 100644
--- a/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.html
+++ b/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.html
@@ -22,8 +22,8 @@
             [style]="recommendedElement.layoutSettings.skewStyle">
             <a [style]="recommendedElement.layoutSettings.unskewStyle" [ngClass]="recommendedElement.layoutSettings.type" (click)="create(recommendedElement)" *ngIf="recommendedElement.name">
             </a>
-            <div (click)="create(recommendedElement)" [style]="recommendedElement.layoutSettings.unskewStyleLabel | safeCss"
-                 class="{{recommendedElement.layoutSettings.type}}">
+            <div (click)="create(recommendedElement)" [style]="recommendedElement.layoutSettings.unskewStyleLabel"
+                 [ngClass]="recommendedElement.layoutSettings.type">
                 <pipeline-element [iconSize]="'small'" [pipelineElement]="recommendedElement" *ngIf="recommendedElement.name">
                 </pipeline-element>
             </div>
diff --git a/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.ts b/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.ts
index 2d6cf8a..61ca035 100644
--- a/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.ts
+++ b/ui/src/app/editor/components/pipeline-element-recommendation/pipeline-element-recommendation.component.ts
@@ -17,7 +17,7 @@
  */
 
 import {JsplumbService} from "../../services/jsplumb.service";
-import {Component, Input, OnInit} from "@angular/core";
+import {AfterViewInit, ChangeDetectorRef, Component, Input, OnInit} from "@angular/core";
 import {PipelineElementConfig} from "../../model/editor.model";
 import {DataProcessorInvocation} from "../../../core-model/gen/streampipes-model";
 import {SafeCss} from "../../utils/style-sanitizer";
@@ -27,7 +27,7 @@ import {SafeCss} from "../../utils/style-sanitizer";
   templateUrl: './pipeline-element-recommendation.component.html',
   styleUrls: ['./pipeline-element-recommendation.component.scss']
 })
-export class PipelineElementRecommendationComponent implements OnInit {
+export class PipelineElementRecommendationComponent implements OnInit, AfterViewInit {
 
   @Input()
   recommendationsShown: boolean;
@@ -38,7 +38,8 @@ export class PipelineElementRecommendationComponent implements OnInit {
   @Input()
   pipelineElementDomId: string;
 
-  _recommendedElements: any;
+  @Input()
+  recommendedElements: any;
 
   recommendationsPrepared: boolean = false;
 
@@ -48,11 +49,16 @@ export class PipelineElementRecommendationComponent implements OnInit {
   }
 
   ngOnInit() {
+    this.fillRemainingItems();
+    this.prepareStyles(this.recommendedElements);
+    this.recommendationsPrepared = true;
+  }
+
+  ngAfterViewInit(): void {
 
   }
 
   prepareStyles(recommendedElements) {
-    this.fillRemainingItems(recommendedElements);
     recommendedElements.forEach((element, index) => {
       this.setLayoutSettings(element, index, recommendedElements);
     });
@@ -130,25 +136,12 @@ export class PipelineElementRecommendationComponent implements OnInit {
     return (360 / recommendedElements.length);
   }
 
-  fillRemainingItems(recommendedElements) {
-    if (recommendedElements.length < 6) {
-      for (var i = recommendedElements.length; i < 6; i++) {
+  fillRemainingItems() {
+    if (this.recommendedElements.length < 6) {
+      for (var i = this.recommendedElements.length; i < 6; i++) {
         let element = {fakeElement: true, weight: 0};
-        //this.setLayoutSettings(element, i);
-        recommendedElements.push(element);
+        this.recommendedElements.push(element);
       }
     }
   }
-
-  get recommendedElements() {
-    return this._recommendedElements;
-  }
-
-  @Input()
-  set recommendedElements(recommendedElements: any) {
-    this.recommendationsPrepared = false;
-    this.prepareStyles(recommendedElements);
-    this._recommendedElements = recommendedElements;
-    this.recommendationsPrepared = true;
-  }
 }
\ No newline at end of file
diff --git a/ui/src/app/editor/components/pipeline/pipeline.component.ts b/ui/src/app/editor/components/pipeline/pipeline.component.ts
index 6c3d013..dd83082 100644
--- a/ui/src/app/editor/components/pipeline/pipeline.component.ts
+++ b/ui/src/app/editor/components/pipeline/pipeline.component.ts
@@ -312,9 +312,9 @@ export class PipelineComponent implements OnInit {
                 if ((payload.staticProperties && payload.staticProperties.length > 0) || this.isCustomOutput(pe)) {
                   this.showCustomizeDialog({a: false, b: pe});
                 } else {
-                  this.announceConfiguredElement(pe);
                   (pe.payload as InvocablePipelineElementUnion).configured = true;
                   pe.settings.completed = true;
+                  this.announceConfiguredElement(pe);
                 }
               }
             }, status => {
@@ -410,6 +410,7 @@ export class PipelineComponent implements OnInit {
     dialogRef.afterClosed().subscribe(c => {
       if (c) {
         pipelineElementInfo.b.settings.openCustomize = false;
+        (pipelineElementInfo.b.payload as InvocablePipelineElementUnion).configured = true;
         this.JsplumbService.activateEndpoint(pipelineElementInfo.b.payload.dom, pipelineElementInfo.b.settings.completed);
         this.JsplumbBridge.getSourceEndpoint(pipelineElementInfo.b.payload.dom).setType("token");
         this.triggerPipelineCacheUpdate();


[incubator-streampipes] 03/03: Merge branch 'rel/0.67.0' of github.com:apache/incubator-streampipes into rel/0.67.0

Posted by ri...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit daabe8c01e20a13d4736d27ba1da5ca0abbff3ca
Merge: b4c1d42 28654c5
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Thu Sep 17 23:21:28 2020 +0200

    Merge branch 'rel/0.67.0' of github.com:apache/incubator-streampipes into rel/0.67.0

 .../static-secret-input/static-secret-input.component.html              | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


[incubator-streampipes] 02/03: [hotfix] Improve loading of remote static properties

Posted by ri...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b4c1d42d1735e38242ac8a60f7b6a366cfc63fae
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Thu Sep 17 23:21:10 2020 +0200

    [hotfix] Improve loading of remote static properties
---
 .../app/core-ui/dialog/confirm-dialog/confirm-dialog.component.html   | 2 +-
 ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.ts  | 4 ++++
 .../static-mapping-unary/static-mapping-unary.component.ts            | 4 +++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.html b/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.html
index 1d538c7..3cd9385 100644
--- a/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.html
+++ b/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.html
@@ -23,6 +23,6 @@
     </div>
     <div fxFlex="100" fxLayoutAlign="end center" class="footer">
         <button mat-button (click)="onCancel()" *ngIf="data.confirmAndCancel">{{data.cancelTitle}}</button>
-        <button mat-button [mat-dialog-close]="true" cdkFocusInitial>{{data.okTitle}}</button>
+        <button mat-button (click)="onOk()" cdkFocusInitial>{{data.okTitle}}</button>
     </div>
 </div>
\ No newline at end of file
diff --git a/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.ts b/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.ts
index ccd85bd..4f0e5a9 100644
--- a/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.ts
+++ b/ui/src/app/core-ui/dialog/confirm-dialog/confirm-dialog.component.ts
@@ -34,4 +34,8 @@ export class ConfirmDialogComponent {
   onCancel(): void {
     this.dialogRef.close();
   }
+
+  onOk(): void {
+    this.dialogRef.close(true);
+  }
 }
diff --git a/ui/src/app/core-ui/static-properties/static-mapping-unary/static-mapping-unary.component.ts b/ui/src/app/core-ui/static-properties/static-mapping-unary/static-mapping-unary.component.ts
index 0fef3ac..9500097 100644
--- a/ui/src/app/core-ui/static-properties/static-mapping-unary/static-mapping-unary.component.ts
+++ b/ui/src/app/core-ui/static-properties/static-mapping-unary/static-mapping-unary.component.ts
@@ -43,7 +43,9 @@ export class StaticMappingUnaryComponent extends StaticMappingComponent<MappingP
         this.availableProperties = this.extractPossibleSelections();
         this.availableProperties
             .forEach(ep => ep.propertySelector = this.firstStreamPropertySelector + ep.runtimeName);
-        if (!this.staticProperty.selectedProperty) {
+        console.log(this.staticProperty.selectedProperty);
+        if (!(this.staticProperty.selectedProperty)) {
+            console.log("setting property");
             this.staticProperty.selectedProperty = this.availableProperties[0].propertySelector;
             this.emitUpdate(true);
         }