/* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . ĠĊ Ġ*/ Ċ Ċ package Ġorg . mode lix . model . operations Ċ Ċ import Ġorg . mode lix . model . api . I Concept Ċ import Ġorg . mode lix . model . api . IT ree Ċ import Ġorg . mode lix . model . api . I Write Transaction Ċ import Ġorg . mode lix . model . persistent . Serialization Util Ċ Ċ class ĠDelete Node Op ( val Ġchild Id : ĠLong ) Ġ: ĠAbstract Operation (), ĠI Operation Int end Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( transaction : ĠI Write Transaction ): ĠI Applied Operation Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction . getAll Children ( child Id ). count () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Attempt Ġto Ġdelete Ġnon - leaf Ġnode : Ġ${ child Id . toString ( 1 6 )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconcept Ġ= Ġtransaction . get Concept ( child Id ) ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠgetNode Position ( transaction . tree , Ġchild Id ) ĊĠĠĠĠĠĠĠ Ġtransaction . delete Node ( child Id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠApp lied ( position , Ġconcept ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Delete Node Op Ġ${ Serialization Util . long To Hex ( child Id )}" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġto Code (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" t . delete Node ( 0 x ${ child Id . toString ( 1 6 )}) """ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestore Int end ( tree : ĠI Tree ): ĠList < IO peration > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! tree . contains Node ( child Id )) Ġreturn ĠlistOf ( No Op ()) ĊĠĠĠĠĠĠĠ Ġval Ġall Children Ġ= Ġtree . getAll Children ( child Id ). toList () ĊĠĠĠĠĠĠĠ Ġif Ġ( all Children . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Pos Ġ= Ġget Detached Nodes End Position ( tree ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġall Children ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reversed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠMove Node Op ( it , Ġtarget Pos ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcapture Int end ( tree : ĠI Tree ): ĠI Operation Int end Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Original Op () Ġ= Ġthis ĊĊĠĠĠ Ġinner Ġclass ĠApp lied ( val Ġposition : ĠPosition In Role , Ġprivate Ġval Ġconcept : ĠI Concept ?) Ġ: ĠAbstract Operation . Applied (), ĠI Applied Operation Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Original Op () Ġ= Ġthis @ Delete Node Op ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvert (): ĠI Operation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAdd New Child Op ( position , Ġchild Id , Ġconcept ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . toString () Ġ+ Ġ", Ġconcept : Ġ" Ġ+ Ġconcept ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ