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 2021/08/10 14:57:50 UTC

[incubator-streampipes] branch STREAMPIPES-319 updated: [STREAMPIPES-402] Harmonize dashboard model of data explorer and dashboard

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

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


The following commit(s) were added to refs/heads/STREAMPIPES-319 by this push:
     new a05dde4  [STREAMPIPES-402] Harmonize dashboard model of data explorer and dashboard
a05dde4 is described below

commit a05dde4a75c741db403ce24b552a0645e7b0c35b
Author: Dominik Riemer <ri...@fzi.de>
AuthorDate: Tue Aug 10 16:57:41 2021 +0200

    [STREAMPIPES-402] Harmonize dashboard model of data explorer and dashboard
---
 ui/src/app/core-model/dashboard/Dashboard.ts       | 21 ----------
 ui/src/app/core-model/datalake/DateRange.ts        |  3 +-
 ui/src/app/dashboard/models/dashboard.model.ts     |  8 +++-
 .../grid/data-explorer-dashboard-grid.component.ts | 47 ++++++++++++----------
 .../data-explorer-dashboard-overview.component.ts  | 28 ++++++-------
 .../data-explorer-dashboard-panel.component.ts     | 14 +++----
 .../time-selector/timeRangeSelector.component.ts   |  2 +-
 .../data-explorer-dashboard-widget.component.ts    |  6 +--
 .../widgets/base/base-data-explorer-widget.ts      |  4 +-
 .../widgets/image/image-widget.component.ts        |  2 +-
 .../no-data/no-data-in-date-range.component.ts     |  2 +-
 .../app/data-explorer/data-explorer.component.ts   | 11 +++--
 ...-explorer-add-visualization-dialog.component.ts |  5 ++-
 ...ata-explorer-edit-data-view-dialog.component.ts |  4 +-
 .../models/dataview-dashboard.model.ts             | 25 +-----------
 .../services/data-view-data-explorer.service.ts    | 12 +++---
 16 files changed, 79 insertions(+), 115 deletions(-)

diff --git a/ui/src/app/core-model/dashboard/Dashboard.ts b/ui/src/app/core-model/dashboard/Dashboard.ts
deleted file mode 100644
index d7548ff..0000000
--- a/ui/src/app/core-model/dashboard/Dashboard.ts
+++ /dev/null
@@ -1,21 +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.
- *
- */
-
-export class Dashboard {
-
-}
\ No newline at end of file
diff --git a/ui/src/app/core-model/datalake/DateRange.ts b/ui/src/app/core-model/datalake/DateRange.ts
index eb10371..0edbb97 100644
--- a/ui/src/app/core-model/datalake/DateRange.ts
+++ b/ui/src/app/core-model/datalake/DateRange.ts
@@ -16,7 +16,8 @@
  *
  */
 
-import {TimeSettings} from "../../data-explorer/models/dataview-dashboard.model";
+
+import {TimeSettings} from "../../dashboard/models/dashboard.model";
 
 export class DateRange {
 
diff --git a/ui/src/app/dashboard/models/dashboard.model.ts b/ui/src/app/dashboard/models/dashboard.model.ts
index 6696514..9975f70 100644
--- a/ui/src/app/dashboard/models/dashboard.model.ts
+++ b/ui/src/app/dashboard/models/dashboard.model.ts
@@ -26,13 +26,19 @@ export interface DashboardItem extends GridsterItem {
     id: string;
 }
 
+export interface TimeSettings {
+    startTime: number;
+    endTime: number;
+    dynamicSelection: 15 | 60 | 1440 | 10080 | 43800 | 525600 | -1;
+}
+
 export interface Dashboard {
     id?: string;
     name?: string;
     description?: string;
     displayHeader?: boolean;
     widgets?: Array<DashboardItem>;
-    dashboardTimeSettings?: any;
+    dashboardTimeSettings?: TimeSettings;
     dashboardGeneralSettings?: any;
     _id?: string;
     _rev?: string;
diff --git a/ui/src/app/data-explorer/components/grid/data-explorer-dashboard-grid.component.ts b/ui/src/app/data-explorer/components/grid/data-explorer-dashboard-grid.component.ts
index c21d29a..31ebb6d 100644
--- a/ui/src/app/data-explorer/components/grid/data-explorer-dashboard-grid.component.ts
+++ b/ui/src/app/data-explorer/components/grid/data-explorer-dashboard-grid.component.ts
@@ -27,20 +27,19 @@ import {
   SimpleChanges,
   ViewChildren
 } from '@angular/core';
-import {GridsterItemComponent, GridType} from 'angular-gridster2';
-import {GridsterInfo} from '../../../dashboard/models/gridster-info.model';
+import { GridsterItemComponent, GridType } from 'angular-gridster2';
+import { GridsterInfo } from '../../../dashboard/models/gridster-info.model';
+import { IDataViewDashboardConfig, } from '../../models/dataview-dashboard.model';
+import { DataViewDataExplorerService } from '../../services/data-view-data-explorer.service';
+import { RefreshDashboardService } from '../../services/refresh-dashboard.service';
+import { ResizeService } from '../../services/resize.service';
 import {
-  IDataViewDashboard,
-  IDataViewDashboardConfig,
-  IDataViewDashboardItem,
-  TimeSettings
-} from '../../models/dataview-dashboard.model';
-import {DataViewDataExplorerService} from '../../services/data-view-data-explorer.service';
-import {RefreshDashboardService} from '../../services/refresh-dashboard.service';
-import {ResizeService} from '../../services/resize.service';
-import {DataExplorerWidgetModel, DataLakeMeasure} from "../../../core-model/gen/streampipes-model";
-import {Tuple2} from "../../../core-model/base/Tuple2";
-import {DatalakeRestService} from "../../../core-services/datalake/datalake-rest.service";
+  DataExplorerWidgetModel,
+  DataLakeMeasure
+} from '../../../core-model/gen/streampipes-model';
+import { Tuple2 } from '../../../core-model/base/Tuple2';
+import { DatalakeRestService } from "../../../core-services/datalake/datalake-rest.service";
+import { Dashboard, DashboardItem, TimeSettings } from "../../../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-data-explorer-dashboard-grid',
@@ -53,7 +52,7 @@ export class DataExplorerDashboardGridComponent implements OnInit, OnChanges {
   editMode: boolean;
 
   @Input()
-  dashboard: IDataViewDashboard;
+  dashboard: Dashboard;
 
   configuredWidgets: Map<String, DataExplorerWidgetModel> = new Map<String, DataExplorerWidgetModel>();
   dataLakeMeasures: Map<String, DataLakeMeasure> = new Map<String, DataLakeMeasure>();
@@ -64,7 +63,7 @@ export class DataExplorerDashboardGridComponent implements OnInit, OnChanges {
   @Input()
   timeSettings: TimeSettings;
 
-  @Output() deleteCallback: EventEmitter<IDataViewDashboardItem> = new EventEmitter<IDataViewDashboardItem>();
+  @Output() deleteCallback: EventEmitter<DashboardItem> = new EventEmitter<DashboardItem>();
   @Output() updateCallback: EventEmitter<DataExplorerWidgetModel> = new EventEmitter<DataExplorerWidgetModel>();
   @Output() configureWidgetCallback: EventEmitter<Tuple2<DataExplorerWidgetModel, DataLakeMeasure>> = new EventEmitter<Tuple2<DataExplorerWidgetModel, DataLakeMeasure>>();
 
@@ -83,7 +82,7 @@ export class DataExplorerDashboardGridComponent implements OnInit, OnChanges {
   ngOnInit(): void {
     this.options = {
       disablePushOnDrag: true,
-      draggable: { enabled: this.editMode },
+      draggable: {enabled: this.editMode},
       gridType: GridType.VerticalFixed,
       minCols: 8,
       maxCols: 8,
@@ -92,12 +91,18 @@ export class DataExplorerDashboardGridComponent implements OnInit, OnChanges {
       fixedColWidth: 100,
       margin: 5,
       displayGrid: "always",
-      resizable: { enabled: this.editMode },
+      resizable: {enabled: this.editMode},
       itemResizeCallback: ((item, itemComponent) => {
-        this.resizeService.notify({gridsterItem: item, gridsterItemComponent: itemComponent} as GridsterInfo);
+        this.resizeService.notify({
+          gridsterItem: item,
+          gridsterItemComponent: itemComponent
+        } as GridsterInfo);
       }),
       itemInitCallback: ((item, itemComponent) => {
-        this.resizeService.notify({gridsterItem: item, gridsterItemComponent: itemComponent} as GridsterInfo);
+        this.resizeService.notify({
+          gridsterItem: item,
+          gridsterItemComponent: itemComponent
+        } as GridsterInfo);
         window.dispatchEvent(new Event('resize'));
       })
     };
@@ -107,7 +112,7 @@ export class DataExplorerDashboardGridComponent implements OnInit, OnChanges {
 
   loadWidgetConfigs() {
     this.dashboard.widgets.forEach(widget => {
-        this.loadWidgetConfig(widget.id);
+      this.loadWidgetConfig(widget.id);
     });
 
   }
@@ -130,7 +135,7 @@ export class DataExplorerDashboardGridComponent implements OnInit, OnChanges {
     }
   }
 
-  propagateItemRemoval(widget: IDataViewDashboardItem) {
+  propagateItemRemoval(widget: DashboardItem) {
     this.deleteCallback.emit(widget);
   }
 
diff --git a/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts b/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts
index 5dba063..666e9d2 100644
--- a/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts
+++ b/ui/src/app/data-explorer/components/overview/data-explorer-dashboard-overview.component.ts
@@ -16,12 +16,12 @@
  *
  */
 
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { MatDialog } from '@angular/material/dialog';
-import { MatTableDataSource } from '@angular/material/table';
-import { DataExplorerEditDataViewDialogComponent } from '../../dialogs/edit-dashboard/data-explorer-edit-data-view-dialog.component';
-import { IDataViewDashboard } from '../../models/dataview-dashboard.model';
-import { DataViewDataExplorerService } from '../../services/data-view-data-explorer.service';
+import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
+import {MatDialog} from '@angular/material/dialog';
+import {MatTableDataSource} from '@angular/material/table';
+import {DataExplorerEditDataViewDialogComponent} from '../../dialogs/edit-dashboard/data-explorer-edit-data-view-dialog.component';
+import {DataViewDataExplorerService} from '../../services/data-view-data-explorer.service';
+import {Dashboard} from "../../../dashboard/models/dashboard.model";
 
 @Component({
     selector: 'sp-data-explorer-dashboard-overview',
@@ -30,11 +30,11 @@ import { DataViewDataExplorerService } from '../../services/data-view-data-explo
 })
 export class DataExplorerDashboardOverviewComponent implements OnInit {
 
-    @Input() dataViewDashboards: IDataViewDashboard[];
+    @Input() dataViewDashboards: Dashboard[];
     @Output() reloadDashboardsEmitter = new EventEmitter<void>();
-    @Output() selectDashboardEmitter = new EventEmitter<IDataViewDashboard>();
+    @Output() selectDashboardEmitter = new EventEmitter<Dashboard>();
 
-    dataSource = new MatTableDataSource<IDataViewDashboard>();
+    dataSource = new MatTableDataSource<Dashboard>();
     displayedColumns: string[] = ['name', 'open', 'delete'];
 
     editLabels: boolean;
@@ -50,7 +50,7 @@ export class DataExplorerDashboardOverviewComponent implements OnInit {
     }
 
     openNewDataViewDialog() {
-        const dataViewDashboard = {} as IDataViewDashboard;
+        const dataViewDashboard = {} as Dashboard;
         dataViewDashboard.widgets = [];
 
         this.openDataViewModificationDialog(true, dataViewDashboard);
@@ -60,7 +60,7 @@ export class DataExplorerDashboardOverviewComponent implements OnInit {
        this.editLabels = true;
     }
 
-    openDataViewModificationDialog(createMode: boolean, dashboard: IDataViewDashboard) {
+    openDataViewModificationDialog(createMode: boolean, dashboard: Dashboard) {
         const dialogRef = this.dialog.open(DataExplorerEditDataViewDialogComponent, {
             width: '70%',
             panelClass: 'custom-dialog-container'
@@ -73,18 +73,18 @@ export class DataExplorerDashboardOverviewComponent implements OnInit {
         });
     }
 
-    openEditDataViewDialog(dashboard: IDataViewDashboard) {
+    openEditDataViewDialog(dashboard: Dashboard) {
         this.openDataViewModificationDialog(false, dashboard);
     }
 
-    openDeleteDashboardDialog(dashboard: IDataViewDashboard) {
+    openDeleteDashboardDialog(dashboard: Dashboard) {
         // TODO add confirm dialog
         this.dashboardService.deleteDashboard(dashboard).subscribe(result => {
             this.reloadDashboardsEmitter.emit();
         });
     }
 
-    showDashboard(dashboard: IDataViewDashboard) {
+    showDashboard(dashboard: Dashboard) {
         this.selectDashboardEmitter.emit(dashboard);
     }
 
diff --git a/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts b/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts
index 6ba22e6..e2c469a 100644
--- a/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts
+++ b/ui/src/app/data-explorer/components/panel/data-explorer-dashboard-panel.component.ts
@@ -20,17 +20,13 @@ import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angula
 import {MatDialog} from '@angular/material/dialog';
 import {Observable, Subscription} from 'rxjs';
 import {DataExplorerAddVisualizationDialogComponent} from '../../dialogs/add-widget/data-explorer-add-visualization-dialog.component';
-import {
-  IDataViewDashboard,
-  IDataViewDashboardItem,
-  TimeSettings
-} from '../../models/dataview-dashboard.model';
 import {DataViewDataExplorerService} from '../../services/data-view-data-explorer.service';
 import {RefreshDashboardService} from '../../services/refresh-dashboard.service';
 import {DataExplorerWidgetModel, DataLakeMeasure} from "../../../core-model/gen/streampipes-model";
 import {DataExplorerDashboardGridComponent} from "../grid/data-explorer-dashboard-grid.component";
 import {MatDrawer} from "@angular/material/sidenav";
 import {Tuple2} from "../../../core-model/base/Tuple2";
+import {Dashboard, DashboardItem, TimeSettings} from "../../../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-data-explorer-dashboard-panel',
@@ -40,7 +36,7 @@ import {Tuple2} from "../../../core-model/base/Tuple2";
 export class DataExplorerDashboardPanelComponent implements OnInit {
 
   @Input()
-  dashboard: IDataViewDashboard;
+  dashboard: Dashboard;
 
   /**
    * This is the date range (start, end) to view the data and is set in data-explorer.ts
@@ -57,7 +53,7 @@ export class DataExplorerDashboardPanelComponent implements OnInit {
   @ViewChild('dashboardGrid') dashboardGrid: DataExplorerDashboardGridComponent;
   @ViewChild('designerDrawer') designerDrawer: MatDrawer;
 
-  public items: IDataViewDashboardItem[];
+  public items: Dashboard[];
 
   protected subscription: Subscription;
 
@@ -91,7 +87,7 @@ export class DataExplorerDashboardPanelComponent implements OnInit {
   }
 
   addWidgetToDashboard(widget: DataExplorerWidgetModel) {
-    const dashboardItem = {} as IDataViewDashboardItem;
+    const dashboardItem = {} as DashboardItem;
     dashboardItem.widgetId = widget._id;
     dashboardItem.id = widget._id;
     dashboardItem.widgetType = widget.widgetType;
@@ -140,7 +136,7 @@ export class DataExplorerDashboardPanelComponent implements OnInit {
     this.refreshDashboardService.notify(this.dashboard._id);
   }
 
-  removeAndQueueItemForDeletion(widget: IDataViewDashboardItem) {
+  removeAndQueueItemForDeletion(widget: DashboardItem) {
     this.dashboard.widgets.splice(this.dashboard.widgets.indexOf(widget), 1);
     this.widgetIdsToRemove.push(widget.id);
   }
diff --git a/ui/src/app/data-explorer/components/time-selector/timeRangeSelector.component.ts b/ui/src/app/data-explorer/components/time-selector/timeRangeSelector.component.ts
index 1332d02..0524824 100644
--- a/ui/src/app/data-explorer/components/time-selector/timeRangeSelector.component.ts
+++ b/ui/src/app/data-explorer/components/time-selector/timeRangeSelector.component.ts
@@ -17,7 +17,7 @@
  */
 
 import {Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation} from '@angular/core';
-import {TimeSettings} from "../../models/dataview-dashboard.model";
+import {TimeSettings} from "../../../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-time-range-selector',
diff --git a/ui/src/app/data-explorer/components/widget/data-explorer-dashboard-widget.component.ts b/ui/src/app/data-explorer/components/widget/data-explorer-dashboard-widget.component.ts
index 209f6fa..137830a 100644
--- a/ui/src/app/data-explorer/components/widget/data-explorer-dashboard-widget.component.ts
+++ b/ui/src/app/data-explorer/components/widget/data-explorer-dashboard-widget.component.ts
@@ -21,11 +21,11 @@ import {MatDialog} from '@angular/material/dialog';
 import {GridsterItem, GridsterItemComponent} from 'angular-gridster2';
 import {DateRange} from '../../../core-model/datalake/DateRange';
 import {DataExplorerAddVisualizationDialogComponent} from '../../dialogs/add-widget/data-explorer-add-visualization-dialog.component';
-import {IDataViewDashboardItem, TimeSettings} from '../../models/dataview-dashboard.model';
 import {DataViewDataExplorerService} from '../../services/data-view-data-explorer.service';
 import {DataExplorerWidgetModel, DataLakeMeasure} from "../../../core-model/gen/streampipes-model";
 import {DataDownloadDialog} from "../datadownloadDialog/dataDownload.dialog";
 import {Tuple2} from "../../../core-model/base/Tuple2";
+import {Dashboard, TimeSettings} from "../../../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-data-explorer-dashboard-widget',
@@ -35,7 +35,7 @@ import {Tuple2} from "../../../core-model/base/Tuple2";
 export class DataExplorerDashboardWidgetComponent implements OnInit {
 
   @Input()
-  widget: IDataViewDashboardItem;
+  widget: Dashboard;
 
   @Input()
   configuredWidget: DataExplorerWidgetModel;
@@ -58,7 +58,7 @@ export class DataExplorerDashboardWidgetComponent implements OnInit {
   @Input()
   timeSettings: TimeSettings;
 
-  @Output() deleteCallback: EventEmitter<IDataViewDashboardItem> = new EventEmitter<IDataViewDashboardItem>();
+  @Output() deleteCallback: EventEmitter<Dashboard> = new EventEmitter<Dashboard>();
   @Output() updateCallback: EventEmitter<DataExplorerWidgetModel> = new EventEmitter<DataExplorerWidgetModel>();
   @Output() configureWidgetCallback: EventEmitter<Tuple2<DataExplorerWidgetModel, DataLakeMeasure>> = new EventEmitter<Tuple2<DataExplorerWidgetModel, DataLakeMeasure>>();
 
diff --git a/ui/src/app/data-explorer/components/widgets/base/base-data-explorer-widget.ts b/ui/src/app/data-explorer/components/widgets/base/base-data-explorer-widget.ts
index 2e9b2cf..42acfa6 100644
--- a/ui/src/app/data-explorer/components/widgets/base/base-data-explorer-widget.ts
+++ b/ui/src/app/data-explorer/components/widgets/base/base-data-explorer-widget.ts
@@ -29,13 +29,13 @@ import {
 import {MatDialog} from '@angular/material/dialog';
 import {GridsterItem, GridsterItemComponent} from 'angular-gridster2';
 import {DatalakeRestService} from '../../../../core-services/datalake/datalake-rest.service';
-import {IDataViewDashboardItem, TimeSettings} from '../../../models/dataview-dashboard.model';
 import {
   DataExplorerWidgetModel,
   DataLakeMeasure,
   EventProperty
 } from "../../../../core-model/gen/streampipes-model";
 import {WidgetConfigurationService} from "../../../services/widget-configuration.service";
+import {DashboardItem, TimeSettings} from "../../../../dashboard/models/dashboard.model";
 
 @Directive()
 export abstract class BaseDataExplorerWidget<T extends DataExplorerWidgetModel> implements OnInit, OnChanges, OnDestroy {
@@ -51,7 +51,7 @@ export abstract class BaseDataExplorerWidget<T extends DataExplorerWidgetModel>
   timeSettings: TimeSettings;
 
 
-  @Input() dataViewDashboardItem: IDataViewDashboardItem;
+  @Input() dataViewDashboardItem: DashboardItem;
   @Input() dataExplorerWidget: T;
   @Input() dataLakeMeasure: DataLakeMeasure;
 
diff --git a/ui/src/app/data-explorer/components/widgets/image/image-widget.component.ts b/ui/src/app/data-explorer/components/widgets/image/image-widget.component.ts
index 2adf908..76471d3 100644
--- a/ui/src/app/data-explorer/components/widgets/image/image-widget.component.ts
+++ b/ui/src/app/data-explorer/components/widgets/image/image-widget.component.ts
@@ -73,7 +73,7 @@ export class ImageWidgetComponent extends BaseDataExplorerWidget<ImageWidgetMode
     this.setShownComponents(false, false, true);
 
     this.dataLakeRestService.getDataAutoAggregation(
-        this.dataLakeMeasure.measureName, this.viewDateRange.startDate.getTime(), this.viewDateRange.endDate.getTime())
+        this.dataLakeMeasure.measureName, this.timeSettings.startTime, this.timeSettings.endTime)
         .subscribe(
             (res: DataResult) => {
               // this.availableImageData = res;
diff --git a/ui/src/app/data-explorer/components/widgets/utils/no-data/no-data-in-date-range.component.ts b/ui/src/app/data-explorer/components/widgets/utils/no-data/no-data-in-date-range.component.ts
index d0066ea..0f46829 100644
--- a/ui/src/app/data-explorer/components/widgets/utils/no-data/no-data-in-date-range.component.ts
+++ b/ui/src/app/data-explorer/components/widgets/utils/no-data/no-data-in-date-range.component.ts
@@ -17,7 +17,7 @@
  */
 
 import {Component, Input, OnInit} from '@angular/core';
-import {TimeSettings} from "../../../../models/dataview-dashboard.model";
+import {TimeSettings} from "../../../../../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-no-data-in-date-range',
diff --git a/ui/src/app/data-explorer/data-explorer.component.ts b/ui/src/app/data-explorer/data-explorer.component.ts
index 4230423..3600769 100644
--- a/ui/src/app/data-explorer/data-explorer.component.ts
+++ b/ui/src/app/data-explorer/data-explorer.component.ts
@@ -17,11 +17,10 @@
  */
 
 import {Component, OnInit, ViewChild} from '@angular/core';
-import {IDataViewDashboard, TimeSettings} from './models/dataview-dashboard.model';
 import {DataViewDataExplorerService} from './services/data-view-data-explorer.service';
 import {RefreshDashboardService} from './services/refresh-dashboard.service';
 import {DataExplorerDashboardPanelComponent} from "./components/panel/data-explorer-dashboard-panel.component";
-import {DateRange} from "../core-model/datalake/DateRange";
+import {Dashboard, TimeSettings} from "../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-data-explorer',
@@ -30,7 +29,7 @@ import {DateRange} from "../core-model/datalake/DateRange";
 })
 export class DataExplorerComponent implements OnInit {
 
-  selectedDataViewDashboard: IDataViewDashboard;
+  selectedDataViewDashboard: Dashboard;
   selectedIndex = 0;
   dashboardsLoaded = false;
   dashboardTabSelected = false;
@@ -38,7 +37,7 @@ export class DataExplorerComponent implements OnInit {
   editMode = true;
   gridVisible: boolean = true;
 
-  dataViewDashboards: IDataViewDashboard[];
+  dataViewDashboards: Dashboard[];
 
   @ViewChild('dashboardPanel') dashboardPanel: DataExplorerDashboardPanelComponent;
 
@@ -55,7 +54,7 @@ export class DataExplorerComponent implements OnInit {
 
   }
 
-  openDashboard(dashboard: IDataViewDashboard) {
+  openDashboard(dashboard: Dashboard) {
     const index = this.dataViewDashboards.indexOf(dashboard);
     this.selectDashboard((index + 1));
   }
@@ -72,7 +71,7 @@ export class DataExplorerComponent implements OnInit {
     }
   }
 
-  applyTimeSettings(dashboard: IDataViewDashboard) {
+  applyTimeSettings(dashboard: Dashboard) {
     if (!dashboard.dashboardTimeSettings) {
       const currentTime = new Date().getTime();
       dashboard.dashboardTimeSettings = {
diff --git a/ui/src/app/data-explorer/dialogs/add-widget/data-explorer-add-visualization-dialog.component.ts b/ui/src/app/data-explorer/dialogs/add-widget/data-explorer-add-visualization-dialog.component.ts
index 08cdfc8..24f0ac1 100644
--- a/ui/src/app/data-explorer/dialogs/add-widget/data-explorer-add-visualization-dialog.component.ts
+++ b/ui/src/app/data-explorer/dialogs/add-widget/data-explorer-add-visualization-dialog.component.ts
@@ -19,7 +19,7 @@
 import {Component, Inject, OnInit} from '@angular/core';
 import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';
 import {ElementIconText} from '../../../services/get-element-icon-text.service';
-import {IDataViewDashboard, IWidget} from '../../models/dataview-dashboard.model';
+import {IWidget} from '../../models/dataview-dashboard.model';
 import {DataExplorerWidgetRegistry} from '../../registry/data-explorer-widget-registry';
 import {DataViewDataExplorerService} from '../../services/data-view-data-explorer.service';
 import {
@@ -27,6 +27,7 @@ import {
   DataLakeMeasure,
   EventSchema
 } from "../../../core-model/gen/streampipes-model";
+import {Dashboard} from "../../../dashboard/models/dashboard.model";
 
 @Component({
   selector: 'sp-data-explorer-add-visualization-dialog-component',
@@ -59,7 +60,7 @@ export class DataExplorerAddVisualizationDialogComponent implements OnInit {
   selectedDataSet: DataLakeMeasure;
   selectedWidget: string;
 
-  dashboard: IDataViewDashboard;
+  dashboard: Dashboard;
 
   selectedType: any;
   page: any = 'select-pipeline';
diff --git a/ui/src/app/data-explorer/dialogs/edit-dashboard/data-explorer-edit-data-view-dialog.component.ts b/ui/src/app/data-explorer/dialogs/edit-dashboard/data-explorer-edit-data-view-dialog.component.ts
index 5de50e0..aa09022 100644
--- a/ui/src/app/data-explorer/dialogs/edit-dashboard/data-explorer-edit-data-view-dialog.component.ts
+++ b/ui/src/app/data-explorer/dialogs/edit-dashboard/data-explorer-edit-data-view-dialog.component.ts
@@ -18,8 +18,8 @@
 
 import {Component, OnInit} from '@angular/core';
 import {MatDialogRef} from '@angular/material/dialog';
-import {IDataViewDashboard} from '../../models/dataview-dashboard.model';
 import {DataViewDataExplorerService} from '../../services/data-view-data-explorer.service';
+import {Dashboard} from "../../../dashboard/models/dashboard.model";
 
 @Component({
     selector: 'sp-data-explorer-edit-data-view-dialog-component',
@@ -29,7 +29,7 @@ import {DataViewDataExplorerService} from '../../services/data-view-data-explore
 export class DataExplorerEditDataViewDialogComponent implements OnInit {
 
     createMode: boolean;
-    dashboard: IDataViewDashboard;
+    dashboard: Dashboard;
 
     constructor(
         public dialogRef: MatDialogRef<DataExplorerEditDataViewDialogComponent>,
diff --git a/ui/src/app/data-explorer/models/dataview-dashboard.model.ts b/ui/src/app/data-explorer/models/dataview-dashboard.model.ts
index ca53c4d..07d3ed0 100644
--- a/ui/src/app/data-explorer/models/dataview-dashboard.model.ts
+++ b/ui/src/app/data-explorer/models/dataview-dashboard.model.ts
@@ -16,33 +16,10 @@
  *
  */
 
-import {GridsterConfig, GridsterItem} from 'angular-gridster2';
-
+import {GridsterConfig} from 'angular-gridster2';
 
 export interface IDataViewDashboardConfig extends GridsterConfig {}
 
-export interface IDataViewDashboardItem extends GridsterItem {
-    widgetId: string;
-    widgetType: string;
-    id: string;
-}
-
-export interface TimeSettings {
-    startTime: number;
-    endTime: number;
-    dynamicSelection: 15 | 60 | 1440 | 10080 | 43800 | 525600 | -1;
-}
-
-export interface IDataViewDashboard {
-    name?: string;
-    description?: string;
-    displayHeader?: boolean;
-    widgets?: IDataViewDashboardItem[];
-    dashboardTimeSettings: TimeSettings;
-    _id?: string;
-    _rev?: string;
-}
-
 export interface IWidget {
     id: string;
     label: string;
diff --git a/ui/src/app/data-explorer/services/data-view-data-explorer.service.ts b/ui/src/app/data-explorer/services/data-view-data-explorer.service.ts
index 4c0a07b..e999496 100644
--- a/ui/src/app/data-explorer/services/data-view-data-explorer.service.ts
+++ b/ui/src/app/data-explorer/services/data-view-data-explorer.service.ts
@@ -23,17 +23,17 @@ import {map} from 'rxjs/operators';
 import {DatalakeRestService} from '../../core-services/datalake/datalake-rest.service';
 import {SharedDatalakeRestService} from '../../core-services/shared/shared-dashboard.service';
 import {AuthStatusService} from '../../services/auth-status.service';
-import {IDataViewDashboard} from '../models/dataview-dashboard.model';
 import {
   DataExplorerWidgetModel,
   DataLakeMeasure,
 } from "../../core-model/gen/streampipes-model";
+import {Dashboard} from "../../dashboard/models/dashboard.model";
 
 
 @Injectable()
 export class DataViewDataExplorerService {
 
-  localDashboards: IDataViewDashboard[] = [];
+  localDashboards: Dashboard[] = [];
 
   constructor(private http: HttpClient,
               private authStatusService: AuthStatusService,
@@ -48,19 +48,19 @@ export class DataViewDataExplorerService {
     }));
   }
 
-  getDataViews(): Observable<IDataViewDashboard[]> {
+  getDataViews(): Observable<Dashboard[]> {
     return this.sharedDatalakeRestService.getDashboards(this.dashboardUrl);
   }
 
-  updateDashboard(dashboard: IDataViewDashboard): Observable<IDataViewDashboard> {
+  updateDashboard(dashboard: Dashboard): Observable<Dashboard> {
     return this.sharedDatalakeRestService.updateDashboard(this.dashboardUrl, dashboard);
   }
 
-  deleteDashboard(dashboard: IDataViewDashboard): Observable<any> {
+  deleteDashboard(dashboard: Dashboard): Observable<any> {
     return this.sharedDatalakeRestService.deleteDashboard(this.dashboardUrl, dashboard);
   }
 
-  saveDataView(dataViewDashboard: IDataViewDashboard): Observable<any> {
+  saveDataView(dataViewDashboard: Dashboard): Observable<any> {
     return this.sharedDatalakeRestService.saveDashboard(this.dashboardUrl, dataViewDashboard);
   }