Skip to content
Snippets Groups Projects

Issue #74: Add topological sort to read unordered dimensions

Merged Issue #74: Add topological sort to read unordered dimensions
Merged Lucas Fernandes de Oliveira requested to merge issue/74 into develop
3 files
+ 155
0
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 30
0
@@ -26,6 +26,7 @@ import { RelationType } from "../common/types";
@@ -26,6 +26,7 @@ import { RelationType } from "../common/types";
import { Filter } from "../core/filter";
import { Filter } from "../core/filter";
import { Clause } from "../core/clause";
import { Clause } from "../core/clause";
import { Source, SourceOptions} from "../core/source";
import { Source, SourceOptions} from "../core/source";
 
import { Tsort, TsortDep } from "./tsort";
import * as fs from "fs";
import * as fs from "fs";
import * as yaml from "js-yaml";
import * as yaml from "js-yaml";
@@ -84,6 +85,10 @@ interface DimensionMap {
@@ -84,6 +85,10 @@ interface DimensionMap {
[key: string]: Dimension;
[key: string]: Dimension;
}
}
 
interface DimensionOptsMap {
 
[key: string]: DimensionStrOptions;
 
}
 
interface MetricMap {
interface MetricMap {
[key: string]: Metric;
[key: string]: Metric;
}
}
@@ -140,6 +145,7 @@ export class ConfigParser {
@@ -140,6 +145,7 @@ export class ConfigParser {
let dimMap: DimensionMap = {};
let dimMap: DimensionMap = {};
let enumMap: EnumTypeMap = {};
let enumMap: EnumTypeMap = {};
let sourcMap: SourceMap = {};
let sourcMap: SourceMap = {};
 
let dimOptsMap: DimensionOptsMap = {};
for (let i = 0; i < metricsOpts.length; ++i) {
for (let i = 0; i < metricsOpts.length; ++i) {
let met = new Metric(this.parseMetOpts(metricsOpts[i]));
let met = new Metric(this.parseMetOpts(metricsOpts[i]));
@@ -152,6 +158,30 @@ export class ConfigParser {
@@ -152,6 +158,30 @@ export class ConfigParser {
enumMap[enumT.name] = enumT;
enumMap[enumT.name] = enumT;
}
}
 
let toSort: TsortDep[] = [];
 
for (let i = 0; i < dimensionsOpts.length; ++i) {
 
if (dimensionsOpts[i].parent) {
 
toSort.push({
 
value: dimensionsOpts[i].name,
 
dependOf: dimensionsOpts[i].parent
 
});
 
}
 
 
else {
 
toSort.push({
 
value: dimensionsOpts[i].name
 
});
 
}
 
 
dimOptsMap[dimensionsOpts[i].name] = dimensionsOpts[i];
 
}
 
 
dimensionsOpts = Tsort.dependencies(toSort).filter((name) => {
 
return (dimOptsMap[name]) ? true : false;
 
}).map((name) => {
 
return dimOptsMap[name];
 
});
 
for (let i = 0; i < dimensionsOpts.length; ++i) {
for (let i = 0; i < dimensionsOpts.length; ++i) {
let dim = new Dimension(this.parseDimOpts(dimensionsOpts[i], parsed.dimensions));
let dim = new Dimension(this.parseDimOpts(dimensionsOpts[i], parsed.dimensions));
parsed.dimensions.push(dim);
parsed.dimensions.push(dim);
Loading