int MpTopologyGraph::addTopologyResources(MpResourceTopology& resourceTopology, MpResourceFactory& resourceFactory, UtlHashBag& newResources, UtlBoolean replaceNumInName, int resourceNum) { // Add the resources int resourceIndex = 0; MpResource* resourcePtr = NULL; MpResource* resourceArray[MAX_CONSTRUCTED_RESOURCES]; UtlString resourceType; UtlString resourceName; MpConnectionID resourceConnId; int resourceStreamId; OsStatus result; while(resourceTopology.getResource(resourceIndex, resourceType, resourceName, resourceConnId, resourceStreamId) == OS_SUCCESS) { if(replaceNumInName) { MpResourceTopology::replaceNumInName(resourceName, resourceNum); } int numConstructorResources; OsStatus status; status = resourceFactory.newResource(resourceType, resourceName, MAX_CONSTRUCTED_RESOURCES, numConstructorResources, resourceArray); if(status == OS_SUCCESS) { assert(numConstructorResources > 0); int arrayIndex; // We now can potentially get more than one resource back from the // constructor for(arrayIndex = 0; arrayIndex < numConstructorResources; arrayIndex++) { resourcePtr = resourceArray[arrayIndex]; assert(resourcePtr); if(resourcePtr) { #ifdef TEST_PRINT printf("constructed and adding resource name: %s type: %s\n", resourcePtr->getName().data(), resourceType.data()); #endif if(replaceNumInName && resourceConnId == MP_INVALID_CONNECTION_ID) { resourcePtr->setConnectionId(resourceNum); } else { resourcePtr->setConnectionId(resourceConnId); } resourcePtr->setStreamId(resourceStreamId); newResources.insert(resourcePtr); result = addResource(*resourcePtr, FALSE); assert(result == OS_SUCCESS); } } } else { OsSysLog::add(FAC_MP, PRI_ERR, "Failed to create resource type: %s name: %s status: %d", resourceType.data(), resourceName.data(), status); } resourceIndex++; } return(resourceIndex); }