/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 2 ĠCh air Ġof ĠGe oin form atics , ĠTechnical ĠUniversity Ġof ĠM un ich Ċ Ġ* Ċ Ġ* Ġ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 . r tron . reader writer . opend rive Ċ Ċ import Ġcom . github . kit tin un f . result . Result Ċ import Ġio . r tron . io . files . Path Ċ import Ġio . r tron . io . logging . Log Manager Ċ import Ġio . r tron . model . opend rive . O pend rive Model Ċ import Ġio . r tron . reader writer . opend rive . configuration . O pend rive Reader Configuration Ċ import Ġio . r tron . std . handle Failure Ċ import Ġorg . w 3 c . dom . Document Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ Ċ class ĠO pend rive Reader ( ĊĠĠĠ Ġval Ġconfiguration : ĠO pend rive Reader Configuration Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠProperties Ġand ĠInitial izers ĊĠĠĠ Ġprivate Ġval Ġ_ report Logger Ġ= ĠLog Manager . get Report Logger ( configuration . projectId ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ opend rive 1 4 Reader Ġby Ġlazy Ġ{ ĠO pend rive 1 4 Reader ( configuration ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġ_ opend rive 1 5 Reader Ġby Ġlazy Ġ{ ĠO pend rive 1 5 Reader ( configuration ) Ġ} ĊĊĠĠĠ Ġ// ĠMethods ĊĊĠĠĠ Ġfun Ġread ( filePath : ĠPath ): ĠO pend rive Model Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġo pend rive Version Ġ= Ġget O pend rive Version ( filePath ). handle Failure Ġ{ Ġthrow Ġit . error Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġwhen Ġ( opend rive Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO pend rive Version ( 1 , Ġ 4 ) Ġ-> Ġ_ opend rive 1 4 Reader . create O pend rive Model ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ report Logger . warn (" Detected ĠOpen DRIVE Ġversion Ġ($ opend rive Version ) Ġfor Ġwhich Ġno Ġdedicated Ġreader Ġis Ġimplemented Ġ( yet ). ĠExperiment ally Ġcontinuing .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ opend rive 1 4 Reader . create O pend rive Model ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ report Logger . info (" Completed Ġread - in Ġof Ġfile Ġ${ filePath . fileName } Ġ( around Ġ${ filePath . getFile Size To Display ()} ). ĠâľĶ ") ĊĠĠĠĠĠĠĠ Ġreturn Ġmodel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠO pend rive Version ( val Ġrev Major : ĠInt Ġ= Ġ 0 , Ġval Ġrev Minor : ĠInt Ġ= Ġ 0 ) ĊĠĠĠ Ġprivate Ġfun Ġget O pend rive Version ( file : ĠPath ): ĠResult < O pend rive Version , ĠIllegalStateException > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Doc : ĠDocument Ġ= ĠDocument BuilderFactory . newInstance (). new Document Builder (). parse ( file . to File J ()) ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġxml Doc . getElementsByTagName (" header "). item ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrev Major Ġ= Ġheader . attributes . getName d Item (" rev Major ") Ġ?: Ġreturn ĠResult . error ( IllegalStateException (" Major Ġversion Ġof ĠOpen DRIVE Ġdataset Ġis Ġnot Ġident ifiable .")) ĊĠĠĠĠĠĠĠ Ġval Ġrev Minor Ġ= Ġheader . attributes . getName d Item (" rev Minor ") Ġ?: Ġreturn ĠResult . error ( IllegalStateException (" Minor Ġversion Ġof ĠOpen DRIVE Ġdataset Ġis Ġnot Ġident ifiable .")) ĊĊĠĠĠĠĠĠĠ Ġval Ġo pend rive Version Ġ= ĠO pend rive Version ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrev Major Ġ= Ġrev Major . node Value . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrev Minor Ġ= Ġrev Minor . node Value . toInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success ( opend rive Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsupported File Extensions Ġ= ĠlistOf (" x od r ", Ġ" x od rz ") ĊĠĠĠ Ġ} Ċ } Ċ