void EnsureWorkflow() { var context = buildContext; while (context != null) { var includeContext = context as IncludeContext; if (includeContext != null && includeContext.Path == path) { var message = string.Format("Included workflow '{0}' includes itself.", path); throw new InvalidOperationException(message); } context = context.ParentContext; } if (string.IsNullOrEmpty(path)) { workflow = null; description = null; SetArgumentRange(0, 1); } else { var embeddedResource = IsEmbeddedResourcePath(path); var lastWriteTime = embeddedResource ? DateTime.MaxValue : File.GetLastWriteTime(path); if (workflow == null || lastWriteTime > writeTime) { var properties = workflow != null?GetXmlProperties() : xmlProperties; using (var stream = GetWorkflowStream(path, embeddedResource)) using (var reader = XmlReader.Create(stream)) { reader.MoveToContent(); var serializer = new XmlSerializer(typeof(WorkflowBuilder), reader.NamespaceURI); var builder = (WorkflowBuilder)serializer.Deserialize(reader); description = builder.Description; workflow = builder.Workflow; writeTime = lastWriteTime; } var parameterCount = workflow.GetNestedParameters().Count(); SetArgumentRange(0, parameterCount); if (inspectWorkflow) { workflow = workflow.ToInspectableGraph(); } if (properties != null) { SetXmlProperties(properties); } } } }
internal IncludeWorkflowBuilder(IncludeWorkflowBuilder builder, bool inspect) : base(builder.ArgumentRange.LowerBound, builder.ArgumentRange.UpperBound) { inspectWorkflow = inspect; workflow = builder.workflow; if (workflow != null && inspect != builder.inspectWorkflow) { workflow = inspect ? workflow.ToInspectableGraph() : workflow.FromInspectableGraph(); } writeTime = builder.writeTime; name = builder.name; path = builder.path; description = builder.description; xmlProperties = builder.xmlProperties; }