/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠInter shop ĠCom munications ĠAG . Ċ Ġ* Ċ Ġ* Ġ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 . inter shop . gradle . jax b . task Ċ Ċ import Ġcom . inter shop . gradle . jax b . utils . getValue Ċ import Ġcom . inter shop . gradle . jax b . utils . setValue Ċ import Ġcom . inter shop . gradle . jax b . extension . Jax b Extension Ċ import Ġcom . inter shop . gradle . jax b . extension . Jax b Extension . Companion . DEFAULT _ SCHEMA GEN _ TASK _ CLASS _ NAME Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . file . Directory Ċ import Ġorg . gradle . api . file . Directory Property Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . model . ObjectFactory Ċ import Ġorg . gradle . api . plugins . Java Plugin Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġorg . gradle . api . tasks . Classpath Ċ import Ġorg . gradle . api . tasks . Compile Classpath Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Input Directory Ċ import Ġorg . gradle . api . tasks . Input Files Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . gradle . api . tasks . Output Directory Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġorg . gradle . kotlin . dsl . with Gro ovy Builder Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠThis Ġtask Ġgenerates Ġa Ġschema Ġfile Ġfrom Ċ Ġ* Ġexisting Ġsources . Ċ Ġ*/ Ċ abstract Ġclass ĠJava To Schema Task : ĠDefault Task () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġservice Ġof ĠObject Factory Ġ( See Ġ" Service Ġinjection " Ġin ĠGradle Ġdocumentation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Inject ĊĠĠĠ Ġabstract Ġval Ġobject Factory : ĠObject Factory ĊĊĠĠĠ Ġprivate Ġval Ġoutput Dir Property : ĠDirectory Property Ġ= Ġobject Factory . directory Property () ĊĠĠĠ Ġprivate Ġval Ġinput Dir Property : ĠDirectory Property Ġ= Ġobject Factory . directory Property () ĊĠĠĠ Ġprivate Ġval Ġexclude s Property Ġ= Ġobject Factory . list Property ( String :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġincludes Property Ġ= Ġobject Factory . list Property ( String :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġnamespace configs Property Ġ= Ġobject Factory . map Property ( String :: class . java , ĠString :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġepisode Property Ġ= Ġobject Factory . property ( String :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġant Task ClassName Property Ġ= Ġobject Factory . property ( String :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġant Task ClassName Property . convention ( DEFAULT _ SCHEMA GEN _ TASK _ CLASS _ NAME ) ĊĠĠĠĠĠĠĠ Ġepisode Property . convention ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOutput Ġdirectory Ġfor ĠSchema Ġgen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġoutput Dir ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġvar Ġoutput Dir : ĠFile ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġoutput Dir Property . get (). as File ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġoutput Dir Property . set ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġoutput Ġdirectory Ġprovider . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Output Dir ( output Dir : ĠProvider < Directory >) Ġ= Ġoutput Dir Property . set ( output Dir ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInput Ġdirectory Ġfor ĠSchema Ġgen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġinput Dir ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Input Directory ĊĠĠĠ Ġvar Ġinput Dir : ĠFile ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput Dir Property . get (). as File ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġinput Dir Property . set ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġinput Ġdirectory Ġprovider . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Input Dir ( input Dir : ĠProvider < Directory >) Ġ= Ġinput Dir Property . set ( input Dir ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġexclude s Ġpatterns Ġfor Ġinput Ġdirectory . ĊĠĠĠĠ Ġ* Ġ@ property Ġexclude s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġexclude s : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġexclude s Property . getOrElse ( listOf < String >()) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġexclude s Property . set ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġexclude s Ġprovider . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Exclude s ( exclude s : ĠProvider < Mutable List < String >>) Ġ= Ġexclude s Property . set ( exclude s ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġincludes Ġpatterns Ġfor Ġinput Ġdirectory . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġincludes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġincludes : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġincludes Property . getOrElse ( listOf < String >()) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġincludes Property . set ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġincludes Ġprovider . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Includes ( includes : ĠProvider < Mutable List < String >>) Ġ= Ġincludes Property . set ( includes ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvider Ġfor Ġa Ġmap Ġof Ġname Ġspace Ġconfigurations . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġnamespace configs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġnamespace configs : ĠMap < String , ĠString > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnamespace configs Property . getOrElse ( map Of < String , ĠString >()) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġnamespace configs Property . set ( value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġnamespace configs Ġprovider . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Namespace configs ( namespace configs : ĠProvider < Mutable Map < String , ĠString >>) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace configs Property . set ( namespace configs ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecial Ġparameter Ġ( episode ) Ġsee Ġsche mag en Ġdocumentation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġepisode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġepisode : ĠString Ġby Ġepisode Property ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġinput Ġproperty Ġepisode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Episode ( episode : ĠProvider < String >) Ġ= Ġepisode Property . set ( episode ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġthe Ġclassname Ġof Ġjav agen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġant Task ClassName ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġvar Ġant Task ClassName : ĠString Ġby Ġant Task ClassName Property ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġset Ġthe Ġclassname Ġof Ġjav agen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprovide Ant Task ClassName ( ant Task ClassName : ĠProvider < String >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġant Task ClassName Property . set ( ant Task ClassName ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass path Ġfiles Ġfor ĠJava Ġcode Ġgeneration Ġ( see ĠJ ax b Ġconfiguration Ġ( JAXB _ CONFIGURATION _ NAME )). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġjax b Classpath files ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Classpath ĊĠĠĠ Ġval Ġjax b Classpath files Ġ: ĠFile Collection Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreturn Files Ġ= Ġproject . files () ĊĠĠĠĠĠĠĠ Ġreturn Files . from ( project . configurations . find ByName ( Jax b Extension . JAXB _ CONFIGURATION _ NAME )) ĊĠĠĠĠĠĠĠ Ġreturn Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdditional Ġclasspath Ġfiles Ġfor ĠJava Ġcode Ġgeneration Ġ( see ĠJ ax b Ġconfiguration Ġ( ADD _ JAXB _ CONFIGURATION _ NAME )). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġadd jax b Classpath files ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Classpath ĊĠĠĠ Ġval Ġadd jax b Classpath files Ġ: ĠFile Collection Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreturn Files Ġ= Ġproject . files () ĊĠĠĠĠĠĠĠ Ġreturn Files . from ( project . configurations . find ByName ( Jax b Extension . ADD _ JAXB _ CONFIGURATION _ NAME )) ĊĠĠĠĠĠĠĠ Ġreturn Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass path Ġfiles Ġfor ĠJava Ġcode Ġgeneration . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġclasspath files ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Compile Classpath ĊĠĠĠ Ġval Ġclasspath files Ġ: ĠFile Collection Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreturn Files Ġ= Ġproject . files () ĊĠĠĠĠĠĠĠ Ġreturn Files . from ( project . configurations . find ByName ( Java Plugin . COMPILE _ CLAS SPATH _ CONFIGURATION _ NAME )) ĊĠĠĠĠĠĠĠ Ġreturn Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġgenerates Ġa Ġschema Ġfiles Ġfrom Ġjava ĊĠĠĠĠ Ġ* Ġsource Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġgenerate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarg Map Ġ= Ġmutable Map Of < String , ĠString ? >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" dest dir " Ġto Ġoutput Dir . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" srcdir " Ġto Ġinput Dir . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" include an tr untime " Ġto Ġ" false " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( episode . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Map [" episode "] Ġ= Ġepisode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( project . logger . is Info Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Arguments Ġfor Ġschema : Ġ{}", Ġarg Map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclasspath Ġ= Ġclasspath files Ġ+ Ġjax b Classpath files Ġ+ Ġadd jax b Classpath files ĊĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" javax . xml . access External Schema ", Ġ" all ") ĊĊĠĠĠĠĠĠĠ Ġant . with Gro ovy Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" task def "( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" sche mag en ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" classname " Ġto Ġant Task ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" classpath " Ġto Ġjax b Classpath files . as Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sche mag en "( arg Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace configs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" schema " (" namespace " Ġto Ġit . key , Ġ" file " Ġto Ġit . value Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincludes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" include " (" name " Ġto Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude s . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exclude " (" name " Ġto Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" classpath " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pat he lement "( Ġ" path " Ġto Ġclasspath . as Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSystem . clear Property (" javax . xml . access External Schema ") ĊĠĠĠ Ġ} Ċ } Ċ