summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-01-25 18:28:56 +0100
committerBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2015-01-25 18:28:56 +0100
commit93a8af2431529d145919c5898971c503d6c73e93 (patch)
treedcc265b7f4fcff3105c86ac808fd8b7e10c633ae /src/core
parenteab6577b066319aab7ebaf514e6bb7aab9590624 (diff)
added node information to error logging in Document and Domain validation.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/model/Document.cpp102
-rw-r--r--src/core/model/Domain.cpp24
2 files changed, 71 insertions, 55 deletions
diff --git a/src/core/model/Document.cpp b/src/core/model/Document.cpp
index 42192a2..f22ccd6 100644
--- a/src/core/model/Document.cpp
+++ b/src/core/model/Document.cpp
@@ -142,13 +142,13 @@ bool DocumentEntity::doValidate(Logger &logger) const
{
// if we have no descriptor, this is invalid.
if (descriptor == nullptr) {
- logger.error("This entity has no descriptor!");
+ logger.error("This entity has no descriptor!", *subInst);
// in this case we have to stop the validation process, because without
// a constructor we can not check anything else.
return false;
}
// if we have an invalid descriptor we can not proceed either.
- if(!descriptor->validate(logger)){
+ if (!descriptor->validate(logger)) {
return false;
}
// check the attribute primitive content.
@@ -181,8 +181,9 @@ bool DocumentEntity::doValidate(Logger &logger) const
case 0:
if (!fieldDescs[f]->isOptional()) {
logger.error(std::string("Primitive Field \"") +
- fieldDescs[f]->getName() +
- "\" had no content!");
+ fieldDescs[f]->getName() +
+ "\" had no content!",
+ *subInst);
valid = false;
}
continue;
@@ -190,16 +191,18 @@ bool DocumentEntity::doValidate(Logger &logger) const
break;
default:
logger.error(std::string("Primitive Field \"") +
- fieldDescs[f]->getName() +
- "\" had more than one child!");
+ fieldDescs[f]->getName() +
+ "\" had more than one child!",
+ *subInst);
valid = false;
continue;
}
// if we are here we know that exactly one child exists.
if (!fields[f][0]->isa(RttiTypes::DocumentPrimitive)) {
logger.error(std::string("Primitive Field \"") +
- fieldDescs[f]->getName() +
- "\" has non primitive content!");
+ fieldDescs[f]->getName() +
+ "\" has non primitive content!",
+ *subInst);
valid = false;
} else {
Handle<DocumentPrimitive> primitive =
@@ -224,12 +227,14 @@ bool DocumentEntity::doValidate(Logger &logger) const
for (auto &ac : fieldDescs[f]->getChildren()) {
const size_t min = ac->getCardinality().asCardinality().min();
if (min > 0) {
- logger.error(
- std::string("Field \"") + fieldDescs[f]->getName() +
- "\" was empty but needs at least " +
- std::to_string(min) + " elements of class \"" +
- ac->getName() + "\" according to the definition of \"" +
- descriptor->getName() + "\"");
+ logger.error(std::string("Field \"") +
+ fieldDescs[f]->getName() +
+ "\" was empty but needs at least " +
+ std::to_string(min) +
+ " elements of class \"" + ac->getName() +
+ "\" according to the definition of \"" +
+ descriptor->getName() + "\"",
+ *subInst);
valid = false;
}
}
@@ -249,8 +254,9 @@ bool DocumentEntity::doValidate(Logger &logger) const
// check if the parent reference is correct.
if (rc->getParent() != subInst) {
logger.error(std::string("A child of field \"") +
- fieldDescs[f]->getName() +
- "\" has the wrong parent reference!");
+ fieldDescs[f]->getName() +
+ "\" has the wrong parent reference!",
+ *rc);
valid = false;
}
if (rc->isa(RttiTypes::Anchor)) {
@@ -259,8 +265,9 @@ bool DocumentEntity::doValidate(Logger &logger) const
}
if (rc->isa(RttiTypes::DocumentPrimitive)) {
logger.error(std::string("Non-primitive Field \"") +
- fieldDescs[f]->getName() +
- "\" had primitive content!");
+ fieldDescs[f]->getName() +
+ "\" had primitive content!",
+ *rc);
valid = false;
continue;
}
@@ -285,11 +292,13 @@ bool DocumentEntity::doValidate(Logger &logger) const
}
}
if (!allowed) {
- logger.error(std::string("An instance of \"") +
- c->getDescriptor()->getName() +
- "\" is not allowed as child of an instance of \"" +
- descriptor->getName() + "\" in field \"" +
- fieldDescs[f]->getName() + "\"");
+ logger.error(
+ std::string("An instance of \"") +
+ c->getDescriptor()->getName() +
+ "\" is not allowed as child of an instance of \"" +
+ descriptor->getName() + "\" in field \"" +
+ fieldDescs[f]->getName() + "\"",
+ *rc);
valid = false;
continue;
}
@@ -310,12 +319,14 @@ bool DocumentEntity::doValidate(Logger &logger) const
num = n->second;
}
if (!ac->getCardinality().asCardinality().contains(num)) {
- logger.error(
- std::string("Field \"") + fieldDescs[f]->getName() +
- "\" had " + std::to_string(num) + " elements of class \"" +
- ac->getName() +
- "\", which is invalid according to the definition of \"" +
- descriptor->getName() + "\"");
+ logger.error(std::string("Field \"") +
+ fieldDescs[f]->getName() + "\" had " +
+ std::to_string(num) + " elements of class \"" +
+ ac->getName() +
+ "\", which is invalid according to the "
+ "definition of \"" +
+ descriptor->getName() + "\"",
+ *subInst);
valid = false;
continue;
}
@@ -466,13 +477,13 @@ bool StructureNode::doValidate(Logger &logger) const
}
// check the parent.
if (getParent() == nullptr) {
- logger.error("The parent is not set!");
+ logger.error("The parent is not set!", *this);
valid = false;
}
if (!getParent()->isa(RttiTypes::StructuredEntity) &&
!getParent()->isa(RttiTypes::AnnotationEntity) &&
!getParent()->isa(RttiTypes::Document)) {
- logger.error("The parent does not have a valid type!");
+ logger.error("The parent does not have a valid type!", *this);
valid = false;
}
return valid;
@@ -524,7 +535,7 @@ bool Anchor::doValidate(Logger &logger) const
bool valid = true;
// check name
if (getName().empty()) {
- logger.error("An Anchor needs a name!");
+ logger.error("An Anchor needs a name!", *this);
valid = false;
}
return valid & StructureNode::doValidate(logger);
@@ -555,10 +566,10 @@ bool AnnotationEntity::doValidate(Logger &logger) const
}
// check if this AnnotationEntity is correctly registered at its document.
if (getParent() == nullptr) {
- logger.error("The parent is not set!");
+ logger.error("The parent is not set!", *this);
valid = false;
} else if (!getParent()->isa(RttiTypes::Document)) {
- logger.error("The parent is not a document!");
+ logger.error("The parent is not a document!", *this);
valid = false;
} else {
Handle<Document> doc = getParent().cast<Document>();
@@ -570,26 +581,29 @@ bool AnnotationEntity::doValidate(Logger &logger) const
}
}
if (!found) {
- logger.error("This annotation was not registered at the document.");
+ logger.error("This annotation was not registered at the document.",
+ *this);
valid = false;
}
// check if the Anchors are part of the right document.
if (start == nullptr) {
- logger.error("This annotation has no start Anchor!");
+ logger.error("This annotation has no start Anchor!", *this);
valid = false;
} else if (!doc->hasChild(start)) {
logger.error(
"This annotations start anchor was not part of the same "
- "document!");
+ "document!",
+ *this);
valid = false;
}
if (end == nullptr) {
- logger.error("This annotation has no end Anchor!");
+ logger.error("This annotation has no end Anchor!", *this);
valid = false;
} else if (!doc->hasChild(end)) {
logger.error(
"This annotations end anchor was not part of the same "
- "document!");
+ "document!",
+ *this);
valid = false;
}
}
@@ -613,7 +627,7 @@ bool Document::doValidate(Logger &logger) const
// An empty document is always invalid. TODO: Is this a smart choice?
bool valid = true;
if (root == nullptr) {
- logger.error("This document is empty (it has no root)!");
+ logger.error("This document is empty (it has no root)!", *this);
valid = false;
} else {
// check if the root is allowed to be a root.
@@ -621,14 +635,16 @@ bool Document::doValidate(Logger &logger) const
.cast<StructuredClass>()
->hasRootPermission()) {
logger.error(std::string("A node of type \"") +
- root->getDescriptor()->getName() +
- "\" is not allowed to be the Document root!");
+ root->getDescriptor()->getName() +
+ "\" is not allowed to be the Document root!",
+ *root);
valid = false;
}
// check if it has this document as parent.
if (root->getParent() != this) {
logger.error(
- "The document root does not have the document as parent!");
+ "The document root does not have the document as parent!",
+ *root);
valid = false;
}
// then call validate on the root
diff --git a/src/core/model/Domain.cpp b/src/core/model/Domain.cpp
index 635fc50..3c4b64c 100644
--- a/src/core/model/Domain.cpp
+++ b/src/core/model/Domain.cpp
@@ -60,10 +60,10 @@ bool FieldDescriptor::doValidate(Logger &logger) const
bool valid = true;
// check parent type
if (getParent() == nullptr) {
- logger.error("This field has no parent!");
+ logger.error("This field has no parent!", *this);
valid = false;
} else if (!getParent()->isa(RttiTypes::Descriptor)) {
- logger.error("The parent of this field is not a descriptor!");
+ logger.error("The parent of this field is not a descriptor!", *this);
valid = false;
}
// check name
@@ -75,20 +75,20 @@ bool FieldDescriptor::doValidate(Logger &logger) const
if (children.size() > 0) {
logger.error(
"This field is supposed to be primitive but has "
- "registered child classes!");
+ "registered child classes!", *this);
valid = false;
}
if (primitiveType == nullptr) {
logger.error(
"This field is supposed to be primitive but has "
- "no primitive type!");
+ "no primitive type!", *this);
valid = false;
}
} else {
if (primitiveType != nullptr) {
logger.error(
"This field is supposed to be non-primitive but has "
- "a primitive type!");
+ "a primitive type!", *this);
valid = false;
}
}
@@ -102,7 +102,7 @@ bool FieldDescriptor::doValidate(Logger &logger) const
if (!names.insert(c->getName()).second) {
logger.error(std::string("Field \"") + getName() +
"\" had multiple children with the name \"" +
- c->getName() + "\"");
+ c->getName() + "\"", *this);
valid = false;
}
}
@@ -139,15 +139,15 @@ bool Descriptor::doValidate(Logger &logger) const
bool valid = true;
// check parent type
if (getParent() == nullptr) {
- logger.error("This Descriptor has no parent!");
+ logger.error("This Descriptor has no parent!", *this);
valid = false;
} else if (!getParent()->isa(RttiTypes::Domain)) {
- logger.error("The parent of this Descriptor is not a Domain!");
+ logger.error("The parent of this Descriptor is not a Domain!", *this);
valid = false;
}
// check name
if (getName().empty()) {
- logger.error("The name of this Descriptor is empty!");
+ logger.error("The name of this Descriptor is empty!", *this);
valid = false;
} else {
valid = valid & validateName(logger);
@@ -160,7 +160,7 @@ bool Descriptor::doValidate(Logger &logger) const
"field \"" +
fd->getName() +
"\" as child but the field does not "
- "have the Descriptor as parent.");
+ "have the Descriptor as parent.", *this);
valid = false;
}
}
@@ -333,13 +333,13 @@ bool StructuredClass::doValidate(Logger &logger) const
if (sub->getSuperclass() != this) {
logger.error(std::string("Struct \"") + sub->getName() +
"\" is registered as subclass of \"" + getName() +
- "\" but does not have it as superclass!");
+ "\" but does not have it as superclass!", *this);
valid = false;
}
}
// check the cardinality.
if(!cardinality.isCardinality()){
- logger.error(cardinality.toString() + " is not a cardinality!");
+ logger.error(cardinality.toString() + " is not a cardinality!", *this);
valid = false;
}
// check the validity of this superclass.