package Ġcom . cd sap . tal ai ot . publisher . graph publisher Ċ Ċ import Ġcom . cd sap . tal ai ot . entities . Task Measurement Ag gregated Ċ import Ġcom . cd sap . tal ai ot . logger . Log Tracker Ċ import Ġcom . cd sap . tal ai ot . publisher . graph publisher . resources . Resources G ex f Ċ import Ġcom . cd sap . tal ai ot . writer . FileWriter Ċ import Ġjava . util . concurrent . Executor Ċ Ċ /** Ċ Ġ* ĠPublisher Ġused Ġto Ġpublish Ġwith Ġthe ĠG ex f Ġformat . Ċ Ġ*/ Ċ class ĠG ex f Publisher ( ĊĠĠĠ Ġoverride Ġvar Ġlog Tracker : ĠLog Tracker , ĊĠĠĠ Ġoverride Ġvar Ġfile Writer : ĠFile Writer , ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecutor Ġto Ġschedule Ġa Ġtask Ġin ĠBackground ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġexecutor : ĠExecutor Ċ ) Ġ: ĠDefault Disk Publisher ( log Tracker , Ġfile Writer ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġname Ġof Ġthe Ġfile Ġgenerated Ġby Ġthe Ġpublisher ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠfileName : ĠString Ġ= Ġ" ge xf Task Dependency . ge xf " ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinternal Ġcounter Ġto Ġadd Ġan Ġid Ġfor Ġthe Ġedges . ĠIt Ġwill Ġbe Ġused Ġat Ġtime Ġto Ġsetup Ġthe Ġrelations ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġinternal Counter Edges Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġpublish ( task Measurement Ag gregated : ĠTask Measurement Ag gregated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġcontent Composer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Ġ= Ġbuild Graph ( task Measurement Ag gregated ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= ĠResources G ex f . HEADER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Ġ= ĠResources G ex f . FO OTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Tracker . log (" G ex f Publisher : Ġwriting Ġfile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite File ( content , ĠfileName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġformat Node ( ĊĠĠĠĠĠĠĠ Ġinternal Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġmodule : ĠString , ĊĠĠĠĠĠĠĠ Ġtask Name : ĠString , ĊĠĠĠĠĠĠĠ Ġnumber Dependencies : ĠInt , ĊĠĠĠĠĠĠĠ Ġcached : ĠBoolean ĊĠĠĠ Ġ): ĠString Ġ= Ġ" ĠĠĠĠĠĠ Ġ< node Ġid =\" $ internal Id \" Ġlabel =\" $ task Name \">\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< att values >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< att value Ġfor =\" 0 \" Ġvalue =\" $ module \" /> \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< att value Ġfor =\" 1 \" Ġvalue =\" $ cached \" /> \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ att values >\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġ</ node >\ n " ĊĊĊĠĠĠ Ġoverride Ġfun Ġformat Edge ( ĊĠĠĠĠĠĠĠ Ġfrom : ĠInt , ĊĠĠĠĠĠĠĠ Ġto : ĠInt ? ĊĠĠĠ Ġ) Ġ= Ġ" ĠĠĠĠĠĠ Ġ< edge Ġid =\" ${ internal Counter Edges ++ }\" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" source =\" $ from \" Ġtarget =\" $ to \" Ġ/>\ n " Ċ } Ċ