package Ġcom . repos il ite . plugin . javadoc Ċ Ċ import Ġcom . repos il ite . journal ist . Journal ist Ċ import Ġcom . repos il ite . journal ist . Logger Ċ import Ġcom . repos il ite . maven . Maven Facade Ċ import Ġcom . repos il ite . maven . api . Lookup Request Ċ import Ġcom . repos il ite . plugin . api . Facade Ċ import Ġcom . repos il ite . plugin . javadoc . api . Javadoc Response Ċ import Ġcom . repos il ite . plugin . javadoc . api . Resolve Javadoc Request Ċ import Ġcom . repos il ite . storage . api . FileType . FILE Ċ import Ġcom . repos il ite . storage . api . Location Ċ import Ġcom . repos il ite . storage . getSimpleName Ċ import Ġcom . repos il ite . token . api . AccessToken Dto Ċ import Ġcom . repos il ite . web . http . ErrorResponse Ċ import Ġcom . repos il ite . web . http . error Response Ċ import Ġcom . repos il ite . web . http . not Found Ċ import Ġcom . repos il ite . web . http . not Found Error Ċ import Ġcom . repos il ite . web . http . un authorized Error Ċ import Ġio . jav al in . http . ContentType Ċ import Ġio . jav al in . http . Http Code Ċ import Ġio . jav al in . http . Http Code . BAD _ REQUEST Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġp anda . std . Blank Ċ import Ġp anda . std . Result Ċ import Ġp anda . std . Result . ok Ċ import Ġp anda . std . as Success Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util . jar . Jar File Ċ import Ġkotlin . io . path . output Stream Ċ Ċ class ĠJ avadoc Facade Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġjavadoc Folder : ĠPath , ĊĠĠĠ Ġprivate Ġval Ġmaven Facade : ĠMaven Facade , ĊĠĠĠ Ġprivate Ġval Ġjournal ist : ĠJournal ist Ċ ) Ġ: ĠJournal ist , ĠF acade Ġ{ ĊĊĠĠĠ Ġfun Ġresolve Request ( request : ĠResolve Javadoc Request ): ĠResult < Javadoc Response , ĠError Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( repository , Ġg av , ĠaccessToken ) Ġ= Ġrequest ĊĊĠĠĠĠĠĠĠ Ġif Ġ( g av . contains ("/ resources / fonts ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnot Found Error (" Fonts Ġare Ġnot Ġserved !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! maven Facade . can Access Resource ( accessToken ?. identifier , Ġrepository , Ġg av )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġun authorized Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġjavadoc Folder . resolve ( repository ). resolve ( g av . toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Files . exists ( target ) Ġ&& Ġ( g av . getExtension () Ġ== Ġ" html " Ġ|| Ġg av . getExtension () Ġ== Ġ" css " Ġ|| Ġg av . getExtension () Ġ== Ġ" js ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= ĠContentType . get MimeType By Extension ( g av . getExtension ()) Ġ?: ĠContentType . PLAIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠFiles . read All Lines ( target ). join ToString ( separator Ġ= Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ avadoc Response ( contentType , Ġresponse ). as Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( no Such File Exception : ĠNoSuch File Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Found Error (" Resource Ġnot Ġfound !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjavadoc Jar Ġ= Ġresolve Javadoc Jar ( g av ) Ġ?: Ġreturn Ġnot Found Error (" Invalid Ġrequest ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmaven Facade . find Details ( Lookup Request ( accessToken , Ġrepository , Ġjavadoc Jar )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ({ Ġit . type Ġ=== ĠFILE Ġ}, Ġ{ ĠError Response ( BAD _ REQUEST , Ġ" Invalid Ġrequest ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ({ Ġit . name . endsWith ("- javadoc . jar ") Ġ}, Ġ{ Ġnot Found (" Please Ġdo Ġnot Ġprovide Ġa Ġdirect Ġlink Ġto Ġa Ġnon Ġjavadoc Ġfile ! ĠG AV Ġmust Ġbe Ġpointing Ġto Ġa Ġdirectory Ġor Ġa Ġjavadoc Ġfile !") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġextract Javadoc Jar ( javadoc Jar , Ġrepository , Ġjavadoc Folder , ĠaccessToken ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠJ avadoc Response ( ContentType . HTML , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġg av Ġfrom Ġthe Ġinput Ġg av , Ġso Ġwe Ġcan Ġhandle Ġpaths Ġthat Ġend Ġwith Ġ/ index . html Ġfor Ġexample . ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġcan Ġbe Ġextended Ġfurther , Ġto Ġsupport Ġeven Ġmore Ġways Ġto Ġget Ġthe Ġsame Ġjavadoc Ġwith Ġless ĠURL Ġparameters . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġresolve Javadoc Jar ( g av : ĠLocation ): ĠLocation ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg av . endsWith (". jar ") Ġ-> Ġg av ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg av . endsWith ("/ index . html ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġg av . location Before Last ("/ index . html ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġpath . toString (). split ("/") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split . size Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġsplit [ split . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġsplit [ split . size Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . resolve ("${ name }-${ version }- javadoc . jar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresolve Javadoc Jar ( g av . resolve (" index . html ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġthe Ġjavadoc Ġjar Ġfile Ġfrom Ġmaven Facade Ġusing Ġa ĠLookup Request . ĊĠĠĠĠ Ġ* ĠThen Ġit Ġwill Ġextract Ġthe Ġfiles Ġfrom Ġthe Ġjar Ġfile , Ġrename Ġindex . html Ġto Ġdoc index . html Ġand Ġgenerate Ġa Ġnew Ġindex . html Ġfile Ġusing Ġthe Ġwrite New Index Ġmethod . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġg av Ġthe Ġdirect Ġg av Ġto Ġthe Ġjavadoc Ġfile ĊĠĠĠĠ Ġ* Ġ@ param Ġjavadoc Folder Ġthe Ġtarget Ġfolder Ġin Ġwhich Ġthe Ġfiles Ġshould Ġbe Ġextracted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġextract Javadoc Jar ( g av : ĠLocation , Ġrepository : ĠString , Ġjavadoc Folder : ĠPath , Ġtoken : ĠAccess Token Dto ?): ĠResult < String , ĠError Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġg av . location Before Last ("/ "). toString () ĊĠĠĠĠĠĠĠ Ġval Ġtarget Folder Ġ= Ġjavadoc Folder . resolve ( repository ). resolve ( path ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Files . exists ( target Folder )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġok ( Files . read All Lines ( target Folder . resolve (" index . html ")). join ToString ( separator Ġ= Ġ"\ n ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( target Folder ) ĊĠĠĠĠĠĠĠ Ġval Ġtarget Jar Ġ= Ġtarget Folder . resolve (" doc . jar ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmaven Facade . find File ( Lookup Request ( token , Ġrepository , Ġg av )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. peek Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( target Jar . toString ()). use Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy To ( output ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġextract Javadoc ( target Jar , Ġtarget Folder ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . move ( target Folder . resolve (" index . html "), Ġtarget Folder . resolve (" doc index . html ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Index ( target Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . read All Lines ( target Folder . resolve (" index . html ")). join ToString ( separator Ġ= Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġindex . html Ġfile Ġas Ġa Ġ" holder " Ġfor Ġthe Ġactual Ġjavadoc , Ġso Ġin Ġthe Ġfuture Ġwe Ġcan Ġhave Ġcustom Ġthings Ġembedded , Ġlike ĊĠĠĠĠ Ġ* Ġswitching Ġbetween Ġdocuments Ġeasily , Ġdownloading Ġdocuments Ġetc . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWARNING / NOTE : Ġthis Ġhtml Ġcontains Ġan Ġiframe Ġwhich Ġpoints Ġto Ġa Ġdoc index . html , Ġthat Ġmust Ġbe Ġin Ġthe Ġsame Ġdirectory Ġas Ġthe Ġindex . html ! ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget Folder Ġthe Ġfolder Ġin Ġwhich Ġthe Ġindex Ġfile Ġwill Ġbe Ġgenerated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Index ( target Folder : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġtarget Folder . resolve (" index . html ") ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" html ") ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ< html Ġlang =" en "> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< head > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< meta Ġcharset =" UTF - 8 " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< title > Repos il ite Ġ- ĠJava Doc </ title > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ head > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< style > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ: root Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-- nav - height : Ġ 3 rem ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight : Ġcalc ( 1 0 0 vh Ġ- Ġ 1 7 0 px ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay : Ġflex ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjustify - content : Ġcenter ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalign - items : Ġcenter ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont - family : ĠArial , ĠHelvetica , Ġsans - serif ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sticky - nav Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : Ġfixed ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay : Ġflex ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflex - direction : Ġcolumn ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjustify - content : Ġcenter ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop : Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft : Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : Ġcalc ( 1 0 0 vw Ġ- Ġ 2 rem ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight : Ġvar (-- nav - height ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding - left : Ġ 1 rem ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding - right : Ġ 1 rem ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground - color : Ġ# 3 2 5 0 6 4 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor : Ġ# FFFFFF ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. doc Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder - top : Ġsolid Ġ 3 px Ġ# 5 8 8 DB 0 ; ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : Ġfixed ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop : Ġvar (-- nav - height ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft : Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : Ġ 1 0 0 %; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight : Ġcalc ( 1 0 0 vh Ġ- Ġvar (-- nav - height )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. row Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay : Ġflex ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjustify - content : Ġflex - start ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext - decoration : Ġnone ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor : Ġwhite ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : Ġauto ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin - right : Ġ 2 rem ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin - right : Ġ 2 rem ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa : hover Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor : Ġ# e 2 df df ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ style > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< body > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< div Ġclass =" sticky - nav "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< div Ġclass =" row "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< a Ġclass =" title " Ġhref ="/ ">< h 3 > Repos il ite </ h 3 ></ a > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ<!--< a Ġhref ="# p ">< h 5 > Download ĠJava Doc </ h 5 ></ a > Ġtodo --> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ div > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ div > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< iframe Ġid =" javadoc " Ġclass =" doc " Ġsrc =" doc index . html "></ iframe > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< script > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! window . location . href . endsWith ("/ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . getElementById (" javadoc "). src Ġ= Ġwindow . location . href Ġ+ Ġ'/ doc index . html ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ script > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ body > ĊĠĠĠĠĠĠĠ Ġ</ html > ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ ĠFiles . write ( index , Ġsource . toByteArray ( Charsets . UTF _ 8 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Javadoc ( jar FilePath : ĠPath , Ġdestination : ĠPath ): ĠResult < Blank , ĠError Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSome Ġchecks , Ġto Ġmake Ġsure Ġwe 're Ġworking Ġwith Ġvalid Ġfiles / paths . ĊĠĠĠĠĠĠĠ Ġif Ġ( Files . isDirectory ( jar FilePath )) Ġreturn Ġerror Response ( BAD _ REQUEST , Ġ" Java Doc Ġjar Ġpath Ġhas Ġto Ġbe Ġa Ġfile !") ĊĠĠĠĠĠĠĠ Ġif Ġ(! Files . isDirectory ( destination )) Ġreturn Ġerror Response ( BAD _ REQUEST , Ġ" Destination Ġmust Ġbe Ġa Ġdirectory !") ĊĠĠĠĠĠĠĠ Ġif Ġ(! jar FilePath . getSimpleName (). contains (" doc . jar ")) Ġreturn Ġerror Response ( BAD _ REQUEST , Ġ" Invalid Ġjavadoc Ġjar ! ĠName Ġmust Ġcontain : Ġ' doc . jar '") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠJar File ( jar FilePath . to AbsolutePath (). toString ()). use Ġ{ Ġjar File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jar File . getEntry (" index . html ") ?. isDirectory Ġ!= Ġfalse ) Ġ{ Ġ// ĠMake Ġsure Ġwe Ġhave Ġan Ġindex . html Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror Response ( Http Code . INTERNAL _ SERVER _ ERROR , Ġ" Invalid Ġdoc . jar Ġgiven Ġfor Ġextraction !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġextract Javadoc ( destination , Ġjar File ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar File . close () Ġ// ĠSince Ġit Ġmay Ġstill Ġuse Ġthe Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( jar FilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Javadoc ( destination : ĠPath , Ġjar File : ĠJar File ): ĠResult < Blank , ĠError Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjar File . entries (). as Sequence (). forEach Ġ{ Ġfile Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjava File Ġ= Ġdestination . resolve ( file . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directory ( java File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar File . getInputStream ( file ). use Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava File . output Stream (). use Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . copy To ( output ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġok () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror Response ( Http Code . INTERNAL _ SERVER _ ERROR , Ġexception . message . or Empty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Logger (): ĠLogger Ġ= ĊĠĠĠĠĠĠĠ Ġjournal ist . logger Ċ Ċ }