package Ġcom . be ust . k ob alt . maven Ċ Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġorg . xml . sax . Input Source Ċ import Ġjava . io . File Ċ import Ġjava . io . FileReader Ċ import Ġjavax . xml . bind . JAXB Context Ċ import Ġjavax . xml . bind . annotation . Xml Any Element Ċ import Ġjavax . xml . bind . annotation . XmlElement Ċ import Ġjavax . xml . bind . annotation . Xml Root Element Ċ import Ġjavax . xml . parsers . SAX Parser Factory Ċ import Ġjavax . xml . transform . sax . SAX Source Ċ Ċ @ Xml Root Element ( name Ġ= Ġ" project ") Ċ class ĠP om Project Ġ{ ĊĠĠĠ Ġvar Ġmodel Version : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar ĠgroupId : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġartifact Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġversion : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdescription : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpackaging : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġlicenses Ġ: ĠLicense s ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdevelopers : ĠDevelopers ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsc m : ĠS cm ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġproperties : ĠProperties ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġparent : ĠParent ? Ġ= Ġnull ĊĠĠĠ Ġ@ XmlElement ( name Ġ= Ġ" dependencies ") Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġpom Dependencies : ĠDependencies ? Ġ= Ġnull ĊĠĠĠ Ġval Ġdependencies : ĠList < Dependency > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pom Dependencies Ġ!= Ġnull ) Ġpom Dependencies !!. dependencies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġempty List < Dependency >() ĊĊĠĠĠ Ġvar Ġplugin Repositories : ĠPlugin Repositories ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġproperty Map Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠ Ġfun Ġproperty Value ( s : ĠString ) Ġ: ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( property Map . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties ?. properties ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Map . put ( it . nodeName , Ġit . textContent . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġproperty Map [ s ] ĊĠĠĠ Ġ} Ċ } Ċ Ċ // fun Ġmain ( argv : ĠArray < String >) Ġ{ Ċ // ĠĠĠ Ġval Ġp Ġ= ĠP om 2 ( File ("/ Users / be ust / t / pom . xml ")) Ċ // ĠĠĠ Ġval Ġpom Ġ= Ġp . pom Ċ // ĠĠĠ Ġprintln (" Dependencies : Ġ" Ġ+ Ġpom . dependencies [ 0 ]) Ċ //} Ċ Ċ class ĠEither < E , ĠV >( val Ġexception : ĠE ?, Ġval Ġvalue : ĠV ?) Ċ Ċ class ĠP om 2 ( val Ġpom Project : ĠP om Project ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( document File : ĠFile , Ġdependency Manager : ĠDependency Manager ): ĠEither < Exception , ĠP om 2 > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjax b Context Ġ= ĠJAXB Context . newInstance ( P om Project :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun marshaller Ġ= Ġjax b Context . create Unmarshaller () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs ax Ġ= ĠSAX Parser Factory . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ax . is Namespace Aware Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= Ġs ax . new SAX Parser (). xml Reader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġer Ġ= ĠSAX Source ( reader , ĠInput Source ( FileReader ( document File ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġun marshaller . un marshal ( er ) Ġas ĠP om Project ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . parent ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġwith ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgroupId Ġ+ Ġ":" Ġ+ Ġartifact Id Ġ+ Ġ":" Ġ+ Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdep Ġ= Ġdependency Manager . create Maven ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEither ( null , ĠP om 2 ( result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEither ( ex , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠProperties Ġ{ ĊĠĠĠ Ġ@ Xml Any Element Ġ@ Jvm Field ĊĠĠĠ Ġval Ġproperties Ġ= Ġarray ListOf < Element >() Ċ } Ċ Ċ class ĠDevelopers Ġ{ ĊĠĠĠ Ġ@ XmlElement ( name Ġ= Ġ" developer ") Ġ@ Jvm Field ĊĠĠĠ Ġval Ġdevelopers Ġ= Ġarray ListOf < Developer >() Ċ } Ċ Ċ class ĠDeveloper Ġ{ ĊĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġid : ĠString ? Ġ= Ġnull Ċ } Ċ Ċ class ĠLicense s Ġ{ ĊĠĠĠ Ġ@ XmlElement ( name Ġ= Ġ" license ") Ġ@ Jvm Field ĊĠĠĠ Ġval Ġlicenses Ġ= Ġarray ListOf < License >() Ċ } Ċ Ċ class ĠLicense Ġ{ ĊĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdistribution : ĠString ? Ġ= Ġnull Ċ } Ċ Ċ class ĠPlugin Repositories Ġ{ ĊĠĠĠ Ġ@ XmlElement ( name Ġ= Ġ" plugin Repository ") Ġ@ Jvm Field ĊĠĠĠ Ġval Ġplugin Repository Ġ= Ġarray ListOf < Plugin Repository >() Ċ } Ċ Ċ class ĠPlugin Repository Ġ{ ĊĠĠĠ Ġvar Ġid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull Ċ } Ċ Ċ class ĠDependencies Ġ{ ĊĠĠĠ Ġ@ XmlElement ( name Ġ= Ġ" dependency ") Ġ@ Jvm Field ĊĠĠĠ Ġval Ġdependencies Ġ= Ġarray ListOf < Dependency >() Ċ } Ċ Ċ class ĠDependency Ġ{ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar ĠgroupId : ĠString Ġ= Ġ"" ĊĠĠĠ Ġfun ĠgroupId ( pom : ĠP om 2 ) Ġ: ĠString Ġ= Ġexpand Variable ( groupId , Ġpom ) ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġartifact Id : ĠString Ġ= Ġ"" ĊĠĠĠ Ġfun Ġartifact Id ( pom : ĠP om 2 ) Ġ: ĠString Ġ= Ġexpand Variable ( artifactId , Ġpom ) ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġversion : ĠString Ġ= Ġ"" ĊĠĠĠ Ġfun Ġversion ( pom : ĠP om 2 ) Ġ: ĠString Ġ= Ġexpand Variable ( version , Ġpom ) ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġoptional : ĠString Ġ= Ġ" false " ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġscope : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġpackaging : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġfun Ġid ( pom : ĠP om 2 ) Ġ= ĠgroupId ( pom ) Ġ+ Ġ":" Ġ+ Ġartifact Id ( pom ) Ġ+ Ġ":" Ġ+ Ġversion ( pom ) ĊĊĠĠĠ Ġval Ġmust Download : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! Ġoptional . to Boolean () Ġ&& Ġ" provided " Ġ!= Ġscope Ġ&& Ġ" test " Ġ!= Ġscope ĊĊĠĠĠ Ġval ĠisValid Ġ: ĠBoolean Ġget () Ġ= Ġtrue Ġ//! Ġis Variable ( groupId ) Ġ&& Ġ! Ġis Variable ( artifactId ) Ġ&& Ġ! Ġis Variable ( version ) ĊĊĠĠĠ Ġprivate Ġfun Ġextract Variable ( s : ĠString ) Ġ= Ġif Ġ( s . startsWith ("\ ${ ") Ġ&& Ġs . endsWith (" } ")) Ġs . substring ( 2 , Ġs . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġelse Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġexpand Variable ( s : ĠString , Ġpom : ĠP om 2 ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= Ġextract Variable ( s ) ĊĠĠĠĠĠĠĠ Ġif Ġ( variable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Expand ing Ġvariable Ġ$ variable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġpom . pom Project . property Value ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠS cm Ġ{ ĊĠĠĠ Ġvar Ġconnection : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdeveloper Connection : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull Ċ } Ċ Ċ class ĠParent Ġ{ ĊĠĠĠ Ġvar ĠgroupId : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġartifact Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġversion : ĠString ? Ġ= Ġnull Ċ } ĊĊ