Support drawings on WS

This commit is contained in:
ziajka 2018-03-27 17:50:06 +02:00
parent ce6a727300
commit cc27c56216
8 changed files with 108 additions and 38 deletions

View File

@ -1,4 +1,4 @@
import {SVGSelection} from "./models/types";
import { SVGSelection } from "./models/types";
export interface Tool {
connect(selection: SVGSelection);

View File

@ -1,9 +1,11 @@
import {DrawingLine} from "../models/drawing-line";
import {SVGSelection} from "../models/types";
import {Point} from "../models/point";
import {line} from "d3-shape";
import {mouse} from "d3-selection";
import {Context} from "../models/context";
import { line } from "d3-shape";
import { mouse } from "d3-selection";
import { DrawingLine } from "../models/drawing-line";
import { SVGSelection } from "../models/types";
import { Point } from "../models/point";
import { Context } from "../models/context";
export class DrawingLineWidget {
private drawingLine: DrawingLine = new DrawingLine();

View File

@ -1,8 +1,9 @@
import {Widget} from "./widget";
import {SVGSelection} from "../models/types";
import { line } from "d3-shape";
import {Link} from "../models/link";
import { Widget } from "./widget";
import { SVGSelection } from "../models/types";
import { Link } from "../models/link";
export class EthernetLinkWidget implements Widget {

View File

@ -8,10 +8,10 @@ import { LinksWidget } from "./links.widget";
import { Drawing } from "../models/drawing";
import { DrawingsWidget } from "./drawings.widget";
import { DrawingLineWidget } from "./drawing-line.widget";
import {SelectionTool} from "../tools/selection-tool";
import {MovingTool} from "../tools/moving-tool";
import {LayersWidget} from "./layers.widget";
import {Layer} from "../models/layer";
import { SelectionTool } from "../tools/selection-tool";
import { MovingTool } from "../tools/moving-tool";
import { LayersWidget } from "./layers.widget";
import { Layer } from "../models/layer";
export class GraphLayout implements Widget {

View File

@ -1,10 +1,11 @@
import { event, select, Selection } from "d3-selection";
import { D3DragEvent, drag } from "d3-drag";
import { Widget } from "./widget";
import { Node } from "../models/node";
import { SVGSelection } from "../models/types";
import {event, select, Selection} from "d3-selection";
import {D3DragEvent, drag} from "d3-drag";
import {Symbol} from "../models/symbol";
import {Layer} from "../models/layer";
import { Symbol } from "../models/symbol";
import { Layer } from "../models/layer";
export class NodesWidget implements Widget {

View File

@ -1,8 +1,9 @@
import {Widget} from "./widget";
import {SVGSelection} from "../models/types";
import {Link} from "../models/link";
import { path } from "d3-path";
import { Widget } from "./widget";
import { SVGSelection } from "../models/types";
import { Link } from "../models/link";
export class SerialLinkWidget implements Widget {

View File

@ -1,11 +1,14 @@
import {ProjectWebServiceHandler, WebServiceMessage} from "./project-web-service-handler";
import {Subject} from "rxjs/Subject";
import {inject, TestBed} from "@angular/core/testing";
import {NodesDataSource} from "../../cartography/shared/datasources/nodes-datasource";
import {LinksDataSource} from "../../cartography/shared/datasources/links-datasource";
import {Node} from "../../cartography/shared/models/node";
import {Link} from "../../cartography/shared/models/link";
import { inject, TestBed } from "@angular/core/testing";
import { Subject } from "rxjs/Subject";
import { ProjectWebServiceHandler, WebServiceMessage } from "./project-web-service-handler";
import { NodesDataSource } from "../../cartography/shared/datasources/nodes-datasource";
import { LinksDataSource } from "../../cartography/shared/datasources/links-datasource";
import { DrawingsDataSource } from "../../cartography/shared/datasources/drawings-datasource";
import { Node } from "../../cartography/shared/models/node";
import { Link } from "../../cartography/shared/models/link";
import { Drawing } from "../../cartography/shared/models/drawing";
describe('ProjectWebServiceHandler', () => {
@ -13,7 +16,7 @@ describe('ProjectWebServiceHandler', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [ProjectWebServiceHandler, NodesDataSource, LinksDataSource]
providers: [ProjectWebServiceHandler, NodesDataSource, LinksDataSource, DrawingsDataSource]
});
ws = new Subject<WebServiceMessage>();
@ -120,4 +123,53 @@ describe('ProjectWebServiceHandler', () => {
expect(service).toBeTruthy();
expect(linksDataSource.remove).toHaveBeenCalledWith(message.event);
}));
it('drawing should be added', inject([ProjectWebServiceHandler, DrawingsDataSource],
(service: ProjectWebServiceHandler, drawingsDataSource: DrawingsDataSource) => {
spyOn(drawingsDataSource, 'add');
service.connect(ws);
const message = new WebServiceMessage();
message.action = "drawing.created";
message.event = new Drawing();
ws.next(message);
expect(service).toBeTruthy();
expect(drawingsDataSource.add).toHaveBeenCalledWith(message.event);
}));
it('drawing should be updated', inject([ProjectWebServiceHandler, DrawingsDataSource],
(service: ProjectWebServiceHandler, drawingsDataSource: DrawingsDataSource) => {
spyOn(drawingsDataSource, 'update');
service.connect(ws);
const message = new WebServiceMessage();
message.action = "drawing.updated";
message.event = new Drawing();
ws.next(message);
expect(service).toBeTruthy();
expect(drawingsDataSource.update).toHaveBeenCalledWith(message.event);
}));
it('drawing should be removed', inject([ProjectWebServiceHandler, DrawingsDataSource],
(service: ProjectWebServiceHandler, drawingsDataSource: DrawingsDataSource) => {
spyOn(drawingsDataSource, 'remove');
service.connect(ws);
const message = new WebServiceMessage();
message.action = "drawing.deleted";
message.event = new Drawing();
ws.next(message);
expect(service).toBeTruthy();
expect(drawingsDataSource.remove).toHaveBeenCalledWith(message.event);
}));
});

View File

@ -1,20 +1,24 @@
import {Injectable} from "@angular/core";
import {NodesDataSource} from "../../cartography/shared/datasources/nodes-datasource";
import {LinksDataSource} from "../../cartography/shared/datasources/links-datasource";
import {Subject} from "rxjs/Subject";
import {Link} from "../../cartography/shared/models/link";
import {Node} from "../../cartography/shared/models/node";
import { Injectable } from "@angular/core";
import { Subject } from "rxjs/Subject";
import { NodesDataSource } from "../../cartography/shared/datasources/nodes-datasource";
import { LinksDataSource } from "../../cartography/shared/datasources/links-datasource";
import { DrawingsDataSource } from "../../cartography/shared/datasources/drawings-datasource";
import { Link } from "../../cartography/shared/models/link";
import { Node } from "../../cartography/shared/models/node";
import { Drawing } from "../../cartography/shared/models/drawing";
export class WebServiceMessage {
action: string;
event: Node | Link;
event: Node | Link | Drawing;
}
@Injectable()
export class ProjectWebServiceHandler {
constructor(private nodesDataSource: NodesDataSource,
private linksDataSource: LinksDataSource) {}
private linksDataSource: LinksDataSource,
private drawingsDataSource: DrawingsDataSource) {}
public connect(ws: Subject<WebServiceMessage>) {
ws.subscribe((message: WebServiceMessage) => {
@ -36,6 +40,15 @@ export class ProjectWebServiceHandler {
if (message.action === 'link.deleted') {
this.linksDataSource.remove(message.event as Link);
}
if (message.action === 'drawing.created') {
this.drawingsDataSource.add(message.event as Drawing);
}
if (message.action === 'drawing.updated') {
this.drawingsDataSource.update(message.event as Drawing);
}
if (message.action === 'drawing.deleted') {
this.drawingsDataSource.remove(message.event as Drawing);
}
});
}
}