package Ġxyz . null dev . ts . api . java . impl . categories Ċ Ċ import Ġxyz . null dev . ts . api . java . T ach iy omi API Ċ import Ġxyz . null dev . ts . api . java . model . categories . Categories Edit Operation Ċ import Ġxyz . null dev . ts . api . java . model . categories . Category Ċ Ċ class ĠCategories Edit Operation Impl ( private Ġval Ġcategories : ĠMutable List < Category >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġparent : ĠCategories Impl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġedit Snapshot : ĠLong ) ĊĠĠĠ Ġ: ĠCategories Edit Operation , ĠMutable List < Category > Ġby Ġcategories Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġsaved Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Category ( name : ĠString ) Ġ= ĠCategory Impl ( name , Ġtrue ) ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Saving Ġtwice Ġis Ġnot Ġsupported ĊĠĠĠĠĠĠĠ Ġif ( saved ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" This Ġoperation Ġhas Ġalready Ġbeen Ġcommitted !") ĊĊĠĠĠĠĠĠĠ Ġ// Only Ġone Ġoperation Ġcommitted Ġat Ġthe Ġsame Ġtime ĊĠĠĠĠĠĠĠ Ġsynchronized ( parent , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ensure Ġthat Ġthe Ġparent Ġcategories Ġhave Ġnot Ġchanged Ġsince Ġthis Ġedit Ġoperation Ġwas Ġopened ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( edit Snapshot Ġ!= Ġparent . edit Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġcategories Ġhave Ġchanged Ġsince Ġthis Ġoperation Ġwas Ġopened !") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠT ach iy omi API . database . in Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Transform Ġoriginal Ġcategories Ġlist Ġinto Ġlookup Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories Map Ġ= ĠT ach iy omi API . database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getC ategories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute As Blocking () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate By Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable Map () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Categories Ġ= Ġcategories . map Indexed Ġ{ Ġindex , Ġcategory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Do Ġnot Ġsave Ġcustom Ġimplementations Ġof ĠCategory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġas ? ĠCategory Impl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Custom Ġimplementations Ġof Ġcategories Ġcannot Ġbe Ġused !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Category Ġ= Ġcategories Map . remove ( category . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġeu . kan ade . t ach iy omi . data . database . models . Category . create ( category . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Category . order Ġ= Ġindex ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Category ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Apply Ġchanges Ġto ĠDB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Delete Ġdeleted Ġcategories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT ach iy omi API . database . delete Categories ( categories Map . values . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT ach iy omi API . database . insert Categories ( new Categories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Update Ġedit Ġsnapshot Ġand Ġoperation Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . edit Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsaved Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }