package Ġcom . pio tr walk us z . smart law . compiler . provider Ċ Ċ import Ġcom . pio tr walk us z . smart law . core . model . common . Id Ċ import Ġcom . pio tr walk us z . smart law . core . model . document . Document Ċ import Ġcom . pio tr walk us z . smart law . core . model . document . Rules Container Ċ import Ġcom . pio tr walk us z . smart law . core . model . rule . Rule Ċ Ċ class ĠIn Memory Rule Provider ( documents List : ĠList < Document >) Ġ: ĠRule Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdocuments : ĠMap < Id , ĠDocument > Ġ= Ġdocuments List . associate By Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġprivate Ġval Ġdocument Id By Rule Id : ĠMap < Id , ĠId > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdocument Id By Rule Id Ġ= Ġdocuments List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance ( Rules Container :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġdocument Ġ-> Ġdocument . rules . map Ġ{ Ġrule Ġ-> Ġrule . id Ġto Ġdocument . id Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Rule ( rule Id : ĠId ): ĠRule ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdocument Id By Rule Id [ rule Id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġdocument Id Ġ-> Ġdocuments [ document Id ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġdocument Ġ-> Ġdocument Ġas ĠRules Container Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . rules ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . find Ġ{ Ġit . id Ġ== Ġrule Id Ġ} ĊĠĠĠ Ġ} Ċ }