// HERZUM SPRINT 3.0: TLAB-176 private bool IncludeChallenge(CompositeComponentGraph experiment) { if (experiment == null) { return(false); } foreach (ExperimentNode node in experiment.Vertices) { ChallengeMetadata ch_meta = node.Data.Metadata as ChallengeMetadata; if (ch_meta != null) { // HERZUM SPRINT 3.0: TLAB-176 ExperimentNodeConnection firstInEdge = experiment.InEdge(node, 0); ExperimentNodeConnection firstOutEdge = experiment.OutEdge(node, 0); if (firstInEdge != null && firstInEdge.Source != null && firstOutEdge != null && firstOutEdge.Target != null) { experiment.AddEdge(new ExperimentNodeConnection(Guid.NewGuid().ToString(), firstInEdge.Source, firstOutEdge.Target)); } // END HERZUM SPRINT 3.0: TLAB-176 experiment.RemoveVertex(node); return(true); } CompositeComponentBaseMetadata meta = node.Data.Metadata as CompositeComponentBaseMetadata; if (meta != null) { return(IncludeChallenge(meta.ComponentGraph)); } } return(false); }
// HERZUM SPRINT 4.0: TLAB-204 public bool IncludeChallenge() { foreach (ExperimentNode node in Vertices) { ChallengeMetadata ch_meta = node.Data.Metadata as ChallengeMetadata; if (ch_meta != null) { return(true); } CompositeComponentBaseMetadata meta = node.Data.Metadata as CompositeComponentBaseMetadata; // HERZUM SPRINT 4.2: BUG FIX - add meta.ComponentGraph != null if (meta != null && meta.ComponentGraph != null) { if (meta.ComponentGraph.IncludeChallenge()) { return(true); } } } return(false); }
/// <summary> /// Creates the Runnable node with a specific id based on the given metadata. /// </summary> /// <param name="nodeId">The node id.</param> /// <param name="metadata">The component metadata.</param> /// <param name="loggerNameRoot">The logger name root - needed so that the logs are specific per experiment and experiment window.</param> /// <param name="library">The library of components.</param> /// <param name="componentsAppDomain">The components app domain is the app domain which components assemblies are going to be loaded into.</param> /// <param name="terminateExperimentExecutionResetEvent">The event that allows signalling termination of the experiment; /// Needed for the composite components sublevel experiments, so that they hold the referance to the same termination event as top level experiment.</param> /// <returns> /// Created node /// </returns> public virtual RunnableNode CreateNode(String nodeId, Metadata metadata, LoggerNameRoot loggerNameRoot, ComponentsLibrary library, AppDomain componentsAppDomain, System.Threading.ManualResetEvent terminateExperimentExecutionResetEvent) { RunnableNode retNode; ComponentMetadata componentMetadata = metadata as ComponentMetadata; DecisionMetadata decisionMetadata = metadata as DecisionMetadata; StartNodeMetadata startNodeMetadata = metadata as StartNodeMetadata; EndNodeMetadata endNodeMetadata = metadata as EndNodeMetadata; ScopeBaseMetadata scopeMetadata = metadata as ScopeBaseMetadata; LoopScopeMetadata loopMetadata = metadata as LoopScopeMetadata; CompositeComponentMetadata compositeComponentMetadata = metadata as CompositeComponentMetadata; ExitDecisionMetadata exitDecisionMetadata = metadata as ExitDecisionMetadata; // HERZUM SPRINT 2.0: TLAB-65 ChallengeMetadata challengeMetadata = metadata as ChallengeMetadata; // END HERZUM SPRINT 2.0: TLAB-65 if (componentMetadata != null) { TraceLabSDK.ComponentLogger logger = TraceLab.Core.Components.LoggerFactory.CreateLogger(loggerNameRoot, nodeId, componentMetadata); IComponent component = library.LoadComponent(componentMetadata, Workspace, logger, componentsAppDomain); retNode = new RunnableComponentNode(nodeId, componentMetadata.Label, component, logger, library, componentMetadata.WaitsForAllPredecessors); } else if (decisionMetadata != null) { IDecisionModule decisionModule = DecisionModuleFactory.LoadDecisionModule(decisionMetadata, Workspace, componentsAppDomain); retNode = new RunnableDecisionNode(nodeId, decisionMetadata.Label, decisionModule, library, decisionMetadata.WaitsForAllPredecessors); } else if (startNodeMetadata != null) { retNode = new RunnableStartNode(nodeId); } else if (endNodeMetadata != null) { retNode = new RunnableEndNode(nodeId, endNodeMetadata.WaitsForAllPredecessors); } else if (loopMetadata != null) { retNode = CreateLoopNode(nodeId, loopMetadata, loggerNameRoot, library, componentsAppDomain, terminateExperimentExecutionResetEvent); } else if (scopeMetadata != null) { retNode = CreateScopeCompositeComponentNode(nodeId, scopeMetadata, loggerNameRoot, library, componentsAppDomain, terminateExperimentExecutionResetEvent); } else if (compositeComponentMetadata != null) { retNode = CreateCompositeComponentNode(nodeId, compositeComponentMetadata, loggerNameRoot, library, componentsAppDomain, terminateExperimentExecutionResetEvent); } else if (exitDecisionMetadata != null) { retNode = new RunnablePrimitiveNode(nodeId, exitDecisionMetadata.WaitsForAllPredecessors); } // HERZUM SPRINT 2.0: TLAB-65 else if (challengeMetadata != null) { retNode = CreateScopeCompositeComponentNode(nodeId, challengeMetadata, loggerNameRoot, library, componentsAppDomain, terminateExperimentExecutionResetEvent); } // END HERZUM SPRINT 2.0: TLAB-65 else { throw new Exceptions.InconsistentTemplateException("Could not identify node type."); } return(retNode); }