37 lines
1.2 KiB
Plaintext
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 [])) |