Monitor::TreeNode* Monitor::MonitorDataStorage::createParticipantNode( const ProcessKey& pid, const OpenDDS::DCPS::GUID_t& id, bool& create ) { if( id == OpenDDS::DCPS::GUID_UNKNOWN) { return 0; } // Find the parent node, if any. It is ok to not have a parent node // for cases of out-of-order udpates. We handle that as the updates // are actually processed. TreeNode* parent = this->getProcessNode( pid, create); // DomainParticipant data. OpenDDS::DCPS::GuidConverter converter( id); QList<QVariant> list; list << QString("DomainParticipant") << QString( QObject::tr( std::string( converter).c_str())); TreeNode* node = new TreeNode( list, parent); if( parent) { parent->append( node); } // Install the new node. this->guidToTreeMap_[ id] = std::make_pair( node->row(), node); return node; }
Monitor::TreeNode* Monitor::MonitorDataStorage::getTransportNode( const TransportKey& key, bool& create ) { TreeNode* node = 0; TransportToTreeMap::iterator location = this->transportToTreeMap_.find( key); if( location == this->transportToTreeMap_.end()) { // We are done if not creating a new node. if( !create) return 0; // This transport needs to be installed. // Find the parent node, if any. It is ok to not have a parent node // for cases of out-of-order updates. We handle that as the updates // are actually processed. ProcessKey pid( key.host, key.pid); TreeNode* parent = this->getProcessNode( pid, create); QList<QVariant> list; QString value = QString("0x%1") .arg( key.transport, 8, 16, QLatin1Char('0')); list << QString( QObject::tr( "Transport")) << value; node = new TreeNode( list, parent); if( parent) { parent->append( node); } // Install the new node. this->transportToTreeMap_[ key] = std::make_pair( node->row(), node); } else { node = location->second.second; create = false; } // If there have been some out-of-order reports, we may have been // created without a parent node. We can fill in that information now // if we can. If we created the node, we already know it has a // parent so this will be bypassed. if( !node->parent()) { create = true; ProcessKey pid( key.host, key.pid); node->parent() = this->getProcessNode( pid, create); } //node->setColor(1,QColor("#ffbfbf")); return node; }
Monitor::TreeNode* Monitor::MonitorDataStorage::getNode( const std::string& label, const OpenDDS::DCPS::GUID_t& parentId, const OpenDDS::DCPS::GUID_t& id, bool& create ) { TreeNode* node = 0; GuidToTreeMap::iterator location = this->guidToTreeMap_.find( id); if( location == this->guidToTreeMap_.end()) { // We are done if not creating a new node. if( !create) return 0; // We need to add a new DomainParticipant. // Find the parent node, if any. It is ok to not have a parent node // for cases of out-of-order udpates. We handle that as the updates // are actually processed. TreeNode* parent = 0; GuidToTreeMap::iterator parentLocation = this->guidToTreeMap_.find( parentId); if( parentLocation != this->guidToTreeMap_.end()) { parent = parentLocation->second.second; } // Node data. OpenDDS::DCPS::GuidConverter converter( id); QList<QVariant> list; list << QString( QObject::tr( label.c_str())) << QString( QObject::tr( std::string( converter).c_str())); node = new TreeNode( list, parent); if( parent) { parent->append( node); } // Install the new node. this->guidToTreeMap_[ id] = std::make_pair( node->row(), node); } else { node = location->second.second; create = false; } // If there have been some out-of-order reports, we may have been // created without a parent node. We can now fill in that information // if we can. If we created the node, we already know it has a // parent so this will be bypassed. if( !node->parent()) { // Need to search for the parent. TreeNode* parent = 0; GuidToTreeMap::iterator parentLocation = this->guidToTreeMap_.find( parentId); if( parentLocation != this->guidToTreeMap_.end()) { parent = parentLocation->second.second; } // And install anything that is found. node->parent() = parent; } return node; }
Monitor::TreeNode* Monitor::MonitorDataStorage::getProcessNode( const ProcessKey& key, bool& create ) { // HOST TreeNode* hostNode = 0; HostToTreeMap::iterator hostLocation = this->hostToTreeMap_.find( key.host); if( hostLocation == this->hostToTreeMap_.end()) { // We are done if not creating a new node. if( !create) return 0; // We need to add a new host. Host nodes are children of the // root node. TreeNode* root = this->model_->modelRoot(); // Host first. QList<QVariant> list; list << QString("Host") << QString( QObject::tr( key.host.c_str())); hostNode = new TreeNode( list, root); root->append( hostNode); // Install the new node. this->hostToTreeMap_[ key.host] = std::make_pair( hostNode->row(), hostNode); } else { // Retain the current host node. hostNode = hostLocation->second.second; } // PROCESS TreeNode* pidNode = 0; ProcessToTreeMap::iterator pidLocation = this->processToTreeMap_.find( key); if( pidLocation == this->processToTreeMap_.end()) { // We are done if not creating a new node. if( !create) return 0; // We need to add a new PID. PID nodes are children of the host // nodes. We just found the relevant host node. // PID data. QList<QVariant> list; list << QString("Process") << QString::number( key.pid); pidNode = new TreeNode( list, hostNode); hostNode->append( pidNode); // Install the new node. this->processToTreeMap_[ key] = std::make_pair( pidNode->row(), pidNode); } else { pidNode = pidLocation->second.second; create = false; } return pidNode; }