package Ġfeature a . mod bus . editor Ċ Ċ import Ġfeature a . content . Resource Tag Ċ import Ġfeature a . desktop . j fx . is Editing Ċ import Ġfeature a . desktop . j fx . onChange Ċ import Ġfeature a . desktop . j fx . to ImageView Ċ import Ġfeature a . desktop . j fx . update Tree Items Ċ import Ġfeature a . jvm . normalized Path Ċ import Ġfeature a . mod bus . config . Channel Specifier Ċ import Ġfeature a . mod bus . config . channel Specifier Ċ import Ġfeature a . r ml . deep Copy Ċ import Ġfeature a . r ml . read R ml Resource Ċ import Ġfeature a . runtime .* Ċ import Ġfeature a . studio . editor . Editor Ċ import Ġfeature a . studio . editor . components .* Ċ import Ġfeature a . studio . home . components . Defaults Service Ċ import Ġfeature a . text . Text Content Ċ import Ġjavafx . scene . image . ImageView Ċ import Ġjava . io . File Ċ import Ġjava . lang . Integer . min Ċ Ċ class ĠMod bus Document ( override Ġval Ġmodule : ĠModule ) Ġ: ĠComponent Ġ{ ĊĊĠĠĠ Ġval Ġdefaults Service : ĠDefaults Service Ġ= Ġimport () ĊĠĠĠ Ġval Ġeditor : ĠEditor Ġ= Ġimport () ĊĠĠĠ Ġval Ġeditor Tab : ĠEditor Tab Ġ= Ġimport () ĊĠĠĠ Ġval Ġpanel : ĠMod bus Document Panel Ġ= Ġimport () ĊĠĠĠ Ġval Ġr ml TableView : ĠR ml TableView Ġ= Ġimport () ĊĠĠĠ Ġval Ġr ml TreeView : ĠR ml TreeView Ġ= Ġimport () ĊĠĠĠ Ġval Ġtext Content : ĠText Content Ġ= Ġimport () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor Tab . is Dirty Property . watch Ġ{ Ġupdate TreeItem Icons () Ġ} ĊĠĠĠĠĠĠĠ Ġr ml TreeView . root Property (). onChange Ġ{ Ġupdate TreeItem Icons () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġinit File ( r ml File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġr ml Content . remove ( r ml File . normalized Path ) Ġ// Ġjust Ġfor Ġtry Ġtodo Ġuncomment ĊĠĠĠĠĠĠĠ Ġtext Content . remove Cached Text ( r ml File . normalized Path ) ĊĠĠĠĠĠĠĠ Ġeditor . project . r ml File Ġ= Ġr ml File ĊĠĠĠĠĠĠĠ Ġeditor . project . r ml Resource Ġ= Ġread R ml Resource ( r ml File . normalized Path ) ĊĠĠĠĠĠĠĠ Ġeditor . tab . r ml Resource Ġ= Ġread R ml Resource ("${ r ml File . normalized Path } :/ config ") ĊĠĠĠĠĠĠĠ Ġ// Ġr ml TreeView . select ( r ml TreeView . root . value ) Ġ// Ġquick fix Ġtodo Ġimprove ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Directory () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected R ml Tag Ġ= Ġeditor . r ml TreeView . selected R ml Tag UI Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġ( if Ġ( selected R ml Tag . name Ġ== Ġ" Channel ") Ġselected R ml Tag . parent Ġelse Ġselected R ml Tag ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġdefaults Service . create Default R ml Tag (" Directory ", Ġparent ) ĊĠĠĠĠĠĠĠ Ġparent . children . add ( directory ) ĊĠĠĠĠĠĠĠ Ġeditor Tab . is Dirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġr ml TreeView . update R ml Tag () ĊĠĠĠĠĠĠĠ Ġr ml TreeView . select ( directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected R ml Tag Ġ= Ġeditor . r ml TreeView . selected R ml Tag UI Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġdefaults Service . create Default R ml Tag (" Connection ", Ġselected R ml Tag ) ĊĠĠĠĠĠĠĠ Ġselected R ml Tag . children . add ( connection ) ĊĠĠĠĠĠĠĠ Ġeditor Tab . is Dirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġr ml TreeView . update R ml Tag () ĊĠĠĠĠĠĠĠ Ġr ml TreeView . select ( connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Physical Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Channel Ġ{ Ġparent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefaults Service . create Default R ml Tag (" Channel ", Ġparent ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" is Local "] Ġ= Ġ" false " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" address "] Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" region "] Ġ= Ġ" Hold ings " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" type "] Ġ= Ġ" UInt 1 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" update Interval "] Ġ= Ġ" 1 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Virtual Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Channel Ġ{ Ġparent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefaults Service . create Default R ml Tag (" Channel ", Ġparent ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" is Local "] Ġ= Ġ" false " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" type "] Ġ= Ġ" UInt 1 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Local Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Channel Ġ{ Ġparent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefaults Service . create Default R ml Tag (" Channel ", Ġparent ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" is Local "] Ġ= Ġ" true " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes [" type "] Ġ= Ġ" UInt 1 6 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Channel ( create Channel : Ġ( parent : ĠResource Tag ) Ġ-> ĠResource Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected R ml Tag Ġ= Ġeditor . r ml TreeView . selected R ml Tag UI Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġ( if Ġ( selected R ml Tag . name Ġ== Ġ" Channel ") Ġselected R ml Tag . parent Ġelse Ġselected R ml Tag ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġchannel R ml Tag Ġ= Ġcreate Channel ( parent ) ĊĠĠĠĠĠĠĠ Ġparent . children . add ( channel R ml Tag ) ĊĠĠĠĠĠĠĠ Ġeditor Tab . is Dirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġr ml TreeView . update R ml Tag () ĊĠĠĠĠĠĠĠ Ġr ml TreeView . select ( channel R ml Tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected R ml Tag Ġ= Ġeditor . r ml TreeView . selected R ml Tag UI Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġselected R ml Tag . parent Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġchannel R ml Tag Ġ= Ġselected R ml Tag . deep Copy ( parent ) ĊĠĠĠĠĠĠĠ Ġparent . children . add ( channel R ml Tag ) ĊĠĠĠĠĠĠĠ Ġeditor Tab . is Dirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġr ml TreeView . update R ml Tag () ĊĠĠĠĠĠĠĠ Ġr ml TreeView . select ( channel R ml Tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Selected () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( r ml TableView . is Editing ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove Selected R ml Tag ( selected R ml Tag : ĠResource Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġselected R ml Tag . parent Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġparent . children . indexOf ( selected R ml Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . children . remove ( selected R ml Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Tab . is Dirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr ml TreeView . update R ml Tag () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent . children . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ml TreeView . select ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Child Ġ= Ġparent . children [ min ( index , Ġparent . children . size Ġ- Ġ 1 )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ml TreeView . select ( next Child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( selected R ml Tag Ġin Ġr ml TreeView . selected R ml Tags UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Selected R ml Tag ( selected R ml Tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor Tab . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate TreeItem Icons () Ġ{ ĊĠĠĠĠĠĠĠ Ġr ml TreeView . update Tree Items Ġ{ Ġtree Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr ml Tag Ġ= Ġtree Item . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r ml Tag . name Ġ== Ġ" Channel ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Timeout Ġ= Ġr ml Tag . attributes [" script Type "] Ġ== Ġ" Timeout " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Write Event Ġ= Ġr ml Tag . attributes [" script Type "] Ġ== Ġ" Write Event " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon : ĠImageView Ġ= Ġwhen Ġ( r ml Tag . channel Specifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Specifier . Physical Ġ-> ĠResources . mod bus P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Specifier . Virtual Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Timeout Ġ-> ĠResources . virtual Timeout P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Write Event Ġ-> ĠResources . virtual Write Event P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠResources . virtual P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Specifier . Local Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Timeout Ġ-> ĠResources . local Timeout P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Write Event Ġ-> ĠResources . local Write Event P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠResources . local P ng . to ImageView ( 3 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Item . graphic Ġ= Ġicon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ