package Ġcom . ep am . br n . service Ċ Ċ import Ġcom . ep am . br n . auth . Authority Service Ċ import Ġcom . ep am . br n . enums . Audio metry Type Ċ import Ġcom . ep am . br n . enums . Locale Ċ import Ġcom . ep am . br n . model . Audio metry Ċ import Ġcom . ep am . br n . model . Authority Ċ import Ġcom . ep am . br n . model . Gender Ċ import Ġcom . ep am . br n . model . User Account Ċ import Ġcom . ep am . br n . repo . Audio metry Repository Ċ import Ġcom . ep am . br n . repo . Exercise Group Repository Ċ import Ġcom . ep am . br n . repo . User Account Repository Ċ import Ġcom . ep am . br n . upload . Csv Upload Service Ċ import Ġorg . apache . logging . log 4 j . kotlin . logger Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . boot . context . event . Application Ready Event Ċ import Ġorg . springframework . context . annotation . Profile Ċ import Ġorg . springframework . context . event . EventListener Ċ import Ġorg . springframework . core . env . Environment Ċ import Ġorg . springframework . core . io . Resource Loader Ċ import Ġorg . springframework . security . crypto . password . Password Encoder Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġresponsible Ġfor Ċ Ġ* Ġloading Ġseed Ġdata Ġon Ġstartup . Ċ Ġ*/ Ċ @ Service Ċ @ Profile (" dev ", Ġ" prod ") Ċ class ĠInitial DataLoader ( ĊĠĠĠ Ġprivate Ġval Ġresource Loader : ĠResource Loader , ĊĠĠĠ Ġprivate Ġval Ġexercise Group Repository : ĠExercise Group Repository , ĊĠĠĠ Ġprivate Ġval Ġuser Account Repository : ĠUser Account Repository , ĊĠĠĠ Ġprivate Ġval Ġaudio metry Repository : ĠAudio metry Repository , ĊĠĠĠ Ġprivate Ġval Ġpassword Encoder : ĠPassword Encoder , ĊĠĠĠ Ġprivate Ġval Ġauthority Service : ĠAuthor ity Service , ĊĠĠĠ Ġprivate Ġval Ġupload Service : ĠCsv Upload Service , ĊĠĠĠ Ġprivate Ġval Ġaudio Files Generation Service : ĠAudio Files Generation Service Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġenvironment : ĠEnvironment ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġlogger () ĊĊĠĠĠ Ġ@ Value ("\ ${ init . folder :# { null }} ") ĊĠĠĠ Ġvar Ġdirectory Path : ĠPath ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Value ("\ ${ with Audio Files Generation }") ĊĠĠĠ Ġvar Ġwith Audio Files Generation : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠfileName For Series ( series Id : ĠLong , Ġsuffix : ĠString ) Ġ= Ġ"${ series Id }_ series _$ suffix . csv " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget InputStream From Series Init File ( series Id : ĠLong ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠThread . currentThread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. context ClassLoader . getResource AsStream (" init Files /${ fileName For Series ( series Id , Ġ" prod ") }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inputStream Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Can Ġnot Ġget Ġinit Ġfile Ġfor Ġ$ series Id Ġseries .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠinputStream ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Source Files (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprofile : ĠString Ġ= Ġenvironment . active Profiles [ 0 ]. toLowerCase () ĊĠĠĠĠĠĠĠ Ġif Ġ( profile Ġ== Ġ" integration - tests ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= Ġ" prod " ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" groups . csv ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" series . csv ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sub groups . csv ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName For Series ( 1 , Ġprofile ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName For Series ( 2 , Ġprofile ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName For Series ( 3 , Ġprofile ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName For Series ( 4 , Ġprofile ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" signal _ exercises . csv ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" lo pot ko . csv " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ EventListener ( Application Ready Event :: class ) ĊĠĠĠ Ġfun Ġon Application Event ( event : ĠApplication Ready Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( authority Service . findAll (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadmin Authority Ġ= Ġauthority Service . save ( Authority ( authority Name Ġ= Ġ" ROLE _ ADMIN ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Authority Ġ= Ġauthority Service . save ( Authority ( authority Name Ġ= Ġ" ROLE _ USER ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= Ġadd Admin User ( admin Authority ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlistOf Users Ġ= Ġmutable ListOf ( admin ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Users . addAll ( add Default Users ( user Authority )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Account Repository . save All ( listOf Users ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Audio metrics Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Audio metrics () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Groups Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ex ercises From Files () ĊĠĠĠĠĠĠĠ Ġif Ġ( with Audio Files Generation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Files Generation Service . generate Audio Files () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Groups Empty () Ġ= Ġexercise Group Repository . count () Ġ== Ġ 0 L ĊĠĠĠ Ġprivate Ġfun Ġis Audio metrics Empty () Ġ= Ġaudio metry Repository . count () Ġ== Ġ 0 L ĊĊĠĠĠ Ġprivate Ġfun Ġinit Ex ercises From Files () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Initialization Ġstarted ") ĊĠĠĠĠĠĠĠ Ġif Ġ( directory Path Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data From Directory ( directory Path !! ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data From Class Path () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Data From Directory ( directory To Scan : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Loading Ġdata Ġfrom Ġ$ directory To Scan .") ĊĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( directory To Scan ) Ġ|| Ġ! Files . isDirectory ( directory Path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ directory To Scan Ġwith Ġinitial Ġdata Ġdoes Ġnot Ġexist ") ĊĠĠĠĠĠĠĠ Ġget Source Files (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload From InputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new InputStream ( directory To Scan . resolve ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Data From Class Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" Loading Ġdata Ġfrom Ġclasspath Ġ' init Files ' Ġdirectory .") ĊĠĠĠĠĠĠĠ Ġget Source Files (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload From InputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Loader . getResource (" classpath : init Files /$ it "). inputStream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload From InputStream ( inputStream : ĠInputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupload Service . load ( inputStream ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Sil ently ( inputStream ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose Sil ently ( inputStream : ĠInputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Admin User ( admin Authority : ĠAuthor ity ): ĠUser Account Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġpassword Encoder . encode (" admin ") ĊĠĠĠĠĠĠĠ Ġval Ġuser Account Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Account ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" admin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" admin @ admin . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborn Year Ġ= Ġ 1 9 9 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠGender . M ALE . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġuser Account . authority Set . addAll ( set Of ( admin Authority )) ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Account ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Default Users ( user Authority : ĠAuthor ity ): ĠMutable List < User Account > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġpassword Encoder . encode (" password ") ĊĠĠĠĠĠĠĠ Ġval Ġfirst User Ġ= ĠUser Account ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" Name 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" default @ default . ru ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborn Year Ġ= Ġ 1 9 9 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠGender . M ALE . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond User Ġ= ĠUser Account ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" Name 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" default 2 @ default . ru ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborn Year Ġ= Ġ 1 9 9 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠGender . F EM ALE . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfirst User . authority Set . addAll ( set Of ( user Authority )) ĊĠĠĠĠĠĠĠ Ġsecond User . authority Set . addAll ( set Of ( user Authority )) ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable ListOf ( first User , Ġsecond User ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Audio metrics () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaudio metry Signal Ġ= ĠAudio metry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Ð§ Ð°ÑģÑĤ Ð¾ÑĤ Ð½Ð°Ñı ĠÐ´ Ð¸ Ð°Ð³ Ð½Ð¾ÑģÑĤÐ¸ ÐºÐ° ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Ð§ Ð°ÑģÑĤ Ð¾ÑĤ Ð½Ð°Ñı ĠÐ´ Ð¸ Ð°Ð³ Ð½Ð¾ÑģÑĤÐ¸ ÐºÐ° ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio metry Type Ġ= ĠAudio metry Type . SIGNAL S . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaudio metry Speech Ġ= ĠAudio metry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . RU . locale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Ðł ÐµÑĩ ÐµÐ² Ð°Ñı ĠÐ´ Ð¸ Ð°Ð³ Ð½Ð¾ÑģÑĤÐ¸ ÐºÐ° ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Ðł ÐµÑĩ ÐµÐ² Ð°Ñı ĠÐ´ Ð¸ Ð°Ð³ Ð½Ð¾ÑģÑĤÐ¸ ÐºÐ° ĠÐ¼ÐµÑĤÐ¾Ð´ Ð¾Ð¼ ĠÐ Ľ Ð¾Ð¿ Ð¾ÑĤ ÐºÐ¾ ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio metry Type Ġ= ĠAudio metry Type . SPE E CH . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaudio metry Matrix Ġ= ĠAudio metry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . RU . locale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Ðľ Ð°ÑĤ ÑĢ Ð¸Ðº Ñģ Ð½Ð°Ñı ĠÐ´ Ð¸ Ð°Ð³ Ð½Ð¾ÑģÑĤÐ¸ ÐºÐ° ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Ðľ Ð°ÑĤ ÑĢ Ð¸Ðº Ñģ Ð½Ð°Ñı ĠÐ´ Ð¸ Ð°Ð³ Ð½Ð¾ÑģÑĤÐ¸ ÐºÐ° ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio metry Type Ġ= ĠAudio metry Type . MATRIX . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaudio metry Speech En Ġ= ĠAudio metry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . EN . locale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Speech Ġdiagnostic ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Speech Ġdiagnostic Ġwith ĠL op ot ko Ġwords Ġsequences ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio metry Type Ġ= ĠAudio metry Type . SPE E CH . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġaudio metry Repository . save All ( listOf ( audio metry Signal , Ġaudio metry Speech , Ġaudio metry Matrix , Ġaudio metry Speech En )) ĊĠĠĠ Ġ} Ċ } Ċ