import { type_manager } from "./functions.js"; import { project } from "./project.js"; import { element } from "./element.js"; import { element_builder } from "./element_builder.js"; import { elements_list } from "./elements_list.js"; import { submission } from "./submission.js"; import { submissions_list } from "./submissions_list.js"; import { parser } from "./parser.js"; class database { #project; #submissions; #parse_element(name, content) { const builder = new element_builder(); builder.name = name; builder.description = ""; if (content.exists("description")) { builder.description = content.get("description"); } const adder = (property, how) => { if (!content.exists(property)) { return; } const list = content.get(property); if (!type_manager.is_array(list)) { throw "Property " + property + " of " + name + " not array."; } list.forEach((item) => how(item)); } adder("pictures", (target) => builder.add_picture(target)); adder("order", (target) => builder.add_order(target)); adder("meshes", (target) => builder.add_mesh(target)); adder("solids", (target) => builder.add_solid(target)); return builder.result; } #parse_elements(content) { const list = new elements_list(); content.properties.forEach(name => { const loader = content.get_parser(name); list.append(this.#parse_element(name, loader)); }); return list; } #parse_submissions(content) { const list = new submissions_list(); content.properties.forEach(title => { const loader = content.get_parser(title); const description = loader.get("description"); const picture = loader.get("picture"); const elements_parser = loader.get_parser("elements"); const elements = this.#parse_elements(elements_parser); const result = new submission( title, description, picture, elements ); list.append(result); }); return list; } #load(content) { const loader = new parser(content, "root"); const project = loader.get_parser("project"); const submissions = loader.get_parser("submissions"); this.#project = this.#parse_project(project); this.#submissions = this.#parse_submissions(submissions); } #parse_project(content) { const name = content.get("name"); let description = ""; if (content.exists("description")) { description = content.get("description"); } return new project(name, description); } get project() { return this.#project; } constructor(content) { if (!(content instanceof Object)) { throw "Content to into database from must be an object."; } this.#load(content); } } export { database };