package Ġcom . program mer are . crs Transform ations . composite Transform ations Ċ Ċ import Ġcom . program mer are . crs Transform ations . C rs Transformation Adapter Ċ import Ġcom . program mer are . crs Transform ations . C rs Transformation Adapter Leaf Factory Ċ import Ġjava . lang . RuntimeException Ċ Ċ /** Ċ Ġ* ĠFactory Ġmethods Ġcreating Ġ' Composite ' Ġimplementations Ġof Ġthe Ġadapter Ġinterface . Ċ Ġ* Ċ Ġ* Ġ@ author ĠT omas ĠJ oh an sson Ġ( Ġhttp :// program mer are . com Ġ) Ċ Ġ* ĠThe Ġcode Ġin Ġthe Ġ" crs - transformation - adapter - core " Ġproject Ġis Ġlicensed Ġwith ĠMIT . Ċ Ġ* ĠOther Ġsub projects Ġmay Ġbe Ġreleased Ġwith Ġother Ġlicenses Ġe . g . ĠLGPL Ġor ĠApache ĠLicense Ġ 2 . 0 . Ċ Ġ* ĠPlease Ġfind Ġmore Ġinformation Ġin Ġthe Ġlicense Ġfile Ġat Ġthe Ġroot Ġdirectory Ġof Ġeach Ġsub project Ċ Ġ* Ġ( e . g . Ġthe Ġsub projects Ġ" crs - transformation - adapter - impl - ge ot ools " Ġ, Ġ" crs - transformation - adapter - impl - proj 4 j " Ġand Ġso Ġon ) Ċ Ġ*/ Ċ object ĠC rs Transformation Adapter Composite Factory Ġ{ ĊĊĠĠĠ Ġ// Ġ-------------------------------- -------------- ĊĠĠĠ Ġ// ĠTwo ĠMed ian Ġfactory Ġmethods : ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ' composite ' Ġimplementation Ġby Ġfirst Ġtrying Ġto Ġinstantiate ĊĠĠĠĠ Ġ* Ġall Ġknown Ġ' leaf ' Ġimplementations Ġavailable Ġat Ġthe Ġclass Ġpath , ĊĠĠĠĠ Ġ* Ġand Ġthen Ġpass Ġthose Ġto Ġthe Ġconstructor Ġof Ġthe Ġ' composite ' ĠĊĠĠĠĠ Ġ* Ġthrough Ġthe Ġover loaded Ġmethod Ġwith Ġthe Ġsame Ġname Ġbut Ġreceiving Ġa Ġlist Ġparameter . ĠĊĠĠĠĠ Ġ* Ġ@ see Ġcreate C rs Transformation Median ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation Median (): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠC rs Transformation Adapter Leaf Factory . get Instances Of All Known Available Implement ations () ĊĠĠĠĠĠĠĠ Ġthrow Exception If No Known Instances Are Available ( list ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate C rs Transformation Median ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ' composite ' Ġimplementation Ġby Ġpassing ĠĊĠĠĠĠ Ġ* Ġa Ġlist Ġof Ġ' leaf ' Ġimplementations Ġto Ġthe Ġconstructor Ġof Ġthe Ġ' composite '. ĊĠĠĠĠ Ġ* ĠThe Ġcreated Ġcomposite Ġis Ġused Ġwhen Ġthe Ġmedian Ġvalue Ġis Ġdesired Ġas ĊĠĠĠĠ Ġ* Ġthe Ġoutput Ġcoordinate . ĠHowever , Ġthe Ġaverage Ġwill Ġalso Ġbe Ġavailable ĊĠĠĠĠ Ġ* Ġalmost Ġas Ġeasily Ġby Ġgetting Ġaccess Ġto Ġa Ġstatistics Ġobject Ġfrom Ġthe Ġresult Ġobject . ĊĠĠĠĠ Ġ* Ġ@ param Ġlist Ġa Ġlist Ġof Ġimplementations Ġwhich Ġwill Ġvery Ġprobably Ġbe Ġ' leaf s ' Ġalthough ĠĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġthis Ġis Ġnot Ġstrictly Ġen forced Ġby Ġthe Ġtype Ġsystem , Ġso Ġin Ġtheory ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġthe Ġlist Ġcould Ġbe Ġcomp os ites Ġi . e . Ġyou Ġmight Ġtry Ġto Ġnest ĠĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġcomp os ites Ġwith Ġcomp os ites Ġ( but Ġit Ġis Ġnot Ġobvious Ġwhy Ġanyone Ġwould Ġwant Ġto Ġdo Ġthat ) ĊĠĠĠĠ Ġ* Ġ@ see Ġcom . program mer are . crs Transform ations . C rs Transformation Result Statistic ĊĠĠĠĠ Ġ* Ġ@ see ĠC rs Transformation Adapter Composite ĊĠĠĠĠ Ġ* Ġ@ see ĠC rs Transformation Adapter ĊĠĠĠĠ Ġ*/ ĠĠĠĠĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation Median ( list : ĠList < C rs Transformation Adapter >): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC rs Transformation Adapter Composite ._ create C rs Transformation Adapter Composite ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Strategy For Median Value ._ create Composite Strategy For Median Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ-------------------------------- -------------- ĊĊĊĠĠĠ Ġ// Ġ-------------------------------- -------------- ĊĠĠĠ Ġ// ĠTwo ĠAverage Ġfactory Ġmethods : ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlease Ġsee Ġthe Ġdocumentation Ġfor Ġthe Ġfactory Ġmethods Ġcreating Ġa Ġmedian Ġcomposite . ĊĠĠĠĠ Ġ* ĠThe Ġonly Ġdifference Ġis Ġthat Ġthe Ġaverage Ġwill Ġbe Ġreturned Ġinstead Ġof Ġthe Ġmedian . ĊĠĠĠĠ Ġ* Ġ@ see Ġcreate C rs Transformation Median ĠĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation Average (): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠC rs Transformation Adapter Leaf Factory . get Instances Of All Known Available Implement ations () ĊĠĠĠĠĠĠĠ Ġthrow Exception If No Known Instances Are Available ( list ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate C rs Transformation Average ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlease Ġsee Ġthe Ġdocumentation Ġfor Ġthe Ġfactory Ġmethods Ġcreating Ġa Ġmedian Ġcomposite . ĊĠĠĠĠ Ġ* ĠThe Ġonly Ġdifference Ġis Ġthat Ġthe Ġaverage Ġwill Ġbe Ġreturned Ġinstead Ġof Ġthe Ġmedian . ĊĠĠĠĠ Ġ* Ġ@ see Ġcreate C rs Transformation Median ĊĠĠĠĠ Ġ*/ ĠĠĠĠĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation Average ( list : ĠList < C rs Transformation Adapter >): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC rs Transformation Adapter Composite ._ create C rs Transformation Adapter Composite ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Strategy For Average Value ._ create Composite Strategy For Average Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ-------------------------------- -------------- ĊĊĠĠĠ Ġ// Ġ-------------------------------- -------------- ĊĠĠĠ Ġ// ĠTwo ĠFirst Success Ġfactory Ġmethods : ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlease Ġsee Ġdocumentation Ġfor Ġthe Ġover loaded Ġmethod . ĊĠĠĠĠ Ġ* Ġ@ see Ġcreate C rs Transformation First Success ĊĠĠĠĠ Ġ*/ ĠĠĠĠĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation First Success (): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠC rs Transformation Adapter Leaf Factory . get Instances Of All Known Available Implement ations () ĊĠĠĠĠĠĠĠ Ġthrow Exception If No Known Instances Are Available ( list ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate C rs Transformation First Success ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlease Ġalso Ġsee Ġthe Ġdocumentation Ġfor Ġthe Ġfactory Ġmethods Ġcreating Ġa Ġmedian Ġcomposite . ĊĠĠĠĠ Ġ* ĠThe Ġdifference Ġis Ġthat Ġthe Ġ' First Success ' Ġwill Ġnot Ġtry ĊĠĠĠĠ Ġ* Ġto Ġuse Ġall Ġleaf Ġimplementations Ġbut Ġwill Ġonly Ġcontinue Ġwith Ġthe Ġnext ĊĠĠĠĠ Ġ* Ġleaf Ġimplementation Ġuntil Ġa Ġsuc ces ful Ġresult Ġhas Ġbeen Ġfound . ĊĠĠĠĠ Ġ* Ġ@ see Ġcreate C rs Transformation Median ĊĠĠĠĠ Ġ*/ ĠĠĠĠĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation First Success ( list : ĠList < C rs Transformation Adapter >): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC rs Transformation Adapter Composite ._ create C rs Transformation Adapter Composite ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Strategy For First Success ._ create Composite Strategy For First Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ-------------------------------- -------------- ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSimilar Ġto Ġthe Ġfactory Ġmethod Ġcreating Ġan Ġimplementation Ġto Ġcalculate Ġthe Ġaverage . ĊĠĠĠĠ Ġ* ĠThe Ġdifference Ġis Ġthat Ġthis Ġmethod Ġwith Ġweighted Ġaverage Ġcan Ġbe Ġused Ġwhen Ġyou Ġwant Ġto Ġassign ĊĠĠĠĠ Ġ* Ġcertain Ġad ap tee Ġimplementations Ġdifferent Ġweights , Ġi . e . Ġwhen Ġyou Ġfeel Ġthat Ġyou Ġhave Ġa Ġreason ĠĊĠĠĠĠ Ġ* Ġto Ġbelieve Ġthat Ġcertain Ġleaf Ġimplementations Ġtend Ġto Ġprovide Ġbetter Ġresults Ġthan Ġothers . ĊĠĠĠĠ Ġ* Ġ@ see Ġcreate C rs Transformation Average ĊĠĠĠĠ Ġ* Ġ@ see ĠC rs Transformation Adapter Weight ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate C rs Transformation Weighted Average ( ĊĠĠĠĠĠĠĠ Ġweighted C rs Transformation Adapters : ĠList < C rs Transformation Adapter Weight > ĊĠĠĠ Ġ): ĠC rs Transformation Adapter Composite Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC rs Transformation Adapter Composite ._ create C rs Transformation Adapter Composite ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Strategy For Weighted Average Value ._ create Composite Strategy For Weighted Average Value ( weighted C rs Transformation Adapters ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġthrow Exception If No Known Instances Are Available ( list : ĠList < C rs Transformation Adapter >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( list . size Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" No Ġknown ĠCR S Ġtransformation Ġimplementation Ġwas Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }