package Ġio . v rap . rm f . codegen . di Ċ Ċ import Ġcom . google . inject . Abstract Module Ċ import Ġcom . google . inject . Provides Ċ import Ġcom . google . inject . Singleton Ċ import Ġio . v rap . rm f . codegen . common . generator . core . Resource Collection Ċ import Ġio . v rap . rm f . codegen . io . Data Sink Ċ import Ġio . v rap . rm f . codegen . io . File Data Sink Ċ import Ġio . v rap . rm f . codegen . types . Language Base Types Ċ import Ġio . v rap . rm f . codegen . types . V rap ObjectType Ċ import Ġio . v rap . rm f . codegen . types . V rap Type Ċ import Ġio . v rap . rm f . codegen . types . V rap Type Provider Ċ import Ġio . v rap . rm f . r aml . model . elements . Named Element Ċ import Ġio . v rap . rm f . r aml . model . modules . Api Ċ import Ġio . v rap . rm f . r aml . model . resources . Method Ċ import Ġio . v rap . rm f . r aml . model . resources . Resource Ċ import Ġio . v rap . rm f . r aml . model . types . Any Type Ċ import Ġio . v rap . rm f . r aml . model . types . ObjectType Ċ import Ġio . v rap . rm f . r aml . model . types . StringType Ċ import Ġio . v rap . rm f . r aml . model . types . Union Type Ċ import Ġio . v rap . rm f . r aml . model . types . util . Types Switch Ċ import Ġorg . eclipse . emf . ecore . EObject Ċ import Ġorg . eclipse . emf . ecore . util . Comp osed Switch Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . URI Ċ import Ġjava . nio . file . Path Ċ Ċ @ SuppressWarnings (" unused ") Ċ class ĠGenerator Module Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapi Provider : ĠApi Provider , ĊĠĠĠĠĠĠĠ Ġ@ get : Provides Ġ@ get : Singleton Ġval Ġgenerator Config : Ġio . v rap . rm f . codegen . Code Generator Config , ĊĠĠĠĠĠĠĠ Ġ@ get : Provides Ġ@ get : Singleton Ġval Ġlanguage Base Types : ĠLanguage Base Types , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Package : ĠString Ġ= Ġ" io / v rap / rm f " ĊĊ Ċ ) Ġ: ĠAbstract Module () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( io . v rap . rm f . codegen . di . Generator Module :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfilter Switch Ġ= ĠUser Provided Resources Filter Switch () ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Default Package ĊĠĠĠ Ġfun Ġdefault Package (): ĠString Ġ= Ġdefault Package ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Output Folder ĊĠĠĠ Ġfun Ġout pu Folder (): ĠPath Ġ= Ġgenerator Config . output Folder ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġdata Sink (@ Output Folder Ġpath : ĠPath ): ĠData Sink Ġ= ĠFile Data Sink ( path ) ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġcustom Type Mapping (): ĠMap < String , ĠV rap Type > Ġ= Ġgenerator Config . custom Type Mapping ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Base PackageName ĊĠĠĠ Ġfun Ġprovide PackageName ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Default Package Ġdefault Package : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi : ĠApi ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( generator Config . base PackageName Ġ== Ġnull Ġ&& Ġapi . base Uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn (" Could Ġnot Ġfind Ġproper Ġpackage Ġname Ġconfiguration . ĠUsing Ġdefault Ġ$ default Package ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefault Package ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerator Config . base PackageName Ġ?: Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURI ( api . base Uri . expand ()). host . split (". "). reversed (). join ToString ("/") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn (" Error Ġwhile Ġtrying Ġto Ġextract Ġbase Ġpackage Ġfrom Ġurl , Ġresolving Ġto Ġdefault Ġpackage Ġ'$ default Package '", e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Package ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Model PackageName ĊĠĠĠ Ġfun Ġprovide Model PackageName (@ Base PackageName Ġbase PackageName : ĠString ): ĠString Ġ= Ġgenerator Config . model Package ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġif Ġ( base PackageName . isBlank ()) Ġ" models " Ġelse Ġ"$ base PackageName / models " ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Client PackageName ĊĠĠĠ Ġfun Ġprovide Client PackageName (@ Base PackageName Ġbase PackageName : ĠString ): ĠString Ġ= Ġgenerator Config . client Package ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġif Ġ( base PackageName . isBlank ()) Ġ" client " Ġelse Ġ"$ base PackageName / client " ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Shared PackageName ĊĠĠĠ Ġfun Ġprovide Shared PackageName (@ Base PackageName Ġbase PackageName : ĠString ): ĠString Ġ= Ġgenerator Config . shared Package ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġif Ġ( base PackageName . isBlank ()) Ġ" shared " Ġelse Ġ"$ base PackageName / shared " ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide R aml Model (): ĠApi Ġ= Ġapi Provider . api ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Api Git Hash ĊĠĠĠ Ġfun Ġprovide Git Hash (): ĠString Ġ= Ġapi Provider . git Hash ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ All Any Types ĊĠĠĠ Ġfun Ġall Any Types ( r aml Api : ĠApi ): ĠList < Any Type > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Any Type >() ĊĠĠĠĠĠĠĠ Ġr aml Api . types ?. forEach Ġ{ Ġresult . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġr aml Api . uses ?. flatMap Ġ{ Ġit . library . types Ġ} ?. forEach Ġ{ Ġresult . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . filter Ġ{ Ġfilter Switch . do Switch ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġall Object Types (@ All Any Types Ġany TypeList : ĠMutable List < Any Type >): ĠList < ObjectType > Ġ= Ġany TypeList . filter Ġ{ Ġit Ġis ĠObjectType Ġ}. map Ġ{ Ġit Ġas ĠObjectType Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġall Union Types (@ All Any Types Ġany TypeList : ĠMutable List < Any Type >): ĠList < Union Type > Ġ= Ġany TypeList . filter Ġ{ Ġit Ġis ĠUnion Type Ġ}. map Ġ{ Ġit Ġas ĠUnion Type Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Enum String Types ĊĠĠĠ Ġfun Ġall Enum String Types (@ All Any Types Ġany TypeList : ĠMutable List < Any Type >): ĠList < StringType > Ġ= Ġany TypeList . filter Ġ{ Ġit Ġis ĠString Type Ġ&& Ġit . enum . isNotEmpty () Ġ}. map Ġ{ Ġit Ġas ĠString Type Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Pattern String Types ĊĠĠĠ Ġfun Ġall Pattern String Types (@ All Any Types Ġany TypeList : ĠMutable List < Any Type >): ĠList < StringType > Ġ= Ġany TypeList . filter Ġ{ Ġit Ġis ĠString Type Ġ&& Ġit . pattern Ġ!= Ġnull Ġ}. map Ġ{ Ġit Ġas ĠString Type Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Named Scalar Types ĊĠĠĠ Ġfun Ġall Named Scalar Types (@ All Any Types Ġany TypeList : ĠMutable List < Any Type >): ĠList < StringType > Ġ= Ġany TypeList . filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit Ġis ĠString Type Ġ&& Ġit . pattern Ġ== Ġnull Ġ&& Ġit . enum . isNull OrEmpty () ĊĠĠĠ Ġ}. map Ġ{ Ġit Ġas ĠString Type Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġall Resources ( r aml Api : ĠApi ): ĠList < Resource > Ġ= Ġr aml Api . all Cont ained Resources ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġall Resource Methods ( r aml Api : ĠApi ): ĠList < Method > Ġ= Ġr aml Api . all Cont ained Resources . flatMap Ġ{ Ġit . methods Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġresource Collection ( resources : ĠMutable List < Resource >, Ġv rap Type Provider : ĠV rap Type Provider ): ĠList < Resource Collection > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . groupBy Ġ{ Ġ( v rap Type Provider . do Switch ( it ) Ġas ĠV rap ObjectType ). simple ClassName Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġentry : ĠMap . Entry < String , ĠList < Resource >> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Collection ( v rap Type Provider . do Switch ( entry . value [ 0 ]), Ġentry . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfilter Ġis Ġused Ġto Ġfilter Ġfiles Ġthat Ġare Ġexplicitly Ġprovided Ġby Ġthe Ġsdk Ġdeveloper ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠUser Provided Resources Filter Switch Ġ: ĠComp osed Switch < Boolean >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Switch ( Filter Type Switch ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠFilter Type Switch Ġ: ĠTypes Switch < Boolean >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcase Named Element (` object `: ĠNamed Element ): ĠBoolean Ġ= Ġgenerator Config . custom Type Mapping [` object `. name ]?. let Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcase StringType ( string Type : ĠString Type ): ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdefault Case (` object `: ĠE Object ?): ĠBoolean ? Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ