package Ġpin pak . core Ċ Ċ import Ġpin pak . logger ĊĊ Ċ class ĠPipeline ( pipeline Name : ĠString ) Ġ: ĠAbstract Pipeline ( pipeline Name ) Ġ{ ĊĊĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger ( this ) ĊĊĠĠĠ Ġfun Ġadd Last ( name : ĠString , Ġinterceptor : ĠBase Interceptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Duplicate ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Duplicate ĠBase Interceptor Ġname : Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Before ( tail , Ġname , Ġinterceptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd First ( name : ĠString , Ġinterceptor : ĠBase Interceptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Duplicate ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Duplicate ĠBase Interceptor Ġname : Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd After ( head , Ġname , Ġinterceptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd After ( after : ĠString , ĠnewName : ĠString , Ġinterceptor : ĠBase Interceptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Duplicate ( new Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Duplicate ĠBase Interceptor Ġname : Ġ$ new Name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠgetContext ( after ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd After ( context , ĠnewName , Ġinterceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Context Ġto Ġadd Ġafter Ġnot Ġfound Ġwith Ġname Ġ$ after ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Before ( before : ĠString , ĠnewName : ĠString , Ġinterceptor : ĠBase Interceptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Duplicate ( new Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Duplicate ĠBase Interceptor Ġname : Ġ$ new Name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠgetContext ( before ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Before ( context , ĠnewName , Ġinterceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Context Ġto Ġadd Ġafter Ġnot Ġfound Ġwith Ġname Ġ$ before ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠgetContext ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( context ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Context Ġto Ġremove Ġnot Ġfound Ġwith Ġname Ġ$ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( head . next Ġ!== Ġtail ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( head . next . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhead . next Ġ= Ġtail ĊĠĠĠĠĠĠĠ Ġtail . previous Ġ= Ġhead ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove First () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( head . next ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Last () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( tail . previous ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreplace ( re placed : ĠString , ĠnewName : ĠString , Ġinterceptor : ĠBase Interceptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( re placed Ġ!= ĠnewName Ġ&& Ġis Duplicate ( new Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Duplicate ĠBase Interceptor Ġname : Ġ$ new Name ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠgetContext ( re placed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( context , ĠnewName , Ġinterceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Context Ġto Ġreplace Ġnot Ġfound Ġwith Ġname Ġ$ re placed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ