/* Ċ Ġ* ĠCopyright Ġ 2 0 1 5 ĠUnited ĠStates ĠGovernment , Ġas Ġrepresented Ġby Ġthe ĠAdministrator Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġof Ġthe ĠNational ĠA eron aut ics Ġand ĠSpace ĠAdmin istration . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ 2 0 1 7 - 2 0 2 1 ĠThe Ġj Constraints ĠAuthors Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġsolver Composition . entity Ċ Ċ import Ġgov . nasa . j pf . constraints . api . Constraint Solver Ċ import Ġgov . nasa . j pf . constraints . api . Expression Ċ import Ġgov . nasa . j pf . constraints . api . Val uation Ċ import Ġsolver Composition . dsl . Continuation Ċ import Ġsolver Composition . dsl . Continuation Builder Ċ import Ġsolver Composition . dsl . Continuation Result Ċ import Ġjava . sql . Time Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Logger Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Duration Unit Ċ Ċ abstract Ġclass ĠConstraint Solver Behaviour ( Ċ ĉ val Ġidentifier : ĠString , Ċ ĉ val Ġrun If : Ġ( List < Expression < Boolean >>) Ġ-> ĠBoolean , Ċ ĉ val ĠuseContext : ĠBoolean , Ċ ĉ val Ġconfig : ĠProperties , Ċ ) Ċ Ċ class ĠSequential Behaviour ( Ċ ĉ identifier : ĠString , Ċ ĉ run If : Ġ( List < Expression < Boolean >>) Ġ-> ĠBoolean , Ċ ĉ val Ġcontinuation : Ġ( List < Expression < Boolean >>, ĠContinu ation Result , ĠVal uation ) Ġ-> ĠContinu ation Builder , Ċ ĉ val Ġenable Un sat Core : ĠBoolean , Ċ ĉ use Context : ĠBoolean , Ċ ĉ config : ĠProperties , Ċ ) Ġ: ĠConstraint Solver Behaviour ( identifier , Ġrun If , ĠuseContext , Ġconfig ) Ċ Ċ class ĠParallel Behaviour ( Ċ ĉ identifier : ĠString , Ċ ĉ run If : Ġ( List < Expression < Boolean >>) Ġ-> ĠBoolean , Ċ ĉ use Context : ĠBoolean , Ċ ĉ config : ĠProperties , Ċ ) Ġ: ĠConstraint Solver Behaviour ( identifier , Ġrun If , ĠuseContext , Ġconfig ) Ċ Ċ abstract Ġclass ĠConstraint Solver Composition < T Ġ: ĠConstraint Solver Behaviour >( Ċ ĉ val Ġsol vers : ĠMap < String , ĠSolver With Behaviour < T >>, Ċ ) Ġ: ĠConstraint Solver () Ġ{ Ċ ĉ protected Ġval Ġlogger : ĠLogger Ġ= ĠLogger . getLogger (" j constraints Ġd sl ") ĊĊ ĉ init Ġ{ Ċĉ ĉ require ( Ċĉĉ ĉ // TODO Ġfix Ċ // ĉĉ ĉ sol vers Ċ // ĉĉĉ ĉ . groupBy Ġ{ Ġit . be haviour . identifier Ġ} Ċ // ĉĉĉ ĉ . values Ċ // ĉĉĉ ĉ . all Ġ{ Ġit . size Ġ== Ġ 1 Ġ} Ċĉĉ ĉ true Ċĉ ĉ ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġsolve ( f : ĠExpression < Boolean > ?, Ġresult : ĠVal uation ?): ĠResult Ġ{ Ċĉ ĉ logger . log ( Level . INFO , Ġ" The Ġsolve Ġmethod Ġwon 't Ġproduce Ġuseful Ġun sat Ġcores Ġin Ġthis Ġcomposition . ĠUse Ġd sl Solve Ġif Ġany Ġof Ġthe Ġsol vers Ġcontained Ġin Ġthis Ġcomposition Ġhave Ġun sat Core Tracking Ġenabled .") Ċĉ ĉ val Ġd sl Result Ġ= Ġd sl Solve ( mutable ListOf ( f )) Ċĉ ĉ result ?. put All ( dsl Result . valu ation ) Ċĉ ĉ return Ġd sl Result . result Ċ ĉ } Ċ } Ċ Ċ class ĠDuplicate Solver Identifier Exception ( message : ĠString ) Ġ: ĠException ( message ) Ċ Ċ data Ġclass ĠSolver With Behaviour < T Ġ: ĠConstraint Solver Behaviour >( val Ġsolver : ĠConstraint Solver , Ġval Ġbehaviour : ĠT ) Ċ