/// <summary> /// Loads the decision module based on the decision metadata /// </summary> /// <param name="decisionMetadata">The decision metadata.</param> /// <param name="workspaceWrapper">The workspace wrapper.</param> /// <param name="componentsAppDomain">The components app domain is the app domain which decision assembly is going to be loaded into.</param> /// <returns>Loaded decision</returns> internal static ILoopDecisionModule LoadDecisionModule(LoopScopeMetadata loopMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain) { DecisionLoader loader = ConstructDecisionModuleInComponentsAppDomain(loopMetadata, workspaceWrapper, componentsAppDomain); return (ILoopDecisionModule)loader.LoadedDecisionModule; }
/// <summary> /// Clones this instance. /// </summary> /// <returns></returns> public override Metadata Clone() { var clone = new LoopScopeMetadata(); clone.CopyFrom(this); return(clone); }
/// <summary> /// Performs a deep copy of the data in this object to another instance of the Metadata. /// </summary> /// <param name="other">The other.</param> protected override void CopyFrom(Metadata other) { base.CopyFrom(other); LoopScopeMetadata metadata = (LoopScopeMetadata)other; UniqueDecisionID = metadata.UniqueDecisionID; CompilationStatus = metadata.CompilationStatus; IsCodeDirty = metadata.IsCodeDirty; DecisionCode = metadata.DecisionCode; }
/// <summary> /// Creates the scope composite component node. It actually returns the composite component, but with different nested workspace wrapper. /// </summary> /// <param name="id">The id.</param> /// <param name="loopScopeMetadata">The scope metadata.</param> /// <param name="loggerNameRoot">The logger name root.</param> /// <param name="library">The library.</param> /// <param name="componentsAppDomain">The components app domain.</param> /// <param name="terminateExperimentExecutionResetEvent">The terminate experiment execution reset event.</param> /// <returns></returns> protected RunnableNode CreateLoopNode(string id, LoopScopeMetadata loopScopeMetadata, LoggerNameRoot loggerNameRoot, ComponentsLibrary library, AppDomain componentsAppDomain, System.Threading.ManualResetEvent terminateExperimentExecutionResetEvent) { ScopeNestedWorkspaceWrapper workspaceWrapper = WorkspaceWrapperFactory.CreateCompositeComponentWorkspaceWrapper(loopScopeMetadata, Workspace, id, componentsAppDomain); //scope can standard runnable factory, unlike the composite component IRunnableNodeFactory nodesFactory = new RunnableNodeFactory(workspaceWrapper); RunnableExperimentBase subExperiment = ConstructSubExperiment(loopScopeMetadata, loggerNameRoot, library, componentsAppDomain, terminateExperimentExecutionResetEvent, nodesFactory); ILoopDecisionModule decisionModule = DecisionModuleFactory.LoadDecisionModule(loopScopeMetadata, Workspace, componentsAppDomain); return new RunnableLoopNode(id, decisionModule, loopScopeMetadata, subExperiment, workspaceWrapper, library, loopScopeMetadata.WaitsForAllPredecessors); }
private void CompileLoopDecision(string code) { //constuct mock loop metadata - subgraph does not matter in code compilation LoopScopeMetadata mockLoopMetadata = new LoopScopeMetadata(null, "Mock loop", String.Empty); Dictionary<string, string> mockSuccessorNodeLabelIdLookup = new Dictionary<string, string>(); Dictionary<string, string> mockPredeccessorsOutputsNameTypeLookup = new Dictionary<string, string>(); mockPredeccessorsOutputsNameTypeLookup.Add("test", "int"); mockLoopMetadata.DecisionCode = code; DecisionCompilationRunner_Accessor.BuildSourceAndCompileDecisionModule(mockLoopMetadata, mockSuccessorNodeLabelIdLookup, mockPredeccessorsOutputsNameTypeLookup, AppContext.WorkspaceInstance.TypeDirectories, new LoggerNameRoot("Mock")); }
/// <summary> /// Clones this instance. /// </summary> /// <returns></returns> public override Metadata Clone() { var clone = new LoopScopeMetadata(); clone.CopyFrom(this); return clone; }