package Ġcom . heartbeat Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . heartbeat . Transition Check Contract . Commands . Check Ċ import Ġnet . cord a . core . contracts . Command Ċ import Ġnet . cord a . core . contracts . State Ref Ċ import Ġnet . cord a . core . flows . Final ity Flow Ċ import Ġnet . cord a . core . flows . Flow Logic Ċ import Ġnet . cord a . core . flows . Initi ating Flow Ċ import Ġnet . cord a . core . flows . S chedul able Flow Ċ import Ġnet . cord a . core . node . services . Vault Ċ import Ġnet . cord a . core . node . services . query By Ċ import Ġnet . cord a . core . node . services . vault . Query Criteria Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . transactions . Transaction Builder Ċ import Ġnet . cord a . core . utilities . Progress Tracker Ċ import Ġnet . cord a . core . utilities . Progress Tracker . Step Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġtw ink le . agri ledger . states . G ps Properties Ċ import Ġtw ink le . agri ledger . states . Location State Ċ import Ġokhttp 3 . Form Body Ċ import Ġtw ink le . agri ledger . states . Asset Container State Ċ import Ġutils . get Asset Container By Physical Container Id ĊĊ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġflow Ġthat Ġa ĠHeart beat Ġstate Ġruns Ġwhen Ġit Ġconsume s Ġitself Ġto Ġcreate Ġa Ġnew ĠHeart beat Ċ Ġ* Ġstate Ġon Ġthe Ġledger . Ċ Ġ* Ċ Ġ* Ġ@ param Ġstate Ref Ġthe Ġexisting ĠHeart beat Ġstate Ġto Ġbe Ġupdated . Ċ Ġ*/ Ċ @ Initi ating Flow Ċ @ S chedul able Flow Ċ class ĠTransition Check Flow ( private Ġval Ġstate Ref Location : ĠState Ref , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstate Ref Scheduled : ĠState Ref ) Ġ: ĠFlow Logic < Signed Transaction >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠGENER ATING _ TRANSACTION Ġ: ĠStep (" Generating Ġa Ġtransaction .") ĊĠĠĠĠĠĠĠ Ġobject ĠSIGN ING _ TRANSACTION Ġ: ĠStep (" Signing Ġtransaction Ġwith Ġour Ġprivate Ġkey .") ĊĠĠĠĠĠĠĠ Ġobject ĠFIN AL ISING _ TRANSACTION Ġ: ĠStep (" Recording Ġtransaction .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠFinal ity Flow . tracker () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtracker () Ġ= ĠProgress Tracker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGENER ATING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSIGN ING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIN AL ISING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= Ġtracker () ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠGENER ATING _ TRANSACTION ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġservice Hub . vault Service . query By < Location State >( Query Criteria . Vault Query Criteria ( state Refs Ġ= ĠlistOf ( state Ref Location ), Ġstatus Ġ= ĠVault . State Status . ALL )) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġphysical Container Id Ġ= Ġlocation . states . single (). state . data . physical Container ID ĊĠĠĠĠĠĠĠ Ġval Ġasset Container Ġ= Ġ Ġget Asset Container By Physical Container Id ( physical Container Id , Ġservice Hub ) !!. state . data ĊĊĊĠĠĠĠĠĠĠ Ġval Ġgps Ġ= Ġlocation . states . single (). state . data . gps ĊĠĠĠĠĠĠĠ Ġif Ġ( location . states Metadata . first (). status Ġ== ĠVault . State Status . UN CON SU MED ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Email ( asset Container . asset Container . producer ID , Ġasset Container . physical Container ID . toString (), Ġgps ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" un consumed ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġprintln (" consumed ") ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġservice Hub . to State And Ref < Transition Check State >( state Ref Scheduled ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbeat Cmd Ġ= ĠCommand ( Check (), Ġour Identity . own ing Key ) ĊĠĠĠĠĠĠĠ Ġval Ġtx Builder Ġ= ĠTransaction Builder ( service Hub . network Map Cache . not ary Id entities . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Input State ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Command ( beat Cmd ) ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠSIGN ING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġservice Hub . sign Initial Transaction ( tx Builder ) ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠFIN AL ISING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġval Ġst x Ġ= Ġsub Flow ( Final ity Flow ( signed Tx , ĠlistOf ())) ĊĠĠĠĠĠĠĠ Ġreturn Ġst x ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġsend Email ( producer Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Container ID : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgps Properties : ĠG ps Properties ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" http :// localhost : 1 2 2 2 3 / socket / send Email " ĊĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" producer Id ", Ġproducer Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" physical Container ID ", Ġphysical Container ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" latitude ", Ġgps Properties . latitude . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" longitude ", Ġgps Properties . longitude . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval ĠhttpRequest Ġ= ĠRequest . Builder (). url ( url ). post ( form Body ). build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠBE ĠC ARE FUL Ġwhen Ġmaking ĠHTTP Ġcalls Ġin Ġflows : ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠThe Ġrequest Ġmust Ġbe Ġexecuted Ġin Ġa ĠBLOCK ING Ġway . ĠFlow s Ġdon 't ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġcurrently Ġsupport Ġsus pending Ġto Ġawait Ġan ĠHTTP Ġcall 's Ġresponse ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠThe Ġrequest Ġmust Ġbe Ġide mpot ent . ĠIf Ġthe Ġflow Ġfails Ġand Ġhas Ġto ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġrestart Ġfrom Ġa Ġcheckpoint , Ġthe Ġrequest Ġwill Ġalso Ġbe Ġreplay ed ĊĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= ĠOk HttpClient (). new Call ( httpRequest ). execute () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( httpResponse . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Response Ġfrom Ġclient Ġ- ĠOK ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Error Ġoccurred Ġwhile Ġsending Ġrequest Ġon Ġmail , Ġstatus Ġcode : Ġ${ httpResponse . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( httpResponse . body (). string ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠ Ġprintln (" Error Ġoccurred Ġwhile Ġsending Ġrequest Ġto ĠN MS Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e . message ) ĊĠĠĠ Ġ} Ċ Ċ }