aboutsummaryrefslogtreecommitdiff
path: root/src/client/northstar/core
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-04-05 01:41:22 -0400
committerTyler Schicke <tyler_schicke@brown.edu>2019-04-05 01:41:22 -0400
commit0fb53a4b5fb430e67ef4af2323c886e77985ca52 (patch)
treeca2826992a817d9944ab0163717c7644b1216d69 /src/client/northstar/core
parent8faacc6b8da0082823ec92cb1c862b6373596264 (diff)
parent4fde212cd00bd2f8fc2fa122309af3bb71bba2fd (diff)
Merge branch 'master' of github-tsch-brown:browngraphicslab/Dash-Web
Diffstat (limited to 'src/client/northstar/core')
-rw-r--r--src/client/northstar/core/brusher/BrushLinkModel.ts40
-rw-r--r--src/client/northstar/core/brusher/IBaseBrushable.ts4
-rw-r--r--src/client/northstar/core/filter/FilterModel.ts91
-rw-r--r--src/client/northstar/core/filter/IBaseFilterConsumer.ts2
4 files changed, 51 insertions, 86 deletions
diff --git a/src/client/northstar/core/brusher/BrushLinkModel.ts b/src/client/northstar/core/brusher/BrushLinkModel.ts
deleted file mode 100644
index e3ac43367..000000000
--- a/src/client/northstar/core/brusher/BrushLinkModel.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { IBaseBrushable } from '../brusher/IBaseBrushable'
-import { IBaseBrusher } from '../brusher/IBaseBrusher'
-import { Utils } from '../../utils/Utils'
-import { IEquatable } from '../../utils/IEquatable';
-
-export class BrushLinkModel<T> implements IEquatable {
-
- public From: IBaseBrusher<T>;
-
- public To: IBaseBrushable<T>;
-
- public Color: number = 0;
-
- constructor(from: IBaseBrusher<T>, to: IBaseBrushable<T>) {
- this.From = from;
- this.To = to;
- }
-
- public static overlaps(start: number, end: number, otherstart: number, otherend: number): boolean {
- if (start > otherend || otherstart > end)
- return false;
- return true;
- }
- public static Connected<T>(from: IBaseBrusher<T>, to: IBaseBrushable<T>): boolean {
- var connected = (Math.abs(from.Position.x + from.Size.x - to.Position.x) <= 60 &&
- this.overlaps(from.Position.y, from.Position.y + from.Size.y, to.Position.y, to.Position.y + to.Size.y)
- ) ||
- (Math.abs(to.Position.x + to.Size.x - from.Position.x) <= 60 &&
- this.overlaps(to.Position.y, to.Position.y + to.Size.y, from.Position.y, from.Position.y + from.Size.y)
- );
- return connected;
- }
-
- public Equals(other: Object): boolean {
- if (!Utils.EqualityHelper(this, other)) return false;
- if (!this.From.Equals((other as BrushLinkModel<T>).From)) return false;
- if (!this.To.Equals((other as BrushLinkModel<T>).To)) return false;
- return true;
- }
-} \ No newline at end of file
diff --git a/src/client/northstar/core/brusher/IBaseBrushable.ts b/src/client/northstar/core/brusher/IBaseBrushable.ts
index 07d4e7580..99a36636f 100644
--- a/src/client/northstar/core/brusher/IBaseBrushable.ts
+++ b/src/client/northstar/core/brusher/IBaseBrushable.ts
@@ -1,9 +1,9 @@
-import { BrushLinkModel } from '../brusher/BrushLinkModel'
import { PIXIPoint } from '../../utils/MathUtil'
import { IEquatable } from '../../utils/IEquatable';
+import { Document } from '../../../../fields/Document'
export interface IBaseBrushable<T> extends IEquatable {
- BrusherModels: Array<BrushLinkModel<T>>;
+ BrusherModels: Array<Document>;
BrushColors: Array<number>;
Position: PIXIPoint;
Size: PIXIPoint;
diff --git a/src/client/northstar/core/filter/FilterModel.ts b/src/client/northstar/core/filter/FilterModel.ts
index 3c4cfc4a7..aee99d2b6 100644
--- a/src/client/northstar/core/filter/FilterModel.ts
+++ b/src/client/northstar/core/filter/FilterModel.ts
@@ -1,5 +1,11 @@
import { ValueComparison } from "./ValueComparision";
import { Utils } from "../../utils/Utils";
+import { IBaseFilterProvider } from "./IBaseFilterProvider";
+import { FilterOperand } from "./FilterOperand";
+import { KeyStore } from "../../../../fields/KeyStore";
+import { FieldWaiting } from "../../../../fields/Field";
+import { Document } from "../../../../fields/Document";
+import { HistogramField } from "../../dash-fields/HistogramField";
export class FilterModel {
public ValueComparisons: ValueComparison[];
@@ -27,55 +33,52 @@ export class FilterModel {
}
public ToPythonString(): string {
- let ret = "(" + this.ValueComparisons.map(vc => vc.ToPythonString()).join("&&") + ")";
- return ret;
+ return "(" + this.ValueComparisons.map(vc => vc.ToPythonString()).join("&&") + ")";
}
public static And(filters: string[]): string {
let ret = filters.filter(f => f !== "").join(" && ");
return ret;
}
+ public static GetFilterModelsRecursive(baseOperation: IBaseFilterProvider, visitedFilterProviders: Set<IBaseFilterProvider>, filterModels: FilterModel[], isFirst: boolean): string {
+ let ret = "";
+ visitedFilterProviders.add(baseOperation);
+ let filtered = baseOperation.FilterModels.filter(fm => fm && fm.ValueComparisons.length > 0);
+ if (!isFirst && filtered.length > 0) {
+ filterModels.push(...filtered);
+ ret = "(" + baseOperation.FilterModels.filter(fm => fm != null).map(fm => fm.ToPythonString()).join(" || ") + ")";
+ }
+ if (Utils.isBaseFilterConsumer(baseOperation) && baseOperation.Links) {
+ let children = new Array<string>();
+ let linkedGraphNodes = baseOperation.Links;
+ linkedGraphNodes.map(linkVm => {
+ let filterDoc = linkVm.Get(KeyStore.LinkedFromDocs);
+ if (filterDoc && filterDoc != FieldWaiting && filterDoc instanceof Document) {
+ let filterHistogram = filterDoc.GetT(KeyStore.Data, HistogramField);
+ if (filterHistogram && filterHistogram != FieldWaiting) {
+ if (!visitedFilterProviders.has(filterHistogram.Data)) {
+ let child = FilterModel.GetFilterModelsRecursive(filterHistogram.Data, visitedFilterProviders, filterModels, false);
+ if (child !== "") {
+ // if (linkVm.IsInverted) {
+ // child = "! " + child;
+ // }
+ children.push(child);
+ }
+ }
+ }
+ }
+ });
- // public static GetFilterModelsRecursive(filterGraphNode: GraphNode<BaseOperationViewModel, FilterLinkViewModel>,
- // visitedFilterProviders: Set<GraphNode<BaseOperationViewModel, FilterLinkViewModel>>, filterModels: FilterModel[], isFirst: boolean): string {
- // let ret = "";
- // if (Utils.isBaseFilterProvider(filterGraphNode.Data)) {
- // visitedFilterProviders.add(filterGraphNode);
- // let filtered = filterGraphNode.Data.FilterModels.filter(fm => fm && fm.ValueComparisons.length > 0);
- // if (!isFirst && filtered.length > 0) {
- // filterModels.push(...filtered);
- // ret = "(" + filterGraphNode.Data.FilterModels.filter(fm => fm != null).map(fm => fm.ToPythonString()).join(" || ") + ")";
- // }
- // }
- // if (Utils.isBaseFilterConsumer(filterGraphNode.Data) && filterGraphNode.Links != null) {
- // let children = new Array<string>();
- // let linkedGraphNodes = filterGraphNode.Links.get(LinkType.Filter);
- // if (linkedGraphNodes != null) {
- // for (let i = 0; i < linkedGraphNodes.length; i++) {
- // let linkVm = linkedGraphNodes[i].Data;
- // let linkedGraphNode = linkedGraphNodes[i].Target;
- // if (!visitedFilterProviders.has(linkedGraphNode)) {
- // let child = FilterModel.GetFilterModelsRecursive(linkedGraphNode, visitedFilterProviders, filterModels, false);
- // if (child !== "") {
- // if (linkVm.IsInverted) {
- // child = "! " + child;
- // }
- // children.push(child);
- // }
- // }
- // }
- // }
-
- // let childrenJoined = children.join(filterGraphNode.Data.FilterOperand === FilterOperand.AND ? " && " : " || ");
- // if (children.length > 0) {
- // if (ret !== "") {
- // ret = "(" + ret + " && (" + childrenJoined + "))";
- // }
- // else {
- // ret = "(" + childrenJoined + ")";
- // }
- // }
- // }
- // return ret;
- // }
+ let childrenJoined = children.join(baseOperation.FilterOperand === FilterOperand.AND ? " && " : " || ");
+ if (children.length > 0) {
+ if (ret !== "") {
+ ret = "(" + ret + " && (" + childrenJoined + "))";
+ }
+ else {
+ ret = "(" + childrenJoined + ")";
+ }
+ }
+ }
+ return ret;
+ }
} \ No newline at end of file
diff --git a/src/client/northstar/core/filter/IBaseFilterConsumer.ts b/src/client/northstar/core/filter/IBaseFilterConsumer.ts
index e687acb8a..93f66a154 100644
--- a/src/client/northstar/core/filter/IBaseFilterConsumer.ts
+++ b/src/client/northstar/core/filter/IBaseFilterConsumer.ts
@@ -1,8 +1,10 @@
import { FilterOperand } from '../filter/FilterOperand'
import { IEquatable } from '../../utils/IEquatable'
+import { Document } from "../../../../fields/Document";
export interface IBaseFilterConsumer extends IEquatable {
FilterOperand: FilterOperand;
+ Links: Document[];
}
export function instanceOfIBaseFilterConsumer(object: any): object is IBaseFilterConsumer {