package Ġpl . po zn an . put . ah p Ċ Ċ import Ġorg . x mc da . Common Attributes Ċ import Ġorg . x mc da . Criteria Matrix Ċ import Ġorg . x mc da . Qualified Values Ċ import Ġorg . x mc da . utils . Coord Ċ Ċ abstract Ġclass ĠA hp Base Builder Ġ{ ĊĠĠĠ Ġvar Ġcriteria Ġ= ĠlistOf < C ry t Id >() ĊĠĠĠ Ġprotected Ġvar Ġcriteria Comp Ġ= Ġmutable Map Of < C ry t Id , ĠList < Relation Value >>() ĊĊĠĠĠ Ġfun ĠCriteria Matrix <* >. fetch () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( id ()) Ġ{ Ġ" Missing Ġparent Ġcriteria Ġcompar ision Ġid Ġ" Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( id () Ġ! in Ġcriteria Comp ) Ġ{ Ġ" d uplicated Ġcriteria Ġcomparisons Ġfor Ġcriterion Ġ${ id () }" Ġ} ĊĠĠĠĠĠĠĠ Ġcriteria Comp [ id ()] Ġ= Ġmap Ġ{ Ġit . relation Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġinline Ġval Ġ< re ified ĠK Ġ: ĠCommon Attributes , Ġre ified ĠV > ĠMap . Entry < Coord < K , ĠK >, ĠQual ified Values < out ĠV >> . relation ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠRelation Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . x . id (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey . y . id (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . convertTo Double (). value () ĊĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . first ID Ġ!= Ġit . second ID Ġ|| Ġit . value Ġ== Ġ 1 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Self Ġreference Ġis Ġrequired Ġto Ġhave Ġpreference Ġequal Ġto Ġ 1 ; Ġgot Ġ${ it . value } Ġfor Ġ'${ it . first ID } '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠQual ified Values < Double >. value () Ġ= Ġfirst (). value . also Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( it Ġ> Ġ 0 ) Ġ{ Ġ" Value Ġmust Ġbe Ġpositive Ġreal Ġvalue , Ġgot Ġ$ it " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġbuild (): ĠA hp Result ĊĊĊĊĠĠĠ Ġprotected Ġfun ĠMutable Map < C ry t Id , ĠList < Relation Value >> . fetch Id With Assertion ( to Fetch : ĠString ): ĠList < C ry t Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( isNotEmpty ()) Ġ{ Ġ"$ to Fetch Ġnot Ġfound " Ġ} ĊĠĠĠĠĠĠĠ ĠforEach Ġ{ Ġk , Ġy Ġ-> Ġrequire ( y . isNotEmpty ()) Ġ{ Ġ"$ to Fetch Ġon Ġ'$ k ' Ġare Ġnot Ġset " Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkeys . sorted () ĊĠĠĠ Ġ} Ċ } Ċ