package Ġnet . d ank ito . jpa . apt . configuration processor . source Ċ Ċ import Ġcom . squareup . jav ap o et . ClassName Ċ import Ġnet . d ank ito . jpa . apt . config . Entity Config Ċ import Ġnet . d ank ito . jpa . apt . config . J PA Entity Configuration ĊĊ Ċ class ĠSource Code Generator Context ( entity Configuration : ĠJ PA Entity Configuration ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġentity Configs Ordered H ierarch ically Ġ= ĠLinked HashSet < Entity Config >() ĊĊĠĠĠ Ġprivate Ġval ĠclassName sTo Entity Configs Map Ġ= ĠHashMap < ClassName , ĠEntity Config >() ĊĊĠĠĠ Ġprivate Ġval Ġtarget Entities Ġ= ĠHashMap < Entity Config , ĠSet < Entity Config >>() ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġentity Configs Ordered H ierarch ically . addAll ( entity Configuration . entities . filter Ġ{ Ġit . parent Entity Ġ== Ġnull Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif ( entity Configs Ordered H ierarch ically . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Children Re cursively ( entity Configs Ordered H ierarch ically , Ġentity Configs Ordered H ierarch ically . toList () Ġ/* Ġmake Ġa Ġcopy Ġ*/) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ Ġ// Ġall Ġentities Ġhave Ġa Ġparent Ġentity Ġ-> Ġnow Ġwe Ġhave Ġa Ġlittle Ġproblem Ġas Ġwe Ġcannot Ġresolve Ġhierarchy Ġeasily ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġimplement Ġalgorithm Ġto Ġorder Ġalso Ġthese ĠEntity Configs Ġh ierarch ically ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Configs Ordered H ierarch ically . addAll ( entity Configuration . entities ) Ġ// Ġ-> Ġlast Ġres ort : Ġadd Ġall , Ġparent Ġgot Ġalready Ġadded Ġby Ġprevious Ġbuilt ĠGenerated Entity Configs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Children Re cursively ( sort edList : ĠLinked HashSet < Entity Config >, Ġentity Configs From Last Round : ĠCollection < Entity Config >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadded Child Entities Ġ= ĠLinked HashSet < Entity Config >() ĊĊĠĠĠĠĠĠĠ Ġentity Configs From Last Round . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . child Entities . forEach Ġ{ Ġchild Entity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted List . add ( child Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Child Entities . add ( child Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( added Child Entities . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Children Re cursively ( sort edList , Ġadded Child Entities ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Entity Configs Ordered H ierarch ically (): ĠCollection < Entity Config > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentity Configs Ordered H ierarch ically ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Entity Config ( className : ĠString , Ġentity Config : ĠEntity Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Entity Config ( create ClassName ( className , Ġentity Config ), Ġentity Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Entity Config ( className : ĠClass Name , Ġentity Config : ĠEntity Config ) Ġ{ ĊĠĠĠĠĠĠĠ ĠclassName sTo Entity Configs Map . put ( className , Ġentity Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ClassName ( className : ĠString , Ġentity Config : ĠEntity Config ): ĠClass Name Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠClass Name . get ( entity Config . type . packageName , ĠclassName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ClassName ( clazz : ĠClass < *> ): ĠClass Name Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠClass Name . get ( clazz .` package `. name , Ġclazz . simple Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Entity Config ( className : ĠClass Name ): ĠEntity Config ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠclassName sTo Entity Configs Map [ className ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ClassName ( entity Config : ĠEntity Config ): ĠClass Name ? Ġ{ ĊĠĠĠĠĠĠĠ ĠclassName sTo Entity Configs Map . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . value . type Ġ== Ġentity Config . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd Target Entities ( entity Config : ĠEntity Config , Ġtarget Entities : ĠSet < Entity Config >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . target Entities . put ( entity Config , Ġtarget Entities ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Target Entities ( entity Config : ĠEntity Config ): ĠSet < Entity Config >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . target Entities [ entity Config ] ĊĠĠĠ Ġ} Ċ Ċ }