From 45dabd8416395294270b78f1b8e45ec6f6af25fe Mon Sep 17 00:00:00 2001 From: florian <f.spreckelsen@inidscale.com> Date: Thu, 12 Aug 2021 10:10:02 +0200 Subject: [PATCH] DRAFT: Begin implementation of entities --- src/CaosDB.jl | 2 +- src/Entity.jl | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 src/Entity.jl diff --git a/src/CaosDB.jl b/src/CaosDB.jl index 5cc7367..92ba077 100644 --- a/src/CaosDB.jl +++ b/src/CaosDB.jl @@ -214,7 +214,7 @@ end # Authentication include("Connection.jl") -module Entity end +include("Entity.jl") include("Transaction.jl") diff --git a/src/Entity.jl b/src/Entity.jl new file mode 100644 index 0000000..8e059a6 --- /dev/null +++ b/src/Entity.jl @@ -0,0 +1,147 @@ +# ** header v3.0 +# This file is a part of the CaosDB Project. +# +# Copyright (C) 2021 Indiscale GmbH <info@indiscale.com> +# Copyright (C) 2021 Florian Spreckelsen <f.spreckelsen@indiscale.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with this program. If not, see +# <https://www.gnu.org/licenses/>. +# +# ** end header +# +module Entity + +export create_entity, + create_parent, create_property, create_property_entity, create_record, create_recordtype + +export get_id, get_role, get_name + +export set_id, set_role, set_name + +using CaosDB + +""" +Struct containing a pointer to the wrapped cpp entity +object. Meant for internal use; use `CaosDB.Entity.create_entity` to +create an entity. +""" +mutable struct _Entity + wrapped_entity::Ptr{Cvoid} + + function _Entity(managed_by_julia::Bool = false) + + entity = new() + + if managed_by_julia + function f(t) + ccall( + (:caosdb_entity_delete_entity, CaosDB.library_name), + Cint, + (Ref{_Entity},), + Ref{_Entity}(t), + ) + end + finalizer(f, entity) + end + + return entity + end +end + + +""" +Struct containing a pointer to the wrapped cpp parent +object. Meant for internal use; use `CaosDB.Entity.create_parent` to +create an parent. +""" +mutable struct _Parent + wrapped_parent::Ptr{Cvoid} + + function _Parent(managed_by_julia::Bool = false) + + parent = new() + + if managed_by_julia + function f(t) + ccall( + (:caosdb_entity_delete_parent, CaosDB.library_name), + Cint, + (Ref{_Parent},), + Ref{_Parent}(t), + ) + end + finalizer(f, parent) + end + + return parent + end +end + + +""" +Struct containing a pointer to the wrapped cpp property +object. Meant for internal use; use `CaosDB.Entity.create_property` to +create an property. +""" +mutable struct _Property + wrapped_property::Ptr{Cvoid} + + function _Property(managed_by_julia::Bool = false) + + property = new() + + if managed_by_julia + function f(t) + ccall( + (:caosdb_entity_delete_property, CaosDB.library_name), + Cint, + (Ref{_Property},), + Ref{_Property}(t), + ) + end + finalizer(f, property) + end + + return property + end +end + +""" + function create_entity(name::AbstractString = "") + +Return a new entity object. If a `name` was provided, set the name of +the entity correspondingly. +""" +function create_entity(name::AbstractString = "") + + entity = Ref{_Entity}(_Entity(true)) + + err_code = ccall( + (:caosdb_entity_create_entity, CaosDB.library_name), + Cint, + (Ref{_Entity},), + entity, + ) + + CaosDB.Exceptions.evaluate_return_code(err_code) + + if name != "" + set_name(entity, name) + end + + return entity + +end + +end -- GitLab