mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-05-02 08:42:50 +00:00
Support drawings on WS
This commit is contained in:
parent
ce6a727300
commit
cc27c56216
@ -1,4 +1,4 @@
|
|||||||
import {SVGSelection} from "./models/types";
|
import { SVGSelection } from "./models/types";
|
||||||
|
|
||||||
export interface Tool {
|
export interface Tool {
|
||||||
connect(selection: SVGSelection);
|
connect(selection: SVGSelection);
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import {DrawingLine} from "../models/drawing-line";
|
import { line } from "d3-shape";
|
||||||
import {SVGSelection} from "../models/types";
|
import { mouse } from "d3-selection";
|
||||||
import {Point} from "../models/point";
|
|
||||||
import {line} from "d3-shape";
|
import { DrawingLine } from "../models/drawing-line";
|
||||||
import {mouse} from "d3-selection";
|
import { SVGSelection } from "../models/types";
|
||||||
import {Context} from "../models/context";
|
import { Point } from "../models/point";
|
||||||
|
import { Context } from "../models/context";
|
||||||
|
|
||||||
|
|
||||||
export class DrawingLineWidget {
|
export class DrawingLineWidget {
|
||||||
private drawingLine: DrawingLine = new DrawingLine();
|
private drawingLine: DrawingLine = new DrawingLine();
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import {Widget} from "./widget";
|
|
||||||
import {SVGSelection} from "../models/types";
|
|
||||||
|
|
||||||
import { line } from "d3-shape";
|
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 {
|
export class EthernetLinkWidget implements Widget {
|
||||||
|
|
||||||
|
@ -8,10 +8,10 @@ import { LinksWidget } from "./links.widget";
|
|||||||
import { Drawing } from "../models/drawing";
|
import { Drawing } from "../models/drawing";
|
||||||
import { DrawingsWidget } from "./drawings.widget";
|
import { DrawingsWidget } from "./drawings.widget";
|
||||||
import { DrawingLineWidget } from "./drawing-line.widget";
|
import { DrawingLineWidget } from "./drawing-line.widget";
|
||||||
import {SelectionTool} from "../tools/selection-tool";
|
import { SelectionTool } from "../tools/selection-tool";
|
||||||
import {MovingTool} from "../tools/moving-tool";
|
import { MovingTool } from "../tools/moving-tool";
|
||||||
import {LayersWidget} from "./layers.widget";
|
import { LayersWidget } from "./layers.widget";
|
||||||
import {Layer} from "../models/layer";
|
import { Layer } from "../models/layer";
|
||||||
|
|
||||||
|
|
||||||
export class GraphLayout implements Widget {
|
export class GraphLayout implements Widget {
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
|
import { event, select, Selection } from "d3-selection";
|
||||||
|
import { D3DragEvent, drag } from "d3-drag";
|
||||||
|
|
||||||
import { Widget } from "./widget";
|
import { Widget } from "./widget";
|
||||||
import { Node } from "../models/node";
|
import { Node } from "../models/node";
|
||||||
import { SVGSelection } from "../models/types";
|
import { SVGSelection } from "../models/types";
|
||||||
import {event, select, Selection} from "d3-selection";
|
import { Symbol } from "../models/symbol";
|
||||||
import {D3DragEvent, drag} from "d3-drag";
|
import { Layer } from "../models/layer";
|
||||||
import {Symbol} from "../models/symbol";
|
|
||||||
import {Layer} from "../models/layer";
|
|
||||||
|
|
||||||
|
|
||||||
export class NodesWidget implements Widget {
|
export class NodesWidget implements Widget {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import {Widget} from "./widget";
|
|
||||||
import {SVGSelection} from "../models/types";
|
|
||||||
import {Link} from "../models/link";
|
|
||||||
import { path } from "d3-path";
|
import { path } from "d3-path";
|
||||||
|
|
||||||
|
import { Widget } from "./widget";
|
||||||
|
import { SVGSelection } from "../models/types";
|
||||||
|
import { Link } from "../models/link";
|
||||||
|
|
||||||
|
|
||||||
export class SerialLinkWidget implements Widget {
|
export class SerialLinkWidget implements Widget {
|
||||||
|
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import {ProjectWebServiceHandler, WebServiceMessage} from "./project-web-service-handler";
|
import { inject, TestBed } from "@angular/core/testing";
|
||||||
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 { 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', () => {
|
describe('ProjectWebServiceHandler', () => {
|
||||||
@ -13,7 +16,7 @@ describe('ProjectWebServiceHandler', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
providers: [ProjectWebServiceHandler, NodesDataSource, LinksDataSource]
|
providers: [ProjectWebServiceHandler, NodesDataSource, LinksDataSource, DrawingsDataSource]
|
||||||
});
|
});
|
||||||
|
|
||||||
ws = new Subject<WebServiceMessage>();
|
ws = new Subject<WebServiceMessage>();
|
||||||
@ -120,4 +123,53 @@ describe('ProjectWebServiceHandler', () => {
|
|||||||
expect(service).toBeTruthy();
|
expect(service).toBeTruthy();
|
||||||
expect(linksDataSource.remove).toHaveBeenCalledWith(message.event);
|
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);
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
import {Injectable} from "@angular/core";
|
import { Injectable } from "@angular/core";
|
||||||
import {NodesDataSource} from "../../cartography/shared/datasources/nodes-datasource";
|
import { Subject } from "rxjs/Subject";
|
||||||
import {LinksDataSource} from "../../cartography/shared/datasources/links-datasource";
|
|
||||||
import {Subject} from "rxjs/Subject";
|
import { NodesDataSource } from "../../cartography/shared/datasources/nodes-datasource";
|
||||||
import {Link} from "../../cartography/shared/models/link";
|
import { LinksDataSource } from "../../cartography/shared/datasources/links-datasource";
|
||||||
import {Node} from "../../cartography/shared/models/node";
|
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 {
|
export class WebServiceMessage {
|
||||||
action: string;
|
action: string;
|
||||||
event: Node | Link;
|
event: Node | Link | Drawing;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ProjectWebServiceHandler {
|
export class ProjectWebServiceHandler {
|
||||||
constructor(private nodesDataSource: NodesDataSource,
|
constructor(private nodesDataSource: NodesDataSource,
|
||||||
private linksDataSource: LinksDataSource) {}
|
private linksDataSource: LinksDataSource,
|
||||||
|
private drawingsDataSource: DrawingsDataSource) {}
|
||||||
|
|
||||||
public connect(ws: Subject<WebServiceMessage>) {
|
public connect(ws: Subject<WebServiceMessage>) {
|
||||||
ws.subscribe((message: WebServiceMessage) => {
|
ws.subscribe((message: WebServiceMessage) => {
|
||||||
@ -36,6 +40,15 @@ export class ProjectWebServiceHandler {
|
|||||||
if (message.action === 'link.deleted') {
|
if (message.action === 'link.deleted') {
|
||||||
this.linksDataSource.remove(message.event as Link);
|
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);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user