package Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . lib Ċ Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . models . Product Ċ import Ġorg . springframework . data . jpa . domain . Specification Ċ Ċ class ĠProduct Spec ifications Builder ( private Ġval Ġspecification : ĠSpecification < Product >? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġparams : ĠMutable List < Product Specification > Ġ= Ġarray ListOf () ĊĊĠĠĠ Ġfun Ġwith ( search Criteria : ĠSearch Criteria ): ĠProduct Spec ifications Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġparams . add ( Product Specification ( search Criteria )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠSpecification < Product >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( params . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstarting Value : ĠSpecification < Product >? ĊĠĠĠĠĠĠĠ Ġif Ġ( specification Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstarting Value Ġ= ĠSpecification . where ( params [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . remove ( starting Value ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstarting Value Ġ= Ġspecification ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġparams . fold ( starting Value ) Ġ{ Ġresult , Ġparam Ġ-> Ġresult . and ( param ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ }