package Ġio . tol gee . service Ċ Ċ import Ġio . tol gee . configuration . tol gee . T ol gee Properties Ċ import Ġio . tol gee . d tos . cache able . Project Dto Ċ import Ġio . tol gee . d tos . data Import . Import File Dto Ċ import Ġio . tol gee . d tos . request . Language Dto Ċ import Ġio . tol gee . d tos . request . project . Create Project DTO Ċ import Ġio . tol gee . model . ApiKey Ċ import Ġio . tol gee . model . enums . Api Scope Ċ import Ġio . tol gee . security . project _ auth . Project Holder Ċ import Ġio . tol gee . service . data Import . Import Service Ċ import Ġio . tol gee . service . project . Project Service Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ @ Service Ċ class ĠStartup Import Service ( ĊĠ Ġprivate Ġval Ġimport Service : ĠImport Service , ĊĠ Ġprivate Ġval Ġproject Service : ĠProject Service , ĊĠ Ġprivate Ġval Ġuser Account Service : ĠUser Account Service , ĊĠ Ġprivate Ġval Ġproperties : ĠT ol gee Properties , ĊĠ Ġprivate Ġval ĠapiKey Service : ĠApi Key Service , ĊĠ Ġprivate Ġval Ġapplication Context : ĠApplication Context Ċ ) Ġ{ ĊĊĠ Ġ@ Transactional ĊĠ Ġfun Ġimport Files () Ġ{ ĊĠĠĠ Ġval Ġdir Ġ= Ġproperties . import . dir ĊĊĠĠĠ Ġif Ġ( dir Ġ!== Ġnull Ġ&& ĠFile ( dir ). exists () Ġ&& ĠFile ( dir ). isDirectory ) Ġ{ ĊĠĠĠĠĠ ĠFile ( dir ). list Files ()?. filter Ġ{ Ġit . isDirectory Ġ} ?. forEach Ġ{ Ġproject Dir Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġfile Dto s Ġ= Ġproject Dir . list Files ()?. map Ġ{ Ġit Ġ-> ĠImport File Dto ( it . name , Ġit . inputStream ()) Ġ} ?. toList () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file Dto s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġuser Account Ġ= Ġuser Account Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Optional ( properties . authentication . initial Username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Get Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprojectName Ġ= Ġproject Dir . name Without Extension ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Projects Ġ= Ġproject Service . findAll ByName And User Owner ( projectName , Ġuser Account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Projects . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Service . create Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Project DTO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠprojectName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguages Ġ= Ġfile Dto s . map Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġextension ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfile . name . replace ( Regex ("\\ . [^ . ]* "), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage Dto ( name , Ġname , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( properties . import . create Implicit ApiKey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠapiKey Ġ= ĠApi Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ"${ projectName . lowercase ( Locale . getDefault ()) }-${ user Account . name }- imported - project - implicit ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscopes Enum Ġ= ĠApi Scope . values (). to Mutable Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Account Ġ= Ġuser Account , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠapiKey Service . save ( apiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . api Keys . add ( apiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Service . save ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . getBean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" transaction Project Holder ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject Holder :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). project Ġ= ĠProject Dto . from Entity ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Service . add Files ( file Dto s , Ġnull , Ġproject , Ġuser Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimports Ġ= Ġimport Service . getAll By Project ( project . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimports . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Service . import ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ