diff options
author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-16 21:04:40 +0100 |
---|---|---|
committer | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-16 21:04:40 +0100 |
commit | 257c76122ad7db19382c66985d89815df676e45a (patch) | |
tree | 9a9d81ef613b1f5ecdc79fadebaf89960c46c21b /src/core/model/Document.cpp | |
parent | b08c271ca4401ac8e99d49885da600122e5aa398 (diff) |
Document.hpp does compile now. Further Tests are needed.
Diffstat (limited to 'src/core/model/Document.cpp')
-rw-r--r-- | src/core/model/Document.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/core/model/Document.cpp b/src/core/model/Document.cpp new file mode 100644 index 0000000..31b22e3 --- /dev/null +++ b/src/core/model/Document.cpp @@ -0,0 +1,90 @@ +/* + 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 <http://www.gnu.org/licenses/>. +*/ + +#include "Document.hpp" + +#include <core/common/Exceptions.hpp> + +namespace ousia { +namespace model { + +int DocumentEntity::getFieldDescriptorIndex(const std::string &fieldName) +{ + const ManagedVector<FieldDescriptor> &fds = + descriptor->getFieldDescriptors(); + unsigned int f = 0; + + // look if we have an empty name. + if (fieldName == "") { + // in that case we look for a default field. + // First: Do we only have one field? + if (fds.size() == 1) { + // if so we return that one. + return f; + } + // Second: Do we have a TREE field? + for (auto &fd : fds) { + if (fd->getFieldType() == FieldDescriptor::FieldType::TREE) { + return f; + } + f++; + } + } else { + // otherwise we return the FieldDescriptor with the correct name (if + // such a descriptor exists). + for (auto &fd : fds) { + if (fd->getName() == fieldName) { + return f; + } + f++; + } + } + return -1; +} + +void DocumentEntity::getField(ManagedVector<StructuredEntity> &res, + const std::string &fieldName) +{ + int f = getFieldDescriptorIndex(fieldName); + if (f < 0) { + ManagedVector<StructuredEntity> empty{this}; + res = ManagedVector<StructuredEntity>(this); + } + res = fields[f]; +} + +ManagedVector<StructuredEntity> &DocumentEntity::getField( + Rooted<FieldDescriptor> fieldDescriptor) +{ + const ManagedVector<FieldDescriptor> &fds = + descriptor->getFieldDescriptors(); + int f = 0; + for (auto &fd : fds) { + if (fd->getName() == fieldDescriptor->getName() && + fd->getFieldType() == fieldDescriptor->getFieldType()) { + return fields[f]; + } + f++; + } + throw OusiaException( + "The given FieldDescriptor is not specified in the Descriptor of this " + "node."); +} +} +} + |