ArchivePtr ItemTreeArchiver::storeIter(ArchivePtr& parentArchive, Item* item) { string pluginName; string className; if(!ItemManager::getClassIdentifier(item, pluginName, className)) { messageView->putln(format(_("\"%1%\" cannot be stored. Its type is not registered.")) % item->name()); return 0; } ArchivePtr archive = new Archive(); archive->inheritSharedInfoFrom(parentArchive); messageView->putln(format(_("Storing %1% \"%2%\"")) % className % item->name()); messageView->flush(); ArchivePtr dataArchive = new Archive(); dataArchive->inheritSharedInfoFrom(parentArchive); if(!item->store(*dataArchive)) { messageView->putln(format(_("\"%1%\" cannot be stored.")) % item->name()); return 0; } archive->registerItemId(item, itemIdCounter); archive->write("id", itemIdCounter); itemIdCounter++; archive->write("name", item->name(), YAML_DOUBLE_QUOTED); archive->write("plugin", pluginName); archive->write("class", className); if(!dataArchive->empty()) { archive->insert("data", dataArchive); } YamlSequencePtr children = new YamlSequence(); for(Item* childItem = item->childItem(); childItem; childItem = childItem->nextItem()) { if(childItem->isSubItem()) { continue; } ArchivePtr childArchive = storeIter(archive, childItem); if(childArchive) { children->append(childArchive); } } if(!children->empty()) { archive->insert("children", children); } return archive; }
bool SensorVisualizerItem::store(Archive& archive) { ListingPtr subItems = new Listing(); for(size_t i=0; i < impl->subItems.size(); i++){ Item* item = impl->subItems[i]; string pluginName, className; ItemManager::getClassIdentifier(item, pluginName, className); ArchivePtr subArchive = new Archive(); subArchive->write("class", className); subArchive->write("name", item->name()); item->store(*subArchive); subItems->append(subArchive); } archive.insert("subItems", subItems); return true; }