示例#1
0
        /// <summary>
        /// Gets the content from the SIFElement for the specified version of SIF. Only
        /// elements that apply to the requested version of SIF will be returned.
        /// </summary>
        /// <param name="element">The element to retrieve content from</param>
        /// <param name="version"></param>
        /// <returns></returns>
        public virtual IList <Element> GetContent(SifElement element, SifVersion version)
        {
            List <Element>            returnValue = new List <Element>();
            ICollection <SimpleField> fields      = element.GetFields();

            foreach (SimpleField val in fields)
            {
                IElementDef def = val.ElementDef;
                if (def.IsSupported(version) &&
                    !def.IsAttribute(version) &&
                    def.Field)
                {
                    returnValue.Add(val);
                }
            }

            IList <SifElement> children = element.GetChildList();

            foreach (SifElement val in children)
            {
                IElementDef def = val.ElementDef;
                if (def.IsSupported(version))
                {
                    returnValue.Add(val);
                }
            }


            MergeSort.Sort <Element>(returnValue, ElementSorter <Element> .GetInstance(version));
            //returnValue.Sort( ElementSorter<Element>.GetInstance( version ) );
            return(returnValue);
        }
示例#2
0
        /// <summary>
        /// Gets the content from the SIFElement for the specified version of SIF. Only
        /// elements that apply to the requested version of SIF will be returned.
        /// </summary>
        /// <param name="element">The element to retrieve content from</param>
        /// <param name="version"></param>
        /// <returns></returns>
        public override IList <Element> GetContent(SifElement element, SifVersion version)
        {
            List <Element>            returnValue = new List <Element>();
            ICollection <SimpleField> fields      = element.GetFields();

            foreach (SimpleField val in fields)
            {
                IElementDef def = val.ElementDef;
                if (def.IsSupported(version) &&
                    !def.IsAttribute(version) &&
                    def.Field)
                {
                    returnValue.Add(val);
                }
            }

            IList <SifElement> children = element.GetChildList();

            foreach (SifElement val in children)
            {
                IElementDef def = val.ElementDef;
                if (def.IsSupported(version))
                {
                    if (def.IsCollapsed(version))
                    {
                        ICollection <Element> subElements = GetContent(val, version);
                        // FIXUP the ElementDef for this version of SIF.
                        // for example, StudentPersonal/EmailList/Email needs it's
                        // ElementDef set to "StudentPersonal_Email"
                        foreach (Element e in subElements)
                        {
                            IElementDef subElementDef = e.ElementDef;
                            if (version.CompareTo(subElementDef.EarliestVersion) >= 0)
                            {
                                String      tag         = subElementDef.Tag(Adk.SifVersion);
                                IElementDef restoredDef = Adk.Dtd.LookupElementDef(element.ElementDef, tag);
                                if (restoredDef != null)
                                {
                                    e.ElementDef = restoredDef;
                                }
                                returnValue.Add(e);
                            }
                        }
                    }
                    else
                    {
                        returnValue.Add(val);
                    }
                }
            }
            MergeSort.Sort <Element>(returnValue, ElementSorter <Element> .GetInstance(version));
            //returnValue.Sort(ElementSorter<Element>.GetInstance(version));
            return(returnValue);
        }
示例#3
0
        /// <summary>  Write a SIF element in the version of SIF currently in effect for this
        /// SifWriter.
        /// </summary>
        /// <param name="element">The SIF Element instance to Write to the output stream
        /// <param name="isLegacy">if true, this method assumes that it needs to do more work,
        /// such as looking for rendering surrogates for the specific version of SIF</param>
        /// </param>
        private void WriteElement(SifElement element, bool isLegacy)
        {
            IElementDef def = element.ElementDef;

            if (!(Include(element) && def.IsSupported(fVersion)))
            {
                return;
            }

            if (isLegacy)
            {
                IRenderSurrogate surrogate = def.GetVersionInfo(fVersion).GetSurrogate();
                if (surrogate != null)
                {
                    surrogate.RenderRaw(fWriter, fVersion, element, fFormatter);
                    return;
                }
            }

            if (element.IsEmpty() || !HasContent(element, fVersion))
            {
                if (element is XMLData)
                {
                    XmlDocument doc = ((XMLData)element).Xml;
                    doc.Save(fWriter);
                }
                else
                {
                    Write(element, EMPTY, isLegacy);
                }
            }
            else
            {
                Write(element, OPEN, isLegacy);

                ICollection <Element> elements = fFormatter.GetContent(element, fVersion);
                foreach (Element childElement in elements)
                {
                    if (childElement is SifElement)
                    {
                        WriteElement((SifElement)childElement, isLegacy);
                    }
                    else
                    {
                        Write((SimpleField)childElement, isLegacy);
                    }
                }
                fWriter.WriteEndElement();
            }
        }
        internal AdkAttributeIterator(SifElementPointer parent) : base(parent)
        {
            SifVersion version = parent.Version;

            SifElement node = (SifElement)parent.Node;

            // Capture all fields
            foreach (SimpleField field in node.GetFields())
            {
                IElementDef fieldDef = field.ElementDef;
                if (fieldDef.IsSupported(version) &&
                    fieldDef.IsAttribute(version))
                {
                    addNodeToIterate(field);
                }
            }
        }
示例#5
0
        /**
         * Creates a SIF_Query element from the specified Adk query object using
         * the specified version of SIF
         * @param query The Query to convert to a SIF_Query
         * @param version The version of SIF to render the SIF_Query xml in
         * @param allowFieldRestrictions True if the field restrictions in the query should be rendered
         * @return a SIF_Query object
         */
        public static SIF_Query CreateSIF_Query(Query query, SifVersion version, bool allowFieldRestrictions)
        {
            SIF_QueryObject sqo  = new SIF_QueryObject(query.ObjectType.Tag(version));
            SIF_Query       sifQ = new SIF_Query(sqo);

            if (query.HasConditions)
            {
                sifQ.SIF_ConditionGroup = createConditionGroup(query, version);
            }

            if (allowFieldRestrictions && query.HasFieldRestrictions)
            {
                foreach (ElementRef elementRef in query.FieldRestrictionRefs)
                {
                    String      path  = null;
                    IElementDef field = elementRef.Field;
                    if (field != null)
                    {
                        if (!field.IsSupported(version))
                        {
                            continue;
                        }
                        path = field.GetSQPPath(version);
                    }
                    if (path == null)
                    {
                        path = elementRef.XPath;
                    }
                    if (path != null)
                    {
                        path = Adk.Dtd.TranslateSQP(query.ObjectType, path, version);
                        sqo.AddSIF_Element(new SIF_Element(path));
                    }
                }
            }

            return(sifQ);
        }