package Ġse . eric sson . cf . s cott . sandbox . wh c . x tra . repository Ċ Ċ import Ġeu . s cott . warehouse . domains . p ddl . Plan Ċ import Ġeu . s cott . warehouse . lib . Instance With Resources Ċ import Ġse . eric sson . cf . s cott . sandbox . wh c . Warehouse Controller Resources Factory Ċ import Ġse . eric sson . cf . s cott . sandbox . wh c . x tra . Wh c Config Ċ import Ġjava . net . URI Ċ import Ġjava . util . Optional Ċ import Ġjava . util . concurrent . atomic . Atomic Long ĊĊ Ċ interface ĠPlan Repository Ġ{ ĊĠĠĠ Ġfun Ġregister Plan ( plan : ĠInstance With Resources < Plan >): ĠURI ĊĠĠĠ Ġfun Ġremove Plan ( plan URI : ĠURI ) ĊĠĠĠ Ġfun Ġget Plan By URI ( plan URI : ĠURI ): ĠOptional < Instance With Resources < Plan >> ĊĠĠĠ Ġfun Ġexists Plan ( plan URI : ĠURI ): ĠBoolean ĊĠĠĠ Ġfun Ġnew URI (): ĠURI Ċ } Ċ Ċ class ĠPlan Repository Mem Ġ: ĠPlan Repository Ġ{ ĊĠĠĠ Ġprivate Ġval Ġid Counter Ġ= ĠAtomic Long () ĊĠĠĠ Ġprivate Ġval Ġplans By URI : ĠMutable Map < URI , ĠInstance With Resources < Plan >> Ġ= ĠLinkedHashMap () ĊĊĠĠĠ Ġoverride Ġfun Ġregister Plan ( plan : ĠInstance With Resources < Plan >): ĠURI Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( plan . instance . about Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplan . instance . about Ġ= Ġnew URI () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! plan . instance . about . is Absolute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Plan ĠURI Ġmust Ġbe Ġabsolute Ġ( current : Ġ'$ plan . instance . about ') ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplans By URI [ plan . instance . about ] Ġ= Ġplan ĊĠĠĠĠĠĠĠ Ġreturn Ġplan . instance . about ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġnot Ġreally Ġthread - safe Ġbut Ġwe Ġcan Ġdeal Ġwith Ġit Ġfor Ġnow ĊĠĠĠ Ġoverride Ġfun Ġexists Plan ( plan URI : ĠURI ): ĠBoolean Ġ= Ġplans By URI . containsKey ( plan URI ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Plan By URI ( plan URI : ĠURI ): ĠOptional < Instance With Resources < Plan >> Ġ= ĊĠĠĠĠĠĠĠ ĠOptional . of Nullable ( plans By URI [ plan URI ]) ĊĊĠĠĠ Ġoverride Ġfun Ġnew URI (): ĠURI Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠW arehouse Controller Resources Factory . construct URI For Plan ( Wh c Config . DEFAULT _ SP _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Counter . increment AndGet (). toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Plan ( plan URI : ĠURI ): ĠUnit Ġ= ĠTODO (" not Ġimplemented ") Ċ } Ċ