/// <summary> /// Register an instantiated INodeProvider with the node manager. The node manager will query the nodeprovider /// for a list of its node descriptions, and add these nodes to a master list of nodes which can be used /// by the scheduler. QUESTION: Do we allow duplicate Node Providers? /// </summary> /// <param name="providerToRegister"></param> /// <returns></returns> internal bool RegisterNodeProvider(INodeProvider nodeProviderToRegister) { ErrorUtilities.VerifyThrowArgumentNull(nodeProviderToRegister, "nodeProviderToRegister"); INodeDescription[] nodeDescriptions = nodeProviderToRegister.QueryNodeDescriptions(); int[] nodeIds = new int[nodeDescriptions.Length]; for (int i = 0; i < nodeIds.Length; i++) { nodeIds[i] = parentEngine.GetNextNodeId(); } nodeProviderToRegister.AssignNodeIdentifiers(nodeIds); // Go through all of the nodes as described by nodeDescriptions and add them to out list of nodes for (int i = 0; i < nodeDescriptions.Length; i++) { ProvidersNodeInformation nodeToAddFromProvider = new ProvidersNodeInformation(i, nodeIds[i], nodeDescriptions[i], nodeProviderToRegister); nodeList.Add(nodeToAddFromProvider); } nodeProviders.Add(nodeProviderToRegister); return(true); }
/// <summary> /// Provide an array of INodeDescriptionsof the node provided by the node provider for the node. The index of the description /// is the node index to which the description matches /// </summary> /// <returns></returns> internal INodeDescription[] GetNodeDescriptions() { // The number of node descriptions is the number of nodes from all of the node providers, plus one for the default "0" node INodeDescription[] nodeDescription = new INodeDescription[nodeList.Count + 1]; nodeDescription[0] = null; for (int nodeListIndex = 0; nodeListIndex < nodeList.Count; nodeListIndex++) { ProvidersNodeInformation nodeInfo = nodeList[nodeListIndex]; // +1 because the node description already has the 0 element set to null nodeDescription[nodeListIndex + 1] = nodeInfo.Description; } return(nodeDescription); }