package Ġio . github . hell or in . mongo ql . db . var iety Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġio . github . hell or in . mongo ql . db . Model Mapper Ċ import Ġio . github . hell or in . mongo ql . db . Model Path Json Ċ import Ġio . github . hell or in . mongo ql . db . MongoDB Params Ċ import Ġio . github . hell or in . mongo ql . db . Mongo Schema Int ros pector Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util . stream . Collectors Ċ Ċ internal Ġopen Ġclass ĠVari ety Mongo Schema Int ros pector ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvariety Model Mapper Ġ: ĠModelMapper < Var iety Model Path Json > Ġ= ĠVari ety Model Mapper (), ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmongo Shell Executor : ĠMongo Var iety Shell Executor Ġ= ĠMongo Var iety Shell Executor ()) Ġ: ĠMongo Schema Int ros pector () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠobjectMapper Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġprivate Ġfun Ġint rospect Mongo Schema ( mongo DB Params : ĠMongoDB Params ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Int rospect ing Ġthe ĠMongoDB Ġdatabase / collection " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= Ġmongo Shell Executor . execute ( mongo DB Params ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprocess Output : ĠString Ġ= Ġ"[" Ġ+ ĠBufferedReader ( InputStream Reader ( process . inputStream , ĠChar sets . UTF _ 8 )). use Ġ{ Ġbr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbr . lines (). skip ( 1 ). collect ( Collectors . join ing ( System . line Separator ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprocess Error Output : ĠString Ġ= ĠBufferedReader ( InputStream Reader ( process . error Stream , ĠChar sets . UTF _ 8 )). use Ġ{ Ġbr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbr . lines (). collect ( Collectors . join ing ( System . line Separator ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(" unc a ught Ġexception ". to Regex (). contains Match In ( process Output )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSanit ize Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsanitized Process Output Ġ= Ġprocess Output . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- password =${ mongo DB Params . password }", Ġ// NO SON AR Ġsanit izing Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- password = *** " Ġ// NO SON AR Ġsanit izing Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error Ġ{ Ġ" Unexpected Ġerror Ġwhile Ġint rospect ing ĠMongoDB Ġdatabase / collection . ĠDetails : Ġ$ sanit ized Process Output " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠVari ety Exception (" Unexpected Ġerror Ġwhile Ġint rospect ing ĠMongoDB Ġdatabase / collection ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Debugging : Ġ$ process Output " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Error : Ġ$ process Error Output " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprocess Output ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread And Parse Mongo Schema ( mongo DB Params : ĠMongoDB Params ): ĠList < Model Path Json > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmocked Data Ġ= Ġint rospect Mongo Schema ( mongo DB Params ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvariety Model Mapper . map ( object Mapper . readValue < List < Var iety Model Path Json >>( mocked Data ). sorted By Descending Ġ{ Ġit ._ id . path Length () Ġ}) ĊĠĠĠ Ġ} Ċ }