package Ġnet . nem eros a . on track . extension . indicators . computing Ċ Ċ import Ġnet . nem eros a . on track . extension . support . Abstract Extension Ċ import Ġnet . nem eros a . on track . model . extension . Extension Feature Ċ import Ġnet . nem eros a . on track . model . structure . Project Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ /** Ċ Ġ* Ġ[ Indicator Computer ] Ġbased Ġon Ġ[ configurable Ġindicators ][ Configurable Indicator Type ] Ġonly . Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Configurable Indicator Computer ( ĊĠĠĠ Ġextension Feature : ĠExtension Feature , ĊĠĠĠ Ġprivate Ġval Ġconfigurable Indicator Service : ĠConfigur able Indicator Service , Ċ ) Ġ: ĠAbstract Extension ( extension Feature ), ĠIndicator Computer Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Indicators ( project : ĠProject ): ĠList < Indicator Computed Value < *, Ġ* >> Ġ= ĊĠĠĠĠĠĠĠ Ġconfigurable Indicators . map NotNull Ġ{ Ġconfigurable Indicator Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Indicator ( project , Ġconfigurable Indicator Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T , ĠC > Ġcompute Indicator ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġconfigurable Indicator Type : ĠConfigur able Indicator Type < T , ĠC > ĊĠĠĠ Ġ): ĠIndicator Computed Value < T , ĠC >? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("[ configurable - indicator ] Ġcomputer =${ id }, project =${ project . name }, start ") ĊĠĠĠĠĠĠĠ Ġ// ĠGets Ġthe Ġstate Ġof Ġthe Ġconfigurable Ġtype ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġconfigurable Indicator Service . get Configurable Indicator State ( configurable Indicator Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . enabled Ġ} Ġ// ĠIf Ġindicator Ġis Ġnot Ġenabled , Ġdoes Ġot Ġcompute Ġany Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ configurable - indicator ] Ġcomputer =${ id }, project =${ project . name }, state =${ this ?. enabled }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull Ġ// ĠDoes Ġnot Ġreturn Ġany Ġvalue Ġif Ġthe Ġconfigurable Ġtype Ġhas Ġnot Ġbeen Ġconfigured Ġor Ġis Ġnot Ġenabled ĊĠĠĠĠĠĠĠ Ġ// ĠType Ġof Ġthe Ġindicator ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠIndicator Computed Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġconfigurable Indicator Type . category , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġconfigurable Indicator Type . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġconfigurable Indicator Type . expand Name ( state ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Ġ= Ġstate . link , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Type Ġ= Ġconfigurable Indicator Type . valueType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Config Ġ= Ġconfigurable Indicator Type . value Config ( project , Ġstate ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠComputes Ġthe Ġvalue ĊĠĠĠĠĠĠĠ Ġlogger . info ("[ configurable - indicator ] Ġcomputer =${ id }, project =${ project . name }, computing ") ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġconfigurable Indicator Type . compute Value ( project , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ// ĠOK ĊĠĠĠĠĠĠĠ Ġlogger . info ("[ configurable - indicator ] Ġcomputer =${ id }, project =${ project . name }, value =${ value }, end ") ĊĠĠĠĠĠĠĠ Ġreturn ĠIndicator Computed Value ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }