package Ġorg . ev om aster . core . problem . rest . resource Ċ Ċ import Ġorg . ev om aster . core . database . Db Action Ċ import Ġorg . ev om aster . core . problem . rest . Rest Action Ċ import Ġorg . ev om aster . core . problem . rest . Rest Call Action Ċ import Ġorg . ev om aster . core . search . gene . Gene Ċ Ċ /** Ċ Ġ* Ġthe Ġclass Ġis Ġused Ġto Ġstructure Ġactions Ġregarding Ġresources . Ċ Ġ* Ġ@ property Ġtemplate Ġis Ġa Ġresource Ġtemplate , Ġe . g ., ĠPOST - GET Ċ Ġ* Ġ@ property Ġresource Instance Ġpresents Ġa Ġresource Ġthat Ġ[ actions ] Ġperform Ġon . Ġ[ resource Instance ] Ġis Ġan Ġinstance Ġof Ġ[ Rest Resource Node ] Ċ Ġ* Ġ@ property Ġactions Ġis Ġa Ġsequence Ġof Ġactions Ġin Ġthe Ġ[ Rest Resource Calls ] Ġthat Ġfollows Ġ[ template ] Ċ Ġ*/ Ċ class ĠRest Resource Calls ( ĊĠĠĠĠĠĠĠ Ġval Ġtemplate : ĠCalls Template ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġresource Instance : ĠRest Resource Instance ?= null , ĊĠĠĠĠĠĠĠ Ġval Ġactions : ĠMutable List < Rest Action > Ċ ){ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ db Actions ] Ġare Ġused Ġto Ġinitialize Ġdata Ġfor Ġrest Ġactions , Ġeither Ġselect Ġfrom Ġdb Ġor Ġinsert Ġnew Ġdata Ġinto Ġdb ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdb Actions Ġ= Ġmutable ListOf < Db Action >() ĊĊĠĠĠ Ġvar Ġstatus Ġ= ĠResource Status . NOT _ FOUND ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġwhether Ġthe Ġcall Ġcan Ġbe Ġdeleted Ġduring Ġstructure Ġmutation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis De letable Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġthis Ġcall Ġshould Ġbe Ġbefore Ġ[ should Before ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshould Before Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġfun Ġcopy () Ġ: ĠRest Resource Calls { ĊĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= ĠRest Resource Calls ( template , Ġresource Instance ?. copy (), Ġactions . map Ġ{ Ġa Ġ-> Ġa . copy () Ġas ĠRest Action }. to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġif ( db Actions . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Actions . forEach Ġ{ Ġdb -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy . db Actions . add ( db . copy () Ġas ĠDb Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcopy . is De letable Ġ= Ġis De letable ĊĠĠĠĠĠĠĠ Ġcopy . should Before . addAll ( should Before ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcopy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġgenes Ġthat Ġrepresents Ġthis Ġresource , Ġi . e ., Ġlongest Ġaction Ġin Ġthis Ġresource Ġcall ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsee Gen es () Ġ: ĠList < out ĠGene >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlongest Path (). see Gen es () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrepair Gen es After Mutation ( gene : ĠGene ? Ġ= Ġnull ){ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġlongest Path () ĊĠĠĠĠĠĠĠ Ġif ( gene Ġ!= Ġnull ) Ġrepair Gene Per Action ( gene , Ġtarget ) ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . filter Ġ{ Ġit Ġis ĠRest Call Action Ġ&& Ġit Ġ!= Ġtarget Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach { a -> Ġ( a Ġas ĠRest Call Action ). bind To Same Path Resolution ( target Ġas ĠRest Call Action )} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlongest Path () Ġ: ĠRest Action { ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġactions . filter Ġ{ Ġit Ġis ĠRest Call Action Ġ}. as Sequence (). map Ġ{ Ġa Ġ-> Ġ( a Ġas ĠRest Call Action ). path . levels () Ġ}. max () !! ĊĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= Ġactions . filter Ġ{ Ġa Ġ-> Ġa Ġis ĠRest Call Action Ġ&& Ġa . path . levels () Ġ== Ġmax Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcandidates . first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrepair Gene Per Action ( gene : ĠGene , Ġaction Ġ: ĠRest Action ){ ĊĠĠĠĠĠĠĠ Ġval Ġgenes Ġ= Ġaction . see Gen es (). flatMap Ġ{ Ġg -> g . flat View () Ġ} ĊĠĠĠĠĠĠĠ Ġif ( genes . contains ( gene )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenes . filter Ġ{ Ġig -> Ġig Ġ!= Ġgene Ġ&& Ġig . name Ġ== Ġgene . name Ġ&& Ġig :: class . java . simple Name Ġ== Ġgene :: class . java . simple Name Ġ}. forEach Ġ{ cg -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcg . copy Value From ( gene ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetResource Node () Ġ: ĠRest Resource Node Ġ= Ġresource Instance ?. refer Resource Node ?: throw ĠIllegalArgumentException (" the Ġindividual Ġdoes Ġnot Ġhave Ġresource Ġstructure ") ĊĊĠĠĠ Ġfun ĠgetResource Node Key () Ġ: ĠString Ġ= ĠgetResource Node (). getName () Ċ Ċ } Ċ Ċ enum Ġclass ĠResource Status { ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDO ĠNOT Ġrequire Ġresource ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠNOT _ EXIST ING , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġresource Ġis Ġcreated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠCRE ATED , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġrequire Ġresource , Ġbut Ġnot Ġenough Ġlength Ġfor Ġpost Ġactions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠNOT _ EN OU GH _ LENGTH , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġrequire Ġresource , Ġbut Ġdo Ġnot Ġfind Ġpost Ġaction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠNOT _ FOUND , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġrequire Ġresource , Ġbut Ġpost Ġaction Ġrequires Ġanother Ġresource Ġwhich Ġcannot Ġbe Ġcreated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠNOT _ FOUND _ DEPEND ENT Ċ }