11package kscript.app.appdir
22
3+ import kscript.app.creator.JarArtifact
34import kscript.app.model.ScriptType
5+ import kscript.app.util.Logger.devMsg
46import kscript.app.util.ScriptUtils
57import org.apache.commons.codec.digest.DigestUtils
68import java.net.URI
@@ -21,22 +23,30 @@ data class UriItem(
2123)
2224
2325class Cache (private val path : Path ) {
24- fun findOrCreateIdea (digest : String ): Path {
25- val directory = path.resolve(" idea_$digest " )
26- return if (directory.exists()) directory else directory.createDirectories()
26+ fun getOrCreateIdeaProject (digest : String , creator : (Path ) -> Path ): Path {
27+ return directoryCache(path.resolve(" idea_$digest " ), creator)
2728 }
2829
29- fun findOrCreateJar (digest : String ): Path {
30- val directory = path.resolve(" jar_$digest " )
31- return if (directory.exists()) directory else directory.createDirectories()
30+ fun getOrCreatePackage (digest : String , creator : (Path ) -> Path ): Path {
31+ return directoryCache(path.resolve(" package_$digest " ), creator)
3232 }
3333
34- fun findOrCreatePackage (digest : String ): Path {
35- val directory = path.resolve(" package_$digest " )
36- return if (directory.exists()) directory else directory.createDirectories()
34+ fun getOrCreateJar (digest : String , creator : (Path ) -> JarArtifact ): JarArtifact {
35+ val directory = path.resolve(" jar_$digest " )
36+ val cachedJarArtifact = directory.resolve(" jarArtifact.descriptor" )
37+
38+ return if (directory.exists()) {
39+ val jarArtifactLines = cachedJarArtifact.readText().lines()
40+ JarArtifact (Paths .get(jarArtifactLines[0 ]), jarArtifactLines[1 ])
41+ } else {
42+ directory.createDirectories()
43+ val jarArtifact = creator(directory)
44+ cachedJarArtifact.writeText(" ${jarArtifact.path} \n ${jarArtifact.execClassName} " )
45+ jarArtifact
46+ }
3747 }
3848
39- fun readUri (uri : URI ): UriItem {
49+ fun getOrCreateUriItem (uri : URI ): UriItem {
4050 val digest = DigestUtils .md5Hex(uri.toString())
4151
4252 if (uri.scheme == " file" ) {
@@ -53,7 +63,10 @@ class Cache(private val path: Path) {
5363
5464 if (descriptorFile.exists() && contentFile.exists()) {
5565 // Cache hit
56- val descriptor = descriptorFile.readText().split(" " )
66+ val descriptor = descriptorFile.readText().lines()
67+
68+ devMsg(" Descriptor: $descriptor " )
69+
5770 val scriptType = ScriptType .valueOf(descriptor[0 ])
5871 val fileName = descriptor[1 ]
5972 val cachedUri = URI .create(descriptor[2 ])
@@ -70,9 +83,18 @@ class Cache(private val path: Path) {
7083 val fileName = ScriptUtils .extractFileName(resolvedUri)
7184 val contextUri = resolvedUri.resolve(" ." )
7285
73- descriptorFile.writeText(" $scriptType $fileName $resolvedUri $contextUri " )
86+ descriptorFile.writeText(" $scriptType \n $fileName \n $resolvedUri \n $contextUri " )
7487 contentFile.writeText(content)
7588
7689 return UriItem (content, scriptType, fileName, resolvedUri, contextUri, contentFile)
7790 }
91+
92+ private fun directoryCache (path : Path , creator : (Path ) -> Path ): Path {
93+ return if (path.exists()) {
94+ path
95+ } else {
96+ path.createDirectories()
97+ creator(path)
98+ }
99+ }
78100}
0 commit comments