/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 , ĠOK 2 ĠConsult ing ĠLtd Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . github . ok 2 c . hc . release . pom Ċ Ċ import Ġorg . dom 4 j . Document Ċ import Ġorg . dom 4 j . io . Output Format Ċ import Ġorg . dom 4 j . io . SAX Reader Ċ import Ġorg . dom 4 j . io . XML Writer Ċ import Ġjava . io . Reader Ċ import Ġjava . io . Writer Ċ import Ġjava . net . URI Ċ import Ġjava . net . URL Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ import Ġkotlin . streams . toList Ċ Ċ enum Ġclass ĠDev Phase ( val Ġid : ĠString ) Ġ{ ĊĠĠĠ ĠAL PH A (" alpha "), ĠB ETA (" beta "), ĠUNS PE CI FIED ("") Ċ } Ċ Ċ class ĠAr te fact Version Ġinternal Ġconstructor ( val Ġsequence : ĠList < Int >, Ġval Ġphase : ĠDev Phase , Ġval Ġqualifier : ĠString ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠ Ġval Ġmajor : ĠInt ? Ġget () Ġ= Ġif Ġ( sequence . size Ġ> Ġ 0 ) Ġsequence [ 0 ] Ġelse Ġnull ĊĠĠĠ Ġval Ġminor : ĠInt ? Ġget () Ġ= Ġif Ġ( sequence . size Ġ> Ġ 1 ) Ġsequence [ 1 ] Ġelse Ġnull ĊĠĠĠ Ġval Ġpatch : ĠInt ? Ġget () Ġ= Ġif Ġ( sequence . size Ġ> Ġ 2 ) Ġsequence [ 2 ] Ġelse Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġnormalized Qualifier Ġ= Ġqualifier ?. toUpperCase ( Locale . ROOT ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( major : ĠInt , Ġqualifier : ĠString ? Ġ= Ġnull ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( listOf ( major ), ĠDev Phase . UNSPECIFIED , Ġqualifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( major : ĠInt , Ġminor : ĠInt , Ġqualifier : ĠString ? Ġ= Ġnull ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( listOf ( major , Ġminor ), ĠDev Phase . UNSPECIFIED , Ġqualifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( major : ĠInt , Ġminor : ĠInt , Ġpatch : ĠInt , Ġqualifier : ĠString ? Ġ= Ġnull ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( listOf ( major , Ġminor , Ġpatch ), ĠDev Phase . UNSPECIFIED , Ġqualifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( qual ifier : ĠString ? Ġ= Ġnull ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( emptyList (), ĠDev Phase . UNSPECIFIED , Ġqualifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( major : ĠInt , Ġminor : ĠInt , Ġphase : ĠDev Phase , Ġdev : ĠInt , Ġqualifier : ĠString ? Ġ= Ġnull ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( listOf ( major , Ġminor , Ġdev ), Ġphase , Ġqualifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse ( s : ĠCharSequence ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier : ĠCharSequence ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs 2 : ĠCharSequence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġs . indexOf ('- ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs 2 Ġ= Ġs . sub Sequence ( 0 , Ġidx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Ġ= Ġs . sub Sequence ( idx Ġ+ Ġ 1 , Ġs . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs 2 Ġ= Ġs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġs 2 . split ('.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversions Ġ= Ġtokens . stream (). map Ġ{ Ġtoken Ġ-> ĠInteger . parseInt ( token ) Ġ}. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qual ifier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregexp Ġ= Ġ""" ^( alpha | beta )( \ d + )( -( .* )) ?$ """. to Regex ( Regex Option . IGNORE _ CASE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Result Ġ= Ġregexp . match Ent ire ( qual ifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphase Text Ġ= Ġmatch Result . group Values [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdev Phase Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphase Text . equals (" alpha ", Ġtrue ) Ġ-> ĠDev Phase . ALPHA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphase Text . equals (" beta ", Ġtrue ) Ġ-> ĠDev Phase . B ETA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dev Phase Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions . add ( match Result . group Values [ 2 ]. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier 2 Ġ= Ġmatch Result . group Values [ 4 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( versions , Ġdev Phase , Ġif Ġ( qual ifier 2 . isNotBlank ()) Ġqualifier 2 Ġelse Ġnull Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( versions , ĠDev Phase . UNSPECIFIED , Ġqualifier ?. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( emptyList (), ĠDev Phase . UNSPECIFIED , Ġs . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ== Ġother ?. java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠAr te fact Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsequence Ġ== Ġother . sequence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġphase Ġ== Ġother . phase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġnormalized Qualifier . equals ( other . normalized Qualifier ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsequence . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġphase . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( normalized Qualifier ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġsequence . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġsequence . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( phase ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDev Phase . ALPHA , ĠDev Phase . B ETA Ġ-> Ġbuf . append ("- "). append ( phase . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbuf . append ('.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ('.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( sequence [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( qual ifier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buf . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ('- ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( qual ifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuf . toString () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠP om ( val Ġname : ĠString ?, ĊĠĠĠĠĠĠĠĠĠ Ġval Ġparent : ĠP om Artifact ?, ĊĠĠĠĠĠĠĠĠĠ Ġval Ġart ef act : ĠP om Artifact ?, ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsc m : ĠS cm ?, ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdistribution Management : ĠDistribution Management ?, ĊĠĠĠĠĠĠĠĠĠ Ġval Ġmodules : ĠList < String >) Ġ{ ĊĊĠĠĠ Ġval ĠgroupId : ĠString ? Ġget () Ġ= Ġart ef act ?. groupId Ġ?: Ġparent ?. groupId ĊĠĠĠ Ġval Ġart ef act Id : ĠString ? Ġget () Ġ= Ġart ef act ?. id ĊĠĠĠ Ġval Ġversion : ĠAr te fact Version ? Ġget () Ġ= Ġart ef act ?. parsed Version Ġ?: Ġparent ?. parsed Version ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" P om ( name ='$ name ', Ġparent =$ parent , Ġart ef act =$ art ef act )" ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠP om Artifact ( val ĠgroupId : ĠString ?, Ġval Ġid : ĠString , Ġval Ġversion : ĠString ?) Ġ{ ĊĊĠĠĠ Ġinternal Ġval Ġparsed Version Ġ= Ġif Ġ( version Ġ!= Ġnull ) ĠAr te fact Version . parse ( version ) Ġelse Ġnull ĊĠĠĠ Ġval Ġmajor : ĠInt ? Ġget () Ġ= Ġparsed Version ?. major ĊĠĠĠ Ġval Ġminor : ĠInt ? Ġget () Ġ= Ġparsed Version ?. minor ĊĠĠĠ Ġval Ġpatch : ĠInt ? Ġget () Ġ= Ġparsed Version ?. patch ĊĠĠĠ Ġval Ġphase : ĠDev Phase ? Ġget () Ġ= Ġparsed Version ?. phase ĊĠĠĠ Ġval Ġqualifier : ĠString ? Ġget () Ġ= Ġparsed Version ?. qual ifier ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" P om Artifact ( groupId ='$ groupId ', Ġid ='$ id ', Ġversion ='$ version ')" ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠS cm ( val Ġconnection : ĠString ?, Ġval Ġtag : ĠString ?, Ġval Ġuri Pattern : ĠString ?) Ġ{ ĊĊĠĠĠ Ġval Ġuri : ĠURI ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! uri Pattern . isNull Or Blank () Ġ&& Ġ! tag . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURI . create ( uri Pattern . replace ("\ ${ project . scm . tag }", Ġtag , Ġignore Case Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Sc m ( connection ='$ connection ', Ġtag ='$ tag ', Ġuri Pattern ='$ uri Pattern ')" ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠDistribution Management ( val Ġsite : ĠSite ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Distribution Management ( site =$ site )" ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠSite ( val Ġid : ĠString ?, Ġval Ġname : ĠString ?, Ġval Ġurl : ĠString ?) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Site ( id ='$ id ', Ġname ='$ name ', Ġurl ='$ url ')" ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠP om Tool Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġcreate P om Artifact ( groupId : ĠString ?, Ġartifact Id : ĠString ?, Ġversion : ĠString ?): ĠP om Artifact ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! artifactId . isNull Or Blank ()) ĠP om Artifact ( groupId , Ġartifact Id , Ġversion ) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread ( reader : ĠReader ): ĠDocument Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSAX Reader (). read ( reader ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread ( pom URL : ĠURL ): ĠDocument Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠSAX Reader () ĊĠĠĠĠĠĠĠ Ġreturn Ġreader . read ( pom URL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread ( path : ĠPath ): ĠDocument Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠSAX Reader () ĊĠĠĠĠĠĠĠ Ġreturn Ġreader . read ( path . to File ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdigest ( document : ĠDocument ): ĠP om Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Element Ġ= Ġdocument . root Element ĊĠĠĠĠĠĠĠ Ġval Ġparent Element Ġ= Ġroot Element . element (" parent ") ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġroot Element . element (" name ") ?. text Trim ĊĠĠĠĠĠĠĠ Ġval Ġart ef act Ġ= Ġcreate P om Artifact ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Element . element (" groupId ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Element . element (" artifactId ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Element . element (" version ") ?. text Trim ) ĊĠĠĠĠĠĠĠ Ġval Ġparent Ar te fact Ġ= Ġif Ġ( parentElement Ġ!= Ġnull ) Ġcreate P om Artifact ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Element . element (" groupId ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Element . element (" artifactId ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Element . element (" version ") ?. text Trim ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsc m Element Ġ= Ġroot Element . element (" scm ") ĊĠĠĠĠĠĠĠ Ġval Ġsc m Ġ= Ġif Ġ( scm Element Ġ!= Ġnull ) ĠS cm ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Element . element (" connection ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Element . element (" tag ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Element . element (" url ") ?. text Trim ) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġdm Element Ġ= Ġroot Element . element (" distribution Management ") ĊĠĠĠĠĠĠĠ Ġval Ġsite Element Ġ= Ġdm Element ?. element (" site ") ĊĠĠĠĠĠĠĠ Ġval Ġdm Ġ= Ġif Ġ( site Element Ġ!= Ġnull ) ĠDistribution Management ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSite ( site Element . element (" id ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite Element . element (" name ") ?. text Trim , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite Element . element (" url ") ?. text Trim )) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġmodules Element Ġ= Ġroot Element . element (" modules ") ĊĠĠĠĠĠĠĠ Ġval Ġmodules : ĠList < String > Ġ= Ġmodules Element ?. elements (" module ") ?. stream ()?. map Ġ{ Ġit . text Trim Ġ} ?. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġreturn ĠP om ( name , Ġparent Ar te fact , Ġart ef act , Ġsc m , Ġdm , Ġmodules ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdigest ( reader : ĠReader ): ĠP om Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdigest ( read ( reader )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdigest ( path : ĠPath ): ĠP om Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdigest ( read ( path )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdigest ( url : ĠURL ): ĠP om Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdigest ( read ( url )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate P om Version ( document : ĠDocument , Ġversion : ĠString , Ġout : ĠWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Element Ġ= Ġdocument . root Element ĊĠĠĠĠĠĠĠ Ġval Ġversion Element Ġ= Ġroot Element . element (" version ") ĊĠĠĠĠĠĠĠ Ġif Ġ( version Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Element . text Ġ= Ġversion ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Element . element (" parent ") ?. element (" version ") ?. text Ġ= Ġversion ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroot Element . element (" scm ") ?. element (" tag ") ?. text Ġ= Ġversion ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Format Ġ= ĠOutput Format () ĊĠĠĠĠĠĠĠ Ġval Ġxml Writer Ġ= ĠXML Writer ( out , Ġoutput Format ) ĊĠĠĠĠĠĠĠ Ġxml Writer . write ( document ) ĊĠĠĠĠĠĠĠ Ġxml Writer . flush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate P om Version ( reader : ĠReader , Ġversion : ĠString , Ġout : ĠWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate P om Version ( read ( reader ), Ġversion , Ġout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate P om Version ( path : ĠPath , Ġversion : ĠString , Ġout : ĠWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate P om Version ( read ( path ), Ġversion , Ġout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate P om Version ( url : ĠURL , Ġversion : ĠString , Ġout : ĠWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate P om Version ( read ( url ), Ġversion , Ġout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate P om Version ( path : ĠPath , Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpom File Ġ= Ġpath . to File () ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠSAX Reader () ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġreader . read ( pom File ) ĊĠĠĠĠĠĠĠ Ġpom File . writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate P om Version ( document , Ġversion , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnon Snapshot Qualifier ( version : ĠAr te fact Version ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġversion . qual ifier ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs . isNull Or Blank () Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs . equals (" SNAPSHOT ", Ġtrue ) Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs . startsWith (" RC ", Ġtrue ) Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs . endsWith ("- SNAPSHOT ", Ġtrue ) Ġ-> Ġs . substring ( 0 , Ġs . last Index Ġ- Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġversion . qual ifier ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetermine Next Release Version ( version : ĠAr te fact Version ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġnon Snapshot Qualifier ( version ) ĊĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( version . sequence , Ġversion . phase , Ġqualifier ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetermine Next Snapshot Version ( version : ĠAr te fact Version ): ĠAr te fact Version Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġnon Snapshot Qualifier ( version ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Sequence Ġ= Ġversion . sequence . to Mutable List () ĊĠĠĠĠĠĠĠ Ġif Ġ( new Sequence . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Sequence [ new Sequence . last Index ] Ġ= Ġnew Sequence [ new Sequence . last Index ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠAr te fact Version ( new Sequence , Ġversion . phase , Ġif Ġ( qual ifier Ġ== Ġnull ) Ġ" SNAPSHOT " Ġelse Ġ"${ qual ifier }- SNAPSHOT ") ĊĠĠĠ Ġ} Ċ Ċ }