From 677d6830a0252e7478c2f5d6f75cfb845d33ad23 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Sun, 18 Jan 2015 21:09:57 +0100 Subject: Added Project class which represents the absolute top-level node containing multiple documents and all loaded domains and typesystems. --- src/core/model/Project.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/core/model/Project.cpp (limited to 'src/core/model/Project.cpp') diff --git a/src/core/model/Project.cpp b/src/core/model/Project.cpp new file mode 100644 index 0000000..6b6eef6 --- /dev/null +++ b/src/core/model/Project.cpp @@ -0,0 +1,95 @@ +/* + Ousía + Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include "Domain.hpp" +#include "Document.hpp" +#include "Project.hpp" +#include "Typesystem.hpp" + +namespace ousia { + +namespace model { + +Project::Project(Manager &mgr) + : Node(mgr), + systemTypesystem(acquire(new SystemTypesystem(mgr))), + documents(this), + domains(this), + typesystems(this) +{ +} + +bool Project::doValidate(Logger &logger) const +{ + return continueValidation(documents, logger) & + continueValidation(domains, logger) & + continueValidation(typesystems, logger); +} + +Rooted Project::createTypesystem(const std::string &name) +{ + Rooted typesystem{ + new Typesystem{getManager(), systemTypesystem, name}}; + addTypesystem(typesystem); + return typesystem; +} + +void Project::addTypesystem(Handle typesystem) +{ + invalidate(); + typesystems.push_back(typesystem); +} + +Rooted Project::createDocument(const std::string &name) +{ + Rooted document{new Document(getManager(), name)}; + addDocument(document); + return document; +} + +void Project::addDocument(Handle document) +{ + invalidate(); + documents.push_back(document); +} + +Rooted Project::createDomain(const std::string &name) +{ + Rooted domain{new Domain(getManager(), systemTypesystem, name)}; + addDomain(domain); + return domain; +} + +void Project::addDomain(Handle domain) +{ + invalidate(); + domains.push_back(domain); +} +} + +namespace RttiTypes { +const Rtti Project = RttiBuilder("Project") + .parent(&Node) + .composedOf(&Document) + .composedOf(&Typesystem) + .composedOf(&Domain); +} +} + -- cgit v1.2.3