Files
nat-archive-tool/src/nat/Archive.kiss
2021-06-12 21:52:48 -06:00

37 lines
1.2 KiB
Plaintext

(defnew [&prop :String archiveDir]
[:Array<System> systems
[]
:Map<String,Template> templates
(new Map)
:Map<String,Entry> entries
(let [entryFiles (FileSystem.readDirectory (Path.join [archiveDir "entries"]))]
(for file entryFiles =>(file.withoutExtension) ~(the Entry (Json.parse (File.getContent (Path.join [archiveDir "entries" file]))))))])
(defmethod addSystem [:System system]
// Assign entries to the Systems that care about them
(doFor =>id entry entries
(system.checkEntryInOrOut this entry))
(systems.push system))
(defmethod addTemplate [name template]
(dictSet templates name template))
(defmethod :Entry createEntry [template]
(let [e (_newEntry)]
(.prepareEntry (dictGet templates template) e)
(saveEntry e)
(doFor system systems
(system.checkEntryInOrOut this e))
e))
(defmethod saveEntry [:Entry e]
(File.saveContent
(Path.join [archiveDir "entries" (e.id.withExtension "json")])
(Json.stringify e)))
(defun :Entry _newEntry []
(object
id (Uuid.v4)
components (new Map)
files []))