public RunnableNode CreateNode(string id, Metadata metadata, System.Threading.ManualResetEvent terminateExperimentExecutionResetEvent)
        {
            StartNodeMetadata startNodeMetadata = metadata as StartNodeMetadata;
            EndNodeMetadata endNodeMetadata = metadata as EndNodeMetadata;
            ComponentMetadata componentMetadata = metadata as ComponentMetadata;

            if (startNodeMetadata != null)
            {
                return new RunnableStartNode(id);
            }
            else if (endNodeMetadata != null)
            {
                return new RunnableEndNode(id, endNodeMetadata.WaitsForAllPredecessors);
            }
            else if (componentMetadata != null)
            {
                //mock failure
                if (componentMetadata.Label.Equals("Broken Component"))
                {
                    throw new ArgumentException("Failed");
                }

                //otherwise create a mock node and keep reference
                MockNode mockNode = new MockNode(id);
                CreatedNodes.Add(mockNode);

                return mockNode;
            }
            else
            {
                throw new ArgumentException("Could not identify node type.");
            }
        }