private StreamDirectory createFromNode(PipelineContext ctx, XmlElement providerNode, XmlElement parentNode, bool mustExcept) { String type = providerNode.ReadStr("@type", null); if (type != null && providerNode.LocalName == "provider") //Node could be a datasource, where type describes the type of the datasource { return(ImportEngine.CreateObject <StreamDirectory>(type, ctx, providerNode, parentNode)); } if (providerNode.GetAttributeNode("file") != null || providerNode.GetAttributeNode("root") != null) { return(new FileStreamDirectory(ctx, providerNode, parentNode)); } if (providerNode.GetAttributeNode("url") != null) { return(new WebStreamDirectory(ctx, providerNode, parentNode)); } if (providerNode.GetAttributeNode("cmd") != null) { return(new ShellStreamDirectory(ctx, providerNode, parentNode)); } if (mustExcept) { XmlUtils.ThrowMissingException(providerNode, "@type, @file, @root or @url"); } return(null); }