| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- 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;
- }
- get submissions() {
- return this.#submissions;
- }
- constructor(content) {
- if (!(content instanceof Object)) {
- throw "Content to into database from must be an object.";
- }
- this.#load(content);
- }
- }
- export { database };
|