package Ġuk . ac . war wick . cam cat . s its . types Ċ Ċ import Ġorg . hibernate . type . Abstract Single Column Standard Basic Type Ċ import Ġorg . hibernate . type . descriptor . Wrapper Options Ċ import Ġorg . hibernate . type . descriptor . java . Abstract TypeDescriptor Ċ import Ġorg . hibernate . type . descriptor . java . Immutable Mut ability Plan Ċ import Ġorg . hibernate . type . descriptor . sql . V arch ar TypeDescriptor Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Month Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ @ Component Ċ class ĠDuration Type Ġ: ĊĠ ĠAbstract Single Column Standard Basic Type < Duration >( V arch ar TypeDescriptor . INSTANCE , ĠDuration TypeDescriptor ) Ġ{ ĊĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ= Ġ" s its - duration " Ċ } Ċ Ċ object ĠDuration TypeDescriptor Ġ: ĠAbstract TypeDescriptor < Duration >( ĊĠ ĠDuration :: class . java , ĊĠ ĠImmutable Mut ability Plan . INSTANCE Ġas ĠImmutable Mut ability Plan < Duration > Ċ ) Ġ{ ĊĠ Ġprivate Ġval Ġreference Date Ġ= ĠLocalDateTime . of ( 1 9 0 0 , ĠMonth . J AN U ARY , Ġ 1 , Ġ 0 , Ġ 0 ) ĊĠ Ġprivate Ġval Ġdate Pattern Ġ= ĠDateTime Formatter . of Pattern (" yyyy - MM - dd ĠHH : mm : ss ") ĊĊĠ Ġoverride Ġfun Ġfrom String ( string : ĠString ?): ĠDuration Ġ{ ĊĠĠĠ Ġval ĠdateTime Ġ= ĠLocalDateTime . parse ( string , Ġdate Pattern ) ĊĠĠĠ Ġreturn ĠDuration . between ( reference Date , ĠdateTime ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< X Ġ: ĠAny ?> Ġunwrap ( value : ĠDuration ?, Ġtype : ĠClass < X > ?, Ġoptions : ĠWrapper Options ?): ĠX ? Ġ= ĊĠĠĠ Ġif Ġ( value Ġ!= Ġnull Ġ&& Ġtype Ġ== ĠString :: class ) Ġ{ ĊĠĠĠĠĠ Ġreference Date . plus ( value ). format ( date Pattern ) Ġas ĠX ĊĠĠĠ Ġ} Ġelse Ġnull ĊĊĠ Ġoverride Ġfun Ġ< X Ġ: ĠAny ?> Ġwrap ( value : ĠX , Ġoptions : ĠWrapper Options ?): ĠDuration ? Ġ= ĊĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠ Ġis ĠString Ġ-> Ġfrom String ( value ) ĊĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ Ċ } Ċ