diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/model/Document.cpp | 102 | ||||
| -rw-r--r-- | src/core/model/Domain.cpp | 24 | 
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.  | 
