51 lines
1.5 KiB
Clojure
51 lines
1.5 KiB
Clojure
(ns clj-jtwig.utils
|
|
"various helper / utility functions"
|
|
(:import (java.net URL)
|
|
(java.io File)
|
|
(java.util.jar JarFile)))
|
|
|
|
(defn inside-jar? [^File file]
|
|
(-> file
|
|
(.getPath)
|
|
; the path of a file inside a jar looks something like "jar:file:/path/to/file.jar!/path/inside/jar/to/file"
|
|
(.contains "jar!")))
|
|
|
|
(defn get-jar-resource-filename [^String resource-filename]
|
|
(let [pos (.indexOf resource-filename "jar!")]
|
|
(if-not (= -1 pos)
|
|
(subs resource-filename (+ pos 5))
|
|
resource-filename)))
|
|
|
|
(defn get-jar-filename [^String resource-filename]
|
|
(let [start (.indexOf resource-filename "file:")
|
|
end (.indexOf resource-filename "jar!")]
|
|
(if (and (not= -1 start)
|
|
(not= -1 end))
|
|
(subs resource-filename 5 (+ end 3))
|
|
resource-filename)))
|
|
|
|
(defn exists? [^File file]
|
|
(if (inside-jar? file)
|
|
(let [filename (.getPath file)
|
|
jar-file (new JarFile (get-jar-filename filename))
|
|
jar-entry (.getJarEntry jar-file (get-jar-resource-filename filename))]
|
|
(not (nil? jar-entry)))
|
|
(.exists file)))
|
|
|
|
(defn get-file-last-modified [^File file]
|
|
(if (inside-jar? file)
|
|
0
|
|
(.lastModified file)))
|
|
|
|
(defn get-resource-path
|
|
(^URL [^String filename]
|
|
(-> (Thread/currentThread)
|
|
(.getContextClassLoader)
|
|
(.getResource filename))))
|
|
|
|
(defn get-resource-modification-date [^String filename]
|
|
(when-let [resource-filename (get-resource-path filename)]
|
|
(->> resource-filename
|
|
(.getPath)
|
|
(new File)
|
|
(get-file-last-modified)))) |