[CORD-1043] Registering reducers on the graph
Change-Id: I5804025f25733b5b5da1fd95725db3467a65abef
diff --git a/src/app/service-graph/services/graph.store.ts b/src/app/service-graph/services/graph.store.ts
index 1bb5d4c..54bc083 100644
--- a/src/app/service-graph/services/graph.store.ts
+++ b/src/app/service-graph/services/graph.store.ts
@@ -6,6 +6,7 @@
IXosServiceGraphNode, IXosServiceGraphLink, IXosFineGrainedGraphData
} from '../interfaces';
import {IXosDebouncer} from '../../core/services/helpers/debounce.helper';
+import {IXosServiceGraphExtender, IXosServiceGraphReducer} from './graph.extender';
export interface IXosServiceGraphStore {
get(): Observable<IXosServiceGraph>;
getCoarse(): Observable<IXosServiceGraph>;
@@ -15,7 +16,8 @@
static $inject = [
'$log',
'XosModelStore',
- 'XosDebouncer'
+ 'XosDebouncer',
+ 'XosServiceGraphExtender'
];
// graph data store
@@ -48,7 +50,8 @@
constructor (
private $log: ng.ILogService,
private XosModelStore: IXosModelStoreService,
- private XosDebouncer: IXosDebouncer
+ private XosDebouncer: IXosDebouncer,
+ private XosServiceGraphExtender: IXosServiceGraphExtender
) {
this.$log.info(`[XosServiceGraphStore] Setup`);
@@ -199,92 +202,112 @@
private graphDataToCoarseGraph(data: IXosCoarseGraphData) {
- const links: IXosServiceGraphLink[] = _.chain(data.tenants)
- .filter((t: IXosTenantModel) => t.kind === 'coarse')
- .map((t: IXosTenantModel) => {
+ try {
+ const links: IXosServiceGraphLink[] = _.chain(data.tenants)
+ .filter((t: IXosTenantModel) => t.kind === 'coarse')
+ .map((t: IXosTenantModel) => {
+ return {
+ id: t.id,
+ source: this.getNodeIndexById(t.provider_service_id, data.services),
+ target: this.getNodeIndexById(t.subscriber_service_id, data.services),
+ model: t
+ };
+ })
+ .value();
+
+ const nodes: IXosServiceGraphNode[] = _.map(data.services, (s: IXosServiceModel) => {
return {
- id: t.id,
- source: this.getNodeIndexById(t.provider_service_id, data.services),
- target: this.getNodeIndexById(t.subscriber_service_id, data.services),
- model: t
+ id: s.id,
+ label: s.name,
+ model: s
};
- })
- .value();
+ });
- const nodes: IXosServiceGraphNode[] = _.map(data.services, (s: IXosServiceModel) => {
- return {
- id: s.id,
- label: s.name,
- model: s
+ let graph: IXosServiceGraph = {
+ nodes,
+ links
};
- });
- this.d3CoarseGraph.next({
- nodes: nodes,
- links: links
- });
+ _.forEach(this.XosServiceGraphExtender.getCoarse(), (r: IXosServiceGraphReducer) => {
+ graph = r.reducer(graph);
+ });
+
+ this.d3CoarseGraph.next(graph);
+ } catch (e) {
+ this.d3CoarseGraph.error(e);
+ }
}
private graphDataToFineGrainedGraph(data: IXosFineGrainedGraphData) {
- data = this.removeUnwantedFineGrainedData(data);
+ try {
+ data = this.removeUnwantedFineGrainedData(data);
- let nodes = _.reduce(Object.keys(data), (list: any[], k: string) => {
- return list.concat(data[k]);
- }, []);
+ let nodes = _.reduce(Object.keys(data), (list: any[], k: string) => {
+ return list.concat(data[k]);
+ }, []);
- nodes = _.chain(nodes)
- .map(n => {
- n.d3Id = this.d3Id(this.getNodeType(n), n.id);
- return n;
- })
- .map(n => {
- let node: IXosServiceGraphNode = {
- id: n.d3Id,
- label: this.getNodeLabel(n),
- model: n,
- type: this.getNodeType(n)
+ nodes = _.chain(nodes)
+ .map(n => {
+ n.d3Id = this.d3Id(this.getNodeType(n), n.id);
+ return n;
+ })
+ .map(n => {
+ let node: IXosServiceGraphNode = {
+ id: n.d3Id,
+ label: this.getNodeLabel(n),
+ model: n,
+ type: this.getNodeType(n)
+ };
+ return node;
+ })
+ .value();
+
+ const links = _.reduce(data.tenants, (links: IXosServiceGraphLink[], tenant: IXosTenantModel) => {
+ const sourceId = this.getSourceId(tenant);
+ const targetId = this.getTargetId(tenant);
+
+ if (!angular.isDefined(targetId)) {
+ // if the tenant is not pointing to anything, don't draw links
+ return links;
+ }
+
+ const tenantToProvider = {
+ id: `${sourceId}_${tenant.d3Id}`,
+ source: this.getNodeIndexById(sourceId, nodes),
+ target: this.getNodeIndexById(tenant.d3Id, nodes),
+ model: tenant
};
- return node;
- })
- .value();
- const links = _.reduce(data.tenants, (links: IXosServiceGraphLink[], tenant: IXosTenantModel) => {
- const sourceId = this.getSourceId(tenant);
- const targetId = this.getTargetId(tenant);
+ const tenantToSubscriber = {
+ id: `${tenant.d3Id}_${targetId}`,
+ source: this.getNodeIndexById(tenant.d3Id, nodes),
+ target: this.getNodeIndexById(targetId, nodes),
+ model: tenant
+ };
- if (!angular.isDefined(targetId)) {
- // if the tenant is not pointing to anything, don't draw links
+ links.push(tenantToProvider);
+ links.push(tenantToSubscriber);
return links;
+ }, []);
+
+ if (nodes.length === 0 || links.length === 0) {
+ return;
}
- const tenantToProvider = {
- id: `${sourceId}_${tenant.d3Id}`,
- source: this.getNodeIndexById(sourceId, nodes),
- target: this.getNodeIndexById(tenant.d3Id, nodes),
- model: tenant
+ let graph: IXosServiceGraph = {
+ nodes,
+ links
};
- const tenantToSubscriber = {
- id: `${tenant.d3Id}_${targetId}`,
- source: this.getNodeIndexById(tenant.d3Id, nodes),
- target: this.getNodeIndexById(targetId, nodes),
- model: tenant
- };
+ _.forEach(this.XosServiceGraphExtender.getFinegrained(), (r: IXosServiceGraphReducer) => {
+ graph = r.reducer(graph);
+ });
- links.push(tenantToProvider);
- links.push(tenantToSubscriber);
- return links;
- }, []);
-
- if (nodes.length === 0 || links.length === 0) {
- return;
+ this.d3FineGrainedGraph.next(graph);
+ } catch (e) {
+ this.d3FineGrainedGraph.error(e);
}
-
- this.d3FineGrainedGraph.next({
- nodes: nodes,
- links: links
- });
}
}