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 2022/01/06 15:39:41 UTC

[incubator-streampipes] branch dev updated: [hotfix] Improve icon handling of pipeline elements

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 bbe3416  [hotfix] Improve icon handling of pipeline elements
bbe3416 is described below

commit bbe34160ffc1a355345415397623cfdd39e43ce9
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Thu Jan 6 16:37:15 2022 +0100

    [hotfix] Improve icon handling of pipeline elements
---
 .../changedetection/jvm/cusum/CusumController.java |   6 +-
 .../valueChange/ValueChangeProcessor.java          |   2 +-
 .../processors/siddhi/count/CountAggregation.java  |   2 +-
 .../siddhi/listcollector/ListCollector.java        |   2 +-
 .../processors/siddhi/listfilter/ListFilter.java   |   2 +-
 .../streampipes/processors/siddhi/topk/TopK.java   |   2 +-
 .../logical/BooleanOperatorProcessor.java          |   2 +-
 .../model/graph/DataProcessorInvocation.java       |  28 +++---
 .../model/graph/DataSinkInvocation.java            |  26 +++---
 .../pipeline-element.component.html                |   4 +-
 .../pipeline-element/pipeline-element.component.ts |  42 ++++-----
 ui/src/app/editor/editor.module.ts                 | 101 ++++++++++-----------
 ui/src/app/services/image-checker.service.ts       |  57 ------------
 13 files changed, 105 insertions(+), 171 deletions(-)

diff --git a/streampipes-extensions/streampipes-processors-change-detection-jvm/src/main/java/org/apache/streampipes/processors/changedetection/jvm/cusum/CusumController.java b/streampipes-extensions/streampipes-processors-change-detection-jvm/src/main/java/org/apache/streampipes/processors/changedetection/jvm/cusum/CusumController.java
index b4a6ea6..ed7d0ec 100644
--- a/streampipes-extensions/streampipes-processors-change-detection-jvm/src/main/java/org/apache/streampipes/processors/changedetection/jvm/cusum/CusumController.java
+++ b/streampipes-extensions/streampipes-processors-change-detection-jvm/src/main/java/org/apache/streampipes/processors/changedetection/jvm/cusum/CusumController.java
@@ -18,8 +18,6 @@
 
 package org.apache.streampipes.processors.changedetection.jvm.cusum;
 
-import java.util.Arrays;
-
 import org.apache.streampipes.model.DataProcessorType;
 import org.apache.streampipes.model.graph.DataProcessorDescription;
 import org.apache.streampipes.model.graph.DataProcessorInvocation;
@@ -33,6 +31,8 @@ import org.apache.streampipes.vocabulary.SO;
 import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
 import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
 
+import java.util.Arrays;
+
 public class CusumController extends StandaloneEventProcessingDeclarer<CusumParameters> {
 
     private static final String NUMBER_MAPPING = "number-mapping";
@@ -43,7 +43,7 @@ public class CusumController extends StandaloneEventProcessingDeclarer<CusumPara
     public DataProcessorDescription declareModel() {
         return ProcessingElementBuilder.create("org.apache.streampipes.processors.changedetection.jvm.cusum")
                 .category(DataProcessorType.FILTER)
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withAssets(Assets.DOCUMENTATION)
                 .withLocales(Locales.EN)
                 .requiredStream(StreamRequirementsBuilder
                         .create()
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/valueChange/ValueChangeProcessor.java b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/valueChange/ValueChangeProcessor.java
index c612b45..036bcb8 100644
--- a/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/valueChange/ValueChangeProcessor.java
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/src/main/java/org/apache/streampipes/processors/enricher/jvm/processor/valueChange/ValueChangeProcessor.java
@@ -49,7 +49,7 @@ public class ValueChangeProcessor extends StreamPipesDataProcessor {
 	public DataProcessorDescription declareModel() {
 		return ProcessingElementBuilder.create("org.apache.streampipes.processors.enricher.jvm.valueChange")
 				.category(DataProcessorType.ENRICH)
-				.withAssets(Assets.DOCUMENTATION, Assets.ICON)
+				.withAssets(Assets.DOCUMENTATION)
 				.withLocales(Locales.EN)
 				.requiredFloatParameter(Labels.withId(FROM_PROPERTY_VALUE_ID))
 				.requiredFloatParameter(Labels.withId(TO_PROPERTY_VALUE_ID))
diff --git a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/count/CountAggregation.java b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/count/CountAggregation.java
index 722fa71..99d0cdc 100644
--- a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/count/CountAggregation.java
+++ b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/count/CountAggregation.java
@@ -51,7 +51,7 @@ public class CountAggregation extends StreamPipesSiddhiProcessor {
   public DataProcessorDescription declareModel() {
     return ProcessingElementBuilder.create("org.apache.streampipes.processors.siddhi.count")
             .category(DataProcessorType.AGGREGATE)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withAssets(Assets.DOCUMENTATION)
             .withLocales(Locales.EN)
             .requiredStream(StreamRequirementsBuilder
                     .create()
diff --git a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listcollector/ListCollector.java b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listcollector/ListCollector.java
index 0c1be91..9651303 100644
--- a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listcollector/ListCollector.java
+++ b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listcollector/ListCollector.java
@@ -55,7 +55,7 @@ public class ListCollector extends StreamPipesSiddhiProcessor
     return ProcessingElementBuilder.create("org.apache.streampipes.processors.siddhi.listcollector")
             .withLocales(Locales.EN)
             .category(DataProcessorType.PATTERN_DETECT)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withAssets(Assets.DOCUMENTATION)
             .requiredStream(StreamRequirementsBuilder.create()
                     .requiredPropertyWithUnaryMapping(EpRequirements.anyProperty(), Labels.withId
                             (LIST_KEY), PropertyScope.MEASUREMENT_PROPERTY)
diff --git a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listfilter/ListFilter.java b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listfilter/ListFilter.java
index dde8cac..2850d04 100644
--- a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listfilter/ListFilter.java
+++ b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/listfilter/ListFilter.java
@@ -52,7 +52,7 @@ public class ListFilter extends StreamPipesSiddhiProcessor {
     return ProcessingElementBuilder.create("org.apache.streampipes.processors.siddhi.listfilter")
             .withLocales(Locales.EN)
             .category(DataProcessorType.PATTERN_DETECT)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withAssets(Assets.DOCUMENTATION)
             .requiredStream(StreamRequirementsBuilder.create()
                     .requiredPropertyWithUnaryMapping(EpRequirements.listRequirement(), Labels.withId
                             (LIST_KEY), PropertyScope.MEASUREMENT_PROPERTY)
diff --git a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/topk/TopK.java b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/topk/TopK.java
index fcd03b2..8a930fa 100644
--- a/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/topk/TopK.java
+++ b/streampipes-extensions/streampipes-processors-filters-siddhi/src/main/java/org/apache/streampipes/processors/siddhi/topk/TopK.java
@@ -62,7 +62,7 @@ public class TopK extends StreamPipesSiddhiProcessor {
     return ProcessingElementBuilder.create("org.apache.streampipes.processors.siddhi.topk")
             .withLocales(Locales.EN)
             .category(DataProcessorType.TRANSFORM)
-            .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+            .withAssets(Assets.DOCUMENTATION)
             .requiredStream(StreamRequirementsBuilder.create()
                     .requiredPropertyWithUnaryMapping(EpRequirements.stringReq(), Labels.withId
                             (VALUE_KEY), PropertyScope.NONE)
diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/booloperator/logical/BooleanOperatorProcessor.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/booloperator/logical/BooleanOperatorProcessor.java
index e469e72..0eac977 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/booloperator/logical/BooleanOperatorProcessor.java
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/main/java/org/apache/streampipes/processors/transformation/jvm/processor/booloperator/logical/BooleanOperatorProcessor.java
@@ -55,7 +55,7 @@ public class BooleanOperatorProcessor extends StreamPipesDataProcessor {
     @Override
     public DataProcessorDescription declareModel() {
         return ProcessingElementBuilder.create("org.apache.streampipes.processors.transformation.jvm.booloperator.logical")
-                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withAssets(Assets.DOCUMENTATION)
                 .withLocales(Locales.EN)
                 .category(DataProcessorType.ENRICH)
                 .requiredStream(
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataProcessorInvocation.java b/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataProcessorInvocation.java
index 1551b38..d09eb68 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataProcessorInvocation.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataProcessorInvocation.java
@@ -41,22 +41,22 @@ public class DataProcessorInvocation extends InvocableStreamPipesEntity implemen
 
   private List<String> category;
 
-  public DataProcessorInvocation(DataProcessorDescription sepa) {
+  public DataProcessorInvocation(DataProcessorDescription other) {
     super();
-    this.setName(sepa.getName());
-    this.setDescription(sepa.getDescription());
-    this.setIconUrl(sepa.getIconUrl());
-    this.setInputStreams(sepa.getSpDataStreams());
-    this.setSupportedGrounding(sepa.getSupportedGrounding());
-    this.setStaticProperties(sepa.getStaticProperties());
-    this.setOutputStrategies(sepa.getOutputStrategies());
-    this.setBelongsTo(sepa.getElementId());
-    this.category = sepa.getCategory();
-    this.setStreamRequirements(sepa.getSpDataStreams());
-    this.setAppId(sepa.getAppId());
-    this.setIncludesAssets(sepa.isIncludesAssets());
+    this.setName(other.getName());
+    this.setDescription(other.getDescription());
+    this.setIconUrl(other.getIconUrl());
+    this.setInputStreams(other.getSpDataStreams());
+    this.setSupportedGrounding(other.getSupportedGrounding());
+    this.setStaticProperties(other.getStaticProperties());
+    this.setOutputStrategies(other.getOutputStrategies());
+    this.setBelongsTo(other.getElementId());
+    this.category = other.getCategory();
+    this.setStreamRequirements(other.getSpDataStreams());
+    this.setAppId(other.getAppId());
+    this.setIncludesAssets(other.isIncludesAssets());
+    this.setIncludedAssets(other.getIncludedAssets());
     this.setElementId(ElementIdGenerator.makeElementId(this));
-    //this.setUri(belongsTo +"/" +getElementId());
   }
 
   public DataProcessorInvocation(DataProcessorInvocation other) {
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataSinkInvocation.java b/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataSinkInvocation.java
index 4f3b1cf..eaf8142 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataSinkInvocation.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/graph/DataSinkInvocation.java
@@ -36,21 +36,21 @@ public class DataSinkInvocation extends InvocableStreamPipesEntity {
     this.category = sec.getCategory();
   }
 
-  public DataSinkInvocation(DataSinkDescription sec) {
+  public DataSinkInvocation(DataSinkDescription other) {
     super();
-    this.setName(sec.getName());
-    this.setDescription(sec.getDescription());
-    this.setIconUrl(sec.getIconUrl());
-    this.setInputStreams(sec.getSpDataStreams());
-    this.setSupportedGrounding(sec.getSupportedGrounding());
-    this.setStaticProperties(sec.getStaticProperties());
-    this.setBelongsTo(sec.getElementId());
-    this.category = sec.getCategory();
-    this.setStreamRequirements(sec.getSpDataStreams());
-    this.setAppId(sec.getAppId());
-    this.setIncludesAssets(sec.isIncludesAssets());
+    this.setName(other.getName());
+    this.setDescription(other.getDescription());
+    this.setIconUrl(other.getIconUrl());
+    this.setInputStreams(other.getSpDataStreams());
+    this.setSupportedGrounding(other.getSupportedGrounding());
+    this.setStaticProperties(other.getStaticProperties());
+    this.setBelongsTo(other.getElementId());
+    this.category = other.getCategory();
+    this.setStreamRequirements(other.getSpDataStreams());
+    this.setAppId(other.getAppId());
+    this.setIncludesAssets(other.isIncludesAssets());
     this.setElementId(ElementIdGenerator.makeElementId(this));
-    //this.setUri(belongsTo +"/" +getElementId());
+    this.setIncludedAssets(other.getIncludedAssets());
   }
 
   public DataSinkInvocation(DataSinkDescription sec, String domId) {
diff --git a/ui/src/app/editor/components/pipeline-element/pipeline-element.component.html b/ui/src/app/editor/components/pipeline-element/pipeline-element.component.html
index 0c579e2..2a758a9 100644
--- a/ui/src/app/editor/components/pipeline-element/pipeline-element.component.html
+++ b/ui/src/app/editor/components/pipeline-element/pipeline-element.component.html
@@ -16,7 +16,7 @@
   ~
   -->
 
-<img src="{{iconUrl}}" *ngIf="showImage" style="{{iconSizeCss()}}">
+<img [src]="image" *ngIf="showImage" style="{{iconSizeCss()}}">
 <span *ngIf="!showImage" class="element-text-icon">
             {{iconText}}
-</span>
\ No newline at end of file
+</span>
diff --git a/ui/src/app/editor/components/pipeline-element/pipeline-element.component.ts b/ui/src/app/editor/components/pipeline-element/pipeline-element.component.ts
index f065d86..84fc539 100644
--- a/ui/src/app/editor/components/pipeline-element/pipeline-element.component.ts
+++ b/ui/src/app/editor/components/pipeline-element/pipeline-element.component.ts
@@ -16,11 +16,11 @@
  *
  */
 
-import {Component, Input, OnInit,} from "@angular/core";
-import {RestApi} from "../../../services/rest-api.service";
-import {ElementIconText} from "../../../services/get-element-icon-text.service";
-import {ImageChecker} from "../../../services/image-checker.service";
-import {PipelineElementUnion} from "../../model/editor.model";
+import { Component, Input, OnInit, } from '@angular/core';
+import { RestApi } from '../../../services/rest-api.service';
+import { ElementIconText } from '../../../services/get-element-icon-text.service';
+import { PipelineElementUnion } from '../../model/editor.model';
+import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
 
 
 @Component({
@@ -46,48 +46,42 @@ export class PipelineElementComponent implements OnInit {
     iconStandSize: any;
 
     iconUrl: any;
+    image: SafeUrl;
 
-    constructor(private ImageChecker: ImageChecker,
-                private RestApi: RestApi,
-                private ElementIconText: ElementIconText) {
+    constructor(private restApi: RestApi,
+                private elementIconText: ElementIconText,
+                private sanitizer: DomSanitizer) {
 
     }
 
     ngOnInit(): void {
-        this.iconText =  this.ElementIconText.getElementIconText(this.pipelineElement.name);
+        this.iconText =  this.elementIconText.getElementIconText(this.pipelineElement.name);
         this.checkImageAvailable();
     }
 
     checkImageAvailable() {
-        if (this.pipelineElement.includesAssets) {
-            this.fetchImage(this.makeAssetIconUrl())
+        if (this.pipelineElement.includesAssets && this.pipelineElement.includedAssets.indexOf('icon.png') > -1) {
+            this.image = this.sanitizer.bypassSecurityTrustUrl(this.makeAssetIconUrl());
+            this.showImage = true;
         } else {
-            this.fetchImage(this.pipelineElement.iconUrl);
+            this.showImage = false;
         }
     }
 
-    fetchImage(imageUrl) {
-        this.ImageChecker.imageExists(imageUrl, (exists) => {
-            this.iconUrl = imageUrl;
-            this.showImage = exists;
-        })
-    }
-
     makeAssetIconUrl() {
-        return this.RestApi.getAssetUrl(this.pipelineElement.appId) +"/icon";
+        return this.restApi.getAssetUrl(this.pipelineElement.appId) + '/icon';
     }
 
     iconSizeCss() {
         if (this.iconSize) {
             return 'width:35px;height:35px;';
-        }
-        else if (this.preview) {
+        } else if (this.preview) {
             return 'width:50px;height:50px;';
         } else if (this.iconStandSize) {
-            return 'width:50px;height:50px;margin-top:-5px;'
+            return 'width:50px;height:50px;margin-top:-5px;';
         } else {
             return 'width:70px;height:70px;';
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/ui/src/app/editor/editor.module.ts b/ui/src/app/editor/editor.module.ts
index 8c86840..3ff9973 100644
--- a/ui/src/app/editor/editor.module.ts
+++ b/ui/src/app/editor/editor.module.ts
@@ -16,57 +16,55 @@
  *
  */
 
-import {NgModule} from '@angular/core';
-import {CommonModule} from '@angular/common';
-import {FlexLayoutModule} from '@angular/flex-layout';
-import {GridsterModule} from 'angular-gridster2';
-import {MatTabsModule} from "@angular/material/tabs";
-import {CustomMaterialModule} from "../CustomMaterial/custom-material.module";
-import {FormsModule, ReactiveFormsModule} from "@angular/forms";
-import {SemanticTypeUtilsService} from '../core-services/semantic-type/semantic-type-utils.service';
-import {EditorComponent} from "./editor.component";
-import {EditorService} from "./services/editor.service";
-import {PipelineElementIconStandComponent} from "./components/pipeline-element-icon-stand/pipeline-element-icon-stand.component";
-import {PipelineAssemblyComponent} from "./components/pipeline-assembly/pipeline-assembly.component";
-import {ImageChecker} from "../services/image-checker.service";
-import {PipelineElementComponent} from "./components/pipeline-element/pipeline-element.component";
-import {JsplumbBridge} from "./services/jsplumb-bridge.service";
-import {PipelinePositioningService} from "./services/pipeline-positioning.service";
-import {JsplumbService} from "./services/jsplumb.service";
-import {JsplumbConfigService} from "./services/jsplumb-config.service";
-import {PipelineEditorService} from "./services/pipeline-editor.service";
-import {PipelineValidationService} from "./services/pipeline-validation.service";
-import {PipelineComponent} from "./components/pipeline/pipeline.component";
-import {ObjectProvider} from "./services/object-provider.service";
-import {PipelineElementOptionsComponent} from "./components/pipeline-element-options/pipeline-element-options.component";
-import {PipelineElementRecommendationService} from "./services/pipeline-element-recommendation.service";
-import {CustomizeComponent} from "./dialog/customize/customize.component";
-import {MatProgressSpinnerModule} from "@angular/material/progress-spinner";
-import {CoreUiModule} from "../core-ui/core-ui.module";
-import {SavePipelineComponent} from "./dialog/save-pipeline/save-pipeline.component";
-import {PipelineElementRecommendationComponent} from "./components/pipeline-element-recommendation/pipeline-element-recommendation.component";
-import {CompatibleElementsComponent} from "./dialog/compatible-elements/compatible-elements.component";
-import {MatListModule} from "@angular/material/list";
-import {HelpComponent} from "./dialog/help/help.component";
-import {PipelineElementDocumentationComponent} from "./components/pipeline-element-documentation/pipeline-element-documentation.component";
-import {ShowdownModule} from 'ngx-showdown';
-import {SafeCss} from "./utils/style-sanitizer";
-import {MatchingErrorComponent} from "./dialog/matching-error/matching-error.component";
-import {WelcomeTourComponent} from "./dialog/welcome-tour/welcome-tour.component";
-import {MissingElementsForTutorialComponent} from "./dialog/missing-elements-for-tutorial/missing-elements-for-tutorial.component";
-import {OutputStrategyComponent} from "./components/output-strategy/output-strategy.component";
-import {CustomOutputStrategyComponent} from "./components/output-strategy/custom-output/custom-output-strategy.component";
-import {PropertySelectionComponent} from "./components/output-strategy/property-selection/property-selection.component";
-import {UserDefinedOutputStrategyComponent} from "./components/output-strategy/user-defined-output/user-defined-output.component";
-import {ConnectModule} from "../connect/connect.module";
-import {PipelineElementTemplateConfigComponent} from "./components/pipeline-element-template-config/pipeline-element-template-config.component";
-import {EnabledPipelineElementFilter} from "./filter/enabled-pipeline-element.filter";
-import {PipelineElementDraggedService} from "./services/pipeline-element-dragged.service";
-import {PipelineCanvasScrollingService} from "./services/pipeline-canvas-scrolling.service";
-import {JsplumbEndpointService} from "./services/jsplumb-endpoint.service";
-import {JsplumbFactoryService} from "./services/jsplumb-factory.service";
-import {PipelineElementPreviewComponent} from "./components/pipeline-element-preview/pipeline-element-preview.component";
-import {PipelineElementDiscoveryComponent} from "./dialog/pipeline-element-discovery/pipeline-element-discovery.component";
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FlexLayoutModule } from '@angular/flex-layout';
+import { GridsterModule } from 'angular-gridster2';
+import { MatTabsModule } from '@angular/material/tabs';
+import { CustomMaterialModule } from '../CustomMaterial/custom-material.module';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { SemanticTypeUtilsService } from '../core-services/semantic-type/semantic-type-utils.service';
+import { EditorComponent } from './editor.component';
+import { EditorService } from './services/editor.service';
+import { PipelineElementIconStandComponent } from './components/pipeline-element-icon-stand/pipeline-element-icon-stand.component';
+import { PipelineAssemblyComponent } from './components/pipeline-assembly/pipeline-assembly.component';
+import { PipelineElementComponent } from './components/pipeline-element/pipeline-element.component';
+import { PipelinePositioningService } from './services/pipeline-positioning.service';
+import { JsplumbService } from './services/jsplumb.service';
+import { JsplumbConfigService } from './services/jsplumb-config.service';
+import { PipelineEditorService } from './services/pipeline-editor.service';
+import { PipelineValidationService } from './services/pipeline-validation.service';
+import { PipelineComponent } from './components/pipeline/pipeline.component';
+import { ObjectProvider } from './services/object-provider.service';
+import { PipelineElementOptionsComponent } from './components/pipeline-element-options/pipeline-element-options.component';
+import { PipelineElementRecommendationService } from './services/pipeline-element-recommendation.service';
+import { CustomizeComponent } from './dialog/customize/customize.component';
+import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
+import { CoreUiModule } from '../core-ui/core-ui.module';
+import { SavePipelineComponent } from './dialog/save-pipeline/save-pipeline.component';
+import { PipelineElementRecommendationComponent } from './components/pipeline-element-recommendation/pipeline-element-recommendation.component';
+import { CompatibleElementsComponent } from './dialog/compatible-elements/compatible-elements.component';
+import { MatListModule } from '@angular/material/list';
+import { HelpComponent } from './dialog/help/help.component';
+import { PipelineElementDocumentationComponent } from './components/pipeline-element-documentation/pipeline-element-documentation.component';
+import { ShowdownModule } from 'ngx-showdown';
+import { SafeCss } from './utils/style-sanitizer';
+import { MatchingErrorComponent } from './dialog/matching-error/matching-error.component';
+import { WelcomeTourComponent } from './dialog/welcome-tour/welcome-tour.component';
+import { MissingElementsForTutorialComponent } from './dialog/missing-elements-for-tutorial/missing-elements-for-tutorial.component';
+import { OutputStrategyComponent } from './components/output-strategy/output-strategy.component';
+import { CustomOutputStrategyComponent } from './components/output-strategy/custom-output/custom-output-strategy.component';
+import { PropertySelectionComponent } from './components/output-strategy/property-selection/property-selection.component';
+import { UserDefinedOutputStrategyComponent } from './components/output-strategy/user-defined-output/user-defined-output.component';
+import { ConnectModule } from '../connect/connect.module';
+import { PipelineElementTemplateConfigComponent } from './components/pipeline-element-template-config/pipeline-element-template-config.component';
+import { EnabledPipelineElementFilter } from './filter/enabled-pipeline-element.filter';
+import { PipelineElementDraggedService } from './services/pipeline-element-dragged.service';
+import { PipelineCanvasScrollingService } from './services/pipeline-canvas-scrolling.service';
+import { JsplumbEndpointService } from './services/jsplumb-endpoint.service';
+import { JsplumbFactoryService } from './services/jsplumb-factory.service';
+import { PipelineElementPreviewComponent } from './components/pipeline-element-preview/pipeline-element-preview.component';
+import { PipelineElementDiscoveryComponent } from './dialog/pipeline-element-discovery/pipeline-element-discovery.component';
 
 @NgModule({
     imports: [
@@ -125,7 +123,6 @@ import {PipelineElementDiscoveryComponent} from "./dialog/pipeline-element-disco
         PipelinePositioningService,
         PipelineValidationService,
         PipelineElementRecommendationService,
-        ImageChecker,
         SafeCss,
     ],
   exports: [
diff --git a/ui/src/app/services/image-checker.service.ts b/ui/src/app/services/image-checker.service.ts
deleted file mode 100644
index c958899..0000000
--- a/ui/src/app/services/image-checker.service.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import {Injectable} from "@angular/core";
-
-@Injectable()
-export class ImageChecker {
-
-    constructor() {}
-
-    imageExists(url, callback) {
-        if (url == null || url === 'undefined') {
-            callback(false);
-            return;
-        }
-        var img = new Image();
-        img.onload = function () {
-            callback(true);
-        };
-        img.onerror = function () {
-            callback(false);
-        };
-        img.src = url;
-    };
-
-    imageExistsBoolean(url) {
-        if (url == null || url === 'undefined') {
-            return false;
-        }
-        var img = new Image();
-        img.onload = function () {
-            //callback(true);
-        };
-        img.onerror = function () {
-            //callback(false);
-        };
-        img.src = url;
-    }
-
-}
-
-