[CORD-814] Preparatory work to display service graph
Change-Id: I8e06cb92f017ce599258451800293b991540f72b
diff --git a/src/app/service-graph/services/graph.store.ts b/src/app/service-graph/services/graph.store.ts
new file mode 100644
index 0000000..e892b99
--- /dev/null
+++ b/src/app/service-graph/services/graph.store.ts
@@ -0,0 +1,81 @@
+import {Observable, BehaviorSubject} from 'rxjs';
+import {IXosModelStoreService} from '../../datasources/stores/model.store';
+import {IXosServiceGraph, IXosServiceModel, IXosTenantModel} from '../interfaces';
+import {IXosDebouncer} from '../../core/services/helpers/debounce.helper';
+export interface IXosServiceGraphStore {
+ get(): Observable<IXosServiceGraph>;
+}
+
+export class XosServiceGraphStore implements IXosServiceGraphStore {
+ static $inject = [
+ '$log',
+ 'XosModelStore',
+ 'XosDebouncer'
+ ];
+ private d3Graph = new BehaviorSubject({});
+
+ // storing locally reference to the data model
+ private services;
+ private tenants;
+
+ // debounced functions
+ private handleData;
+
+ // datastore
+ private ServiceObservable: Observable<any>;
+ private TenantObservable: Observable<any>;
+
+ constructor (
+ private $log: ng.ILogService,
+ private XosModelStore: IXosModelStoreService,
+ private XosDebouncer: IXosDebouncer
+ ) {
+
+ // we want to have a quiet period of 500ms from the last event before doing anything
+ this.handleData = this.XosDebouncer.debounce(this._handleData, 500, false);
+
+ this.ServiceObservable = this.XosModelStore.query('Service', '/core/services');
+ this.TenantObservable = this.XosModelStore.query('Service', '/core/tenants');
+
+ this.ServiceObservable
+ .subscribe(
+ (res) => {
+ this.combineData(res, 'services');
+ },
+ (err) => {
+ this.$log.error(err);
+ }
+ );
+
+ this.ServiceObservable
+ .subscribe(
+ (res) => {
+ this.combineData(res, 'tenants');
+ },
+ (err) => {
+ this.$log.error(err);
+ }
+ );
+ }
+
+ public get() {
+ return this.d3Graph.asObservable();
+ }
+
+ private combineData(data: any, type: 'services'|'tenants') {
+ switch (type) {
+ case 'services':
+ this.services = data;
+ break;
+ case 'tenants':
+ this.tenants = data;
+ break;
+ }
+ this.handleData(this.services, this.tenants);
+ }
+
+ private _handleData(services: IXosServiceModel[], tenants: IXosTenantModel[]) {
+ this.$log.log(`XosServiceGraphStore`, services, tenants);
+ }
+
+}