@@ -36,44 +36,58 @@ export class ViewGraph {
3636 this . datagraph . getDevices ( ) . forEach ( ( graphNode , deviceId ) => {
3737 if ( layerIncluded ( layerFromType ( graphNode . type ) , this . layer ) ) {
3838 const deviceInfo = { id : deviceId , node : graphNode } ;
39- this . addDevice ( deviceInfo ) ;
40-
41- this . layer_dfs (
42- this . datagraph . getDevices ( ) ,
43- deviceId ,
44- deviceId ,
45- new Set ( [ deviceId ] ) ,
46- connections ,
47- ) ;
39+ this . createDevice ( deviceInfo ) ;
40+
41+ this . computeLayerConnections ( deviceId , connections ) ;
4842 }
4943 } ) ;
5044
51- connections . forEach ( ( key ) => {
52- const connection = parseConnectionKey ( key ) ;
53- const device1 = this . getDevice ( connection . id1 ) ;
54- const device2 = this . getDevice ( connection . id2 ) ;
55- this . drawEdge ( device1 , device2 ) ;
56- device1 . addConnection ( device2 . id ) ;
57- device2 . addConnection ( device1 . id ) ;
58- } ) ;
45+ this . addConnections ( connections ) ;
5946 console . log ( "Finished constructing ViewGraph" ) ;
6047 }
6148
49+ addDevice ( deviceData : CreateDevice ) {
50+ const device = this . createDevice ( deviceData ) ;
51+ if ( deviceData . node . connections . size !== 0 ) {
52+ const connections = new Set < string > ( ) ;
53+ this . computeLayerConnections ( deviceData . id , connections ) ;
54+
55+ this . addConnections ( connections ) ;
56+ }
57+ return device ;
58+ }
59+
6260 // Add a device to the graph
63- addDevice ( deviceData : CreateDevice ) : Device {
64- if ( ! this . devices . has ( deviceData . id ) ) {
65- const device = createDevice ( deviceData , this ) ;
66- this . devices . set ( device . id , device ) ;
67- this . viewport . addChild ( device ) ;
68- console . log ( `Device added with ID ${ device . id } ` ) ;
69- } else {
61+ private createDevice ( deviceData : CreateDevice ) : Device {
62+ if ( this . devices . has ( deviceData . id ) ) {
7063 console . warn (
7164 `Device with ID ${ deviceData . id } already exists in the graph.` ,
7265 ) ;
66+ return this . devices . get ( deviceData . id ) ;
7367 }
68+ const device = createDevice ( deviceData , this ) ;
69+
70+ this . devices . set ( device . id , device ) ;
71+ this . viewport . addChild ( device ) ;
72+ console . log ( `Device added with ID ${ device . id } ` ) ;
7473 return this . devices . get ( deviceData . id ) ;
7574 }
7675
76+ private addConnections ( connections : Set < string > ) {
77+ connections . forEach ( ( key ) => {
78+ const connection = parseConnectionKey ( key ) ;
79+ const device1 = this . getDevice ( connection . id1 ) ;
80+ const device2 = this . getDevice ( connection . id2 ) ;
81+ if ( ! ( device1 && device2 ) ) {
82+ console . warn ( "At least one device in connection does not exist" ) ;
83+ return ;
84+ }
85+ this . drawEdge ( device1 , device2 ) ;
86+ device1 . addConnection ( device2 . id ) ;
87+ device2 . addConnection ( device1 . id ) ;
88+ } ) ;
89+ }
90+
7791 drawEdge ( device1 : Device , device2 : Device ) : Edge {
7892 const connectedNodes : EdgeEdges = { n1 : device1 . id , n2 : device2 . id } ;
7993 const id = Edge . generateConnectionKey ( connectedNodes ) ;
@@ -333,6 +347,16 @@ export class ViewGraph {
333347 return path . reverse ( ) ;
334348 }
335349
350+ private computeLayerConnections ( source : DeviceId , connections : Set < string > ) {
351+ this . layer_dfs (
352+ this . datagraph . getDevices ( ) ,
353+ source ,
354+ source ,
355+ new Set ( [ source ] ) ,
356+ connections ,
357+ ) ;
358+ }
359+
336360 private layer_dfs (
337361 graph : Map < DeviceId , GraphNode > ,
338362 s : DeviceId , // source node
0 commit comments