Changeset 7163 for code/trunk/src/libraries/core/XMLPort.cc
- Timestamp:
- Aug 11, 2010, 8:55:13 AM (14 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/libraries/core/XMLPort.cc
r5781 r7163 41 41 return ((!this->bApplyLoaderMask_) || identifier->isA(ClassIdentifier<Namespace>::getIdentifier()) || Loader::currentMask_s.isIncluded(identifier)); 42 42 } 43 44 XMLPortObjectContainer& XMLPortObjectContainer::port(BaseObject* object, Element& xmlelement, XMLPort::Mode mode) 45 { 46 if ((mode == XMLPort::LoadObject) || (mode == XMLPort::ExpandObject)) 47 { 48 try 49 { 50 Element* xmlsubelement; 51 if (!this->sectionname_.empty()) 52 xmlsubelement = xmlelement.FirstChildElement(this->sectionname_, false); 53 else 54 xmlsubelement = &xmlelement; 55 56 if (!xmlsubelement) 57 return (*this); 58 59 for (ticpp::Iterator<ticpp::Element> child = xmlsubelement->FirstChildElement(false); child != child.end(); child++) 60 { 61 Identifier* identifier = Identifier::getIdentifierByString(child->Value()); 62 if (!identifier) 63 { 64 if (!this->sectionname_.empty()) 65 { 66 COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not a valid classname." << std::endl; 67 } 68 else 69 { 70 // It's probably just another subsection 71 } 72 continue; 73 } 74 if (!identifier->isA(objectIdentifier_)) 75 { 76 COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not a '" << objectIdentifier_->getName() << "'." << std::endl; 77 continue; 78 } 79 if (!identifier->isLoadable()) 80 { 81 COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not loadable." << std::endl; 82 continue; 83 } 84 if (!this->identifierIsIncludedInLoaderMask(identifier)) 85 continue; 86 87 try 88 { 89 COUT(4) << object->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl; 90 91 BaseObject* newObject = identifier->fabricate(object); 92 newObject->setLoaderIndentation(object->getLoaderIndentation() + " "); 93 94 if (this->bLoadBefore_) 95 { 96 newObject->XMLPort(*child, XMLPort::LoadObject); 97 COUT(4) << object->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << static_cast<BaseObject*>(object)->getName() << ')' << std::endl; 98 } 99 else 100 { 101 COUT(4) << object->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << static_cast<BaseObject*>(object)->getName() << ')' << std::endl; 102 } 103 104 COUT(5) << object->getLoaderIndentation(); 105 106 this->callLoadExecutor(object, newObject); 107 108 if (!this->bLoadBefore_) 109 newObject->XMLPort(*child, XMLPort::LoadObject); 110 111 COUT(5) << object->getLoaderIndentation() << "...fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << std::endl; 112 } 113 catch (AbortLoadingException& ex) 114 { 115 COUT(1) << "An error occurred while loading object, abort loading..." << std::endl; 116 throw ex; 117 } 118 catch (...) 119 { 120 COUT(1) << "An error occurred while loading object:" << std::endl; 121 COUT(1) << Exception::handleMessage() << std::endl; 122 } 123 } 124 } 125 catch (ticpp::Exception& ex) 126 { 127 COUT(1) << std::endl; 128 COUT(1) << "An error occurred in XMLPort.h while loading a '" << objectIdentifier_->getName() << "' in '" << this->sectionname_ << "' of '" << this->identifier_->getName() << "' (objectname: " << object->getName() << ") in " << object->getFilename() << ':' << std::endl; 129 COUT(1) << ex.what() << std::endl; 130 } 131 } 132 else if (mode == XMLPort::SaveObject) 133 { 134 } 135 136 return (*this); 137 } 43 138 }
Note: See TracChangeset
for help on using the changeset viewer.