Exemplo n.º 1
0
        private string ProcessResourceContainerXElement(NodeBuilder nodeBuilder, XElement elm, List <XNode> nodes, int index)
        {
            if (elm.Name.LocalName == "Resource")
            {
                var name      = GetAttribute(elm, "name");
                var condition = GetAttribute(elm, "condition");
                var mode      = GetAttribute(elm, "mode");

                string val;

                if (!methodConfig.DocumentConfig.Resources.TryGetValue(name, out val))
                {
                    throw new InvalidOperationException($"'{name}' is not a valid property");
                }

                var resource = methodConfig.Method.GetValue(val);

                switch (condition)
                {
                case "Stream":
                    if (methodConfig.MethodType != MethodType.Stream)
                    {
                        return(string.Empty);
                    }
                    break;

                case "CancellationToken":
                    if (!methodConfig.IsTokenInterface)
                    {
                        return(string.Empty);
                    }
                    break;

                case "none":
                    break;

                default:
                    throw new NotImplementedException($"Don't know how to handle resource for condition '{condition}'");
                }

                switch (mode)
                {
                case "append":
                    if (resource.StartsWith("<para/>"))
                    {
                        return(resource);
                    }

                    return(" " + resource);

                case "replace":
                    nodeBuilder.Clear();
                    nodeBuilder.Continue = false;
                    return(resource);

                default:
                    throw new NotImplementedException();
                }

                throw new NotImplementedException();
            }
            else
            {
                throw new NotImplementedException();
            }
        }