package Ġcom . ro che . amb ass ador . model Ċ Ċ import Ġcom . ro che . amb ass ador . model . project . Project Ċ import Ġcom . ro che . amb ass ador . model . score . Activity Score Policy Ċ import Ġcom . ro che . amb ass ador . model . score . Critical ity Score Policy Ċ import Ġcom . ro che . amb ass ador . model . score . Score Policy Ċ Ċ class ĠScore card Calculator ( var arg Ġpolicy : ĠScore Policy ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpolicies : ĠList < Score Policy > Ġ= Ġpolicy . toList () ĊĊĠĠĠ Ġfun Ġcalculate For ( project : ĠProject ): ĠScore card Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscores Ġ= Ġpolicies . map Ġ{ Ġit . calculate Score Of ( project . features ) Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġif Ġ( project . features . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠScore card . not Calculated ( project ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( project . score card Ġ!= Ġnull Ġ&& Ġproject . score card !!. is Calculated ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproject . score card !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġas Ġof Ġnow Ġcalculate Ġfinal Ġscore Ġas Ġa Ġmultiplication Ġof Ġall Ġnon - experimental Ġscores ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġscores ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . is Experimental () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . value () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġone , Ġtwo Ġ-> Ġone Ġ* Ġtwo Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠScore card . of ( project , Ġscore , Ġscores ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġwith All Policies (): ĠScore card Calculator Ġ= ĠScore card Calculator ( Activity Score Policy , ĠCritical ity Score Policy ) ĊĠĠĠ Ġ} Ċ } Ċ