/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠZ UP ĠIT ĠSER V IC OS ĠEM ĠT EC NO LOG IA ĠE ĠIN OV AC AO ĠSA Ċ Ġ* Ċ Ġ* Ġ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 Ġio . char le sc d . m oo ve . application Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġcom . github . f ge . json patch . Json Patch Ċ import Ġio . char le sc d . m oo ve . commons . extension . toJson Node Ċ import Ġjavax . validation . constraints . NotNull Ċ Ċ abstract Ġclass ĠBase Patch Request < T Ġ: ĠAny >( open Ġval Ġpatches : ĠList < Patch Operation >) Ġ{ ĊĊĠĠĠ Ġabstract Ġfun Ġvalidate () ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġapply Patch ( entity : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠObjectMapper (). register Module ( Kotlin Module ()). register Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠ Ġval Ġpatch Ġ= ĠJson Patch . fromJson ( this . patches . toJson Node ()) ĊĠĠĠĠĠĠĠ Ġval Ġpatched : ĠJsonNode Ġ= Ġpatch . apply ( mapper . convert Value ( entity , ĠJsonNode :: class . java )) ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . tree To Value ( patched , ĠT :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPatch Operation ( ĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval Ġop : ĠOp Code Enum , ĊĊĠĠĠ Ġ@ field : NotNull ĊĠĠĠ Ġval Ġpath : ĠString , ĊĊĠĠĠ Ġval Ġvalue : ĠAny ? Ċ ) Ċ Ċ enum Ġclass ĠOp Code Enum Ġ{ ĊĠĠĠ Ġ@ field : JsonProperty (" add ") ĊĠĠĠ ĠADD , ĊĊĠĠĠ Ġ@ field : JsonProperty (" remove ") ĊĠĠĠ ĠREMOVE , ĊĊĠĠĠ Ġ@ field : JsonProperty (" replace ") ĊĠĠĠ ĠREPLACE Ċ } Ċ