Exemplo n.º 1
0
        /// <summary>
        /// Inherit values from parent node.
        /// </summary>
        internal static void InheritValues(PdfDictionary page, InheritedValues values)
        {
            // HACK: I'M ABSOLUTELY NOT SURE WHETHER THIS CODE COVERS ALL CASES.
            if (values.Resources != null)
            {
                PdfDictionary resources;
                PdfItem       res = page.Elements[PdfPage.Keys.Resources];
                if (res is PdfReference)
                {
                    resources          = (PdfDictionary)((PdfReference)res).Value.Clone();
                    resources.Document = page.Owner;
                }
                else
                {
                    resources = (PdfDictionary)res;
                }

                if (resources == null)
                {
                    resources          = values.Resources.Clone();
                    resources.Document = page.Owner;
                    page.Elements.Add(PdfPage.Keys.Resources, resources);
                }
                else
                {
                    foreach (PdfName name in values.Resources.Elements.KeyNames)
                    {
                        if (!resources.Elements.ContainsKey(name.Value))
                        {
                            PdfItem item = values.Resources.Elements[name];
                            if (item is PdfObject)
                            {
                                item = item.Clone();
                            }
                            resources.Elements.Add(name.ToString(), item);
                        }
                    }
                }
            }

            if (values.MediaBox != null && page.Elements[PdfPage.Keys.MediaBox] == null)
            {
                page.Elements[PdfPage.Keys.MediaBox] = values.MediaBox;
            }

            if (values.CropBox != null && page.Elements[PdfPage.Keys.CropBox] == null)
            {
                page.Elements[PdfPage.Keys.CropBox] = values.CropBox;
            }

            if (values.Rotate != null && page.Elements[PdfPage.Keys.Rotate] == null)
            {
                page.Elements[PdfPage.Keys.Rotate] = values.Rotate;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Add all inheritable values from the specified page to the specified values structure.
        /// </summary>
        internal static void InheritValues(PdfDictionary page, ref InheritedValues values)
        {
            PdfItem item = page.Elements[InheritablePageKeys.Resources];

            if (item != null)
            {
                PdfReference reference = item as PdfReference;
                if (reference != null)
                {
                    values.Resources = (PdfDictionary)(reference.Value);
                }
                else
                {
                    values.Resources = (PdfDictionary)item;
                }
            }

            item = page.Elements[InheritablePageKeys.MediaBox];
            if (item != null)
            {
                values.MediaBox = new PdfRectangle(item);
            }

            item = page.Elements[InheritablePageKeys.CropBox];
            if (item != null)
            {
                values.CropBox = new PdfRectangle(item);
            }

            item = page.Elements[InheritablePageKeys.Rotate];
            if (item != null)
            {
                if (item is PdfReference)
                {
                    item = ((PdfReference)item).Value;
                }
                values.Rotate = (PdfInteger)item;
            }
        }
        string ResolveUnspecified(object parentExitData)
        {
            StringBuilder sb = new StringBuilder();

            if (HasInheritedValues)
            {
                sb.Append(InheritedValues.ToString());
            }

            //make rest call
            if (HasUri)
            {
                sb.Append(WebRequestClient.GetString(Uri));
            }

            //merge parms
            if (HasValues)
            {
                sb.Append(Values.ToString());
            }

            if (HasDynamic)
            {
                foreach (string key in _dynamicData.Keys)
                {
                    sb.Append($"{key}:{_dynamicData[key]},");
                }
            }

            if (HasParentExitData)
            {
                sb.Append(parentExitData.ToString());
            }

            return(sb.ToString().TrimEnd(','));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Add all inheritable values from the specified page to the specified values structure.
        /// </summary>
        internal static void InheritValues(PdfDictionary page, ref InheritedValues values)
        {
            PdfItem item = page.Elements[InheritablePageKeys.Resources];
            if (item != null)
            {
                PdfReference reference = item as PdfReference;
                if (reference != null)
                    values.Resources = (PdfDictionary)(reference.Value);
                else
                    values.Resources = (PdfDictionary)item;
            }

            item = page.Elements[InheritablePageKeys.MediaBox];
            if (item != null)
                values.MediaBox = new PdfRectangle(item);

            item = page.Elements[InheritablePageKeys.CropBox];
            if (item != null)
                values.CropBox = new PdfRectangle(item);

            item = page.Elements[InheritablePageKeys.Rotate];
            if (item != null)
            {
                if (item is PdfReference)
                    item = ((PdfReference)item).Value;
                values.Rotate = (PdfInteger)item;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Inherit values from parent node.
        /// </summary>
        internal static void InheritValues(PdfDictionary page, InheritedValues values)
        {
            // HACK: I'M ABSOLUTELY NOT SURE WHETHER THIS CODE COVERS ALL CASES.
            if (values.Resources != null)
            {
                PdfDictionary resources;
                PdfItem res = page.Elements[InheritablePageKeys.Resources];
                if (res is PdfReference)
                {
                    resources = (PdfDictionary)((PdfReference)res).Value.Clone();
                    resources.Document = page.Owner;
                }
                else
                    resources = (PdfDictionary)res;

                if (resources == null)
                {
                    resources = values.Resources.Clone();
                    resources.Document = page.Owner;
                    page.Elements.Add(InheritablePageKeys.Resources, resources);
                }
                else
                {
                    foreach (PdfName name in values.Resources.Elements.KeyNames)
                    {
                        if (!resources.Elements.ContainsKey(name.Value))
                        {
                            PdfItem item = values.Resources.Elements[name];
                            if (item is PdfObject)
                                item = item.Clone();
                            resources.Elements.Add(name.ToString(), item);
                        }
                    }
                }
            }

            if (values.MediaBox != null && page.Elements[InheritablePageKeys.MediaBox] == null)
                page.Elements[InheritablePageKeys.MediaBox] = values.MediaBox;

            if (values.CropBox != null && page.Elements[InheritablePageKeys.CropBox] == null)
                page.Elements[InheritablePageKeys.CropBox] = values.CropBox;

            if (values.Rotate != null && page.Elements[InheritablePageKeys.Rotate] == null)
                page.Elements[InheritablePageKeys.Rotate] = values.Rotate;
        }
        XmlDocument ResolveXml(ref List <object> forEachParms, object parentExitData, Dictionary <string, ParameterInfo> globalParamSets)
        {
            string context = "ResolveXml";
            string errData = __nodata;

            try
            {
                XmlDocument parms = null;

                if (HasInheritedValues)
                {
                    context = "InheritedValues=>Clone";
                    errData = InheritedValues.GetType().ToString();
                    parms   = (XmlDocument)((XmlDocument)((ParameterInfo)InheritedValues).Values).Clone();
                }

                if (HasUri)
                {
                    context = "Uri=>Fetch";
                    try { errData = new Uri(Uri).ToString(); } catch { errData = Uri.ToString(); }

                    string uriContent = WebRequestClient.GetString(Uri);
                    context = "Uri=>Fetch, LoadXml";
                    errData = uriContent;
                    XmlDocument uriXml = new XmlDocument();
                    uriXml.LoadXml(uriContent);

                    context = parms != null ? "Merge->Inherited" : "Assign to parms";
                    context = $"Uri=>{context}";
                    errData = XmlHelpers.Serialize <XmlDocument>(uriXml);
                    if (parms != null)
                    {
                        XmlHelpers.Merge(ref parms, uriXml);
                    }
                    else
                    {
                        parms = uriXml;
                    }
                }

                //merge parms
                if (HasValues)
                {
                    context = "HasValues=>LoadXml";
                    errData = Values.ToString();
                    XmlDocument values = new XmlDocument();
                    values.LoadXml(Values.ToString());

                    context = parms != null ? "Merge->Inherited+Uri+Values" : "Assign to parms";
                    context = $"Uri=>{context}";
                    errData = XmlHelpers.Serialize <XmlDocument>(values);
                    if (parms != null)
                    {
                        XmlHelpers.Merge(ref parms, values);
                    }
                    else
                    {
                        parms = values;
                    }
                }


                if (parms == null)
                {
                    parms = new XmlDocument();
                }


                //kv_replace
                if (HasDynamic)
                {
                    context = "HasDynamic=>Merge->Inherited+Uri+Values+Dynamic";
                    try { errData = YamlHelpers.Serialize(_dynamicData); } catch { errData = __nodata; }   //YamlHelpers not a mistake, used it on purpose for easy to read error data
                    XmlHelpers.Merge(ref parms, Dynamic, _dynamicData);
                }

                if (HasParentExitData && parentExitData != null)
                {
                    context = "ParentExitData=>Init Xml Source";
                    errData = parentExitData.GetType().ToString();

                    XmlDocument xd = new XmlDocument();
                    if (parentExitData is XmlNode)
                    {
                        xd.InnerXml = ((XmlNode)parentExitData).OuterXml;
                    }
                    else if (parentExitData is XmlNode[])
                    {
                        xd.InnerXml = ((XmlNode[])parentExitData)[0].OuterXml;
                    }
                    else if (parentExitData is string)
                    {
                        xd.InnerXml = (string)parentExitData;
                    }
                    else
                    {
                        xd = (XmlDocument)parentExitData;
                    }

                    context = "ParentExitData=>Merge->Inhetited+Uri+Values+Dynamic+ParentExitData";
                    errData = XmlHelpers.Serialize <XmlDocument>(xd);
                    XmlHelpers.Merge(ref parms, ParentExitData, ref xd);
                }

                if (HasForEach && parms != null)
                {
                    //assemble ForEach variables
                    if (ForEach.HasParameterSourceItems)
                    {
                        context = "ForEach=>HasParameterSourceItems";
                        errData = null;
                        XmlHelpers.SelectForEachFromValues(ForEach.ParameterSourceItems, ref parms, globalParamSets, parentExitData);
                    }

                    //expand ForEach variables
                    context = "ForEach=>ExpandForEach";
                    try { errData = XmlHelpers.Serialize <XmlDocument>(parms); } catch { errData = __nodata; }
                    forEachParms = XmlHelpers.ExpandForEachAndApplyPatchValues(ref parms, ForEach);
                }


                return(parms);
            }
            catch (Exception ex)
            {
                throw new Exception(GetResolveExceptionMessage(context, errData), ex);
            }
        }