Parse() static private method

static private Parse ( XPathNavigator fieldElement, IXmlNamespaceResolver nsres, ContentType contentType ) : FieldDescriptor
fieldElement System.Xml.XPath.XPathNavigator
nsres IXmlNamespaceResolver
contentType ContentType
return FieldDescriptor
Esempio n. 1
0
        //======================================================================================================= Runtime ContentType

        internal static ContentType Create(Type type, string ctd)
        {
            var contentType = new ContentType(ContentType.GetByName("GenericContent"));//HACK: come from ctd

            var reader    = new StringReader(ctd);
            var xml       = new XPathDocument(reader);
            var nametable = new NameTable();
            var nav       = xml.CreateNavigator();
            var nsres     = new XmlNamespaceManager(nav.NameTable);

            nsres.AddNamespace("x", ContentDefinitionXmlNamespace);
            var contentTypeElement = nav.Select("/x:ContentType", nsres);

            contentTypeElement.MoveNext();
            var contentTypeName = contentTypeElement.Current.GetAttribute("name", "");

            contentType.Name = contentTypeName;
            var fieldElements = nav.Select("/x:ContentType/x:Fields/x:Field", nsres);

            foreach (XPathNavigator fieldElement in fieldElements)
            {
                var fieldDescriptor = FieldDescriptor.Parse(fieldElement, nsres, contentType);
                var fieldSetting    = FieldSetting.Create(fieldDescriptor);
                contentType.FieldSettings.Add(fieldSetting);
            }
            contentType.SetFieldSlots(type);
            return(contentType);
        }
Esempio n. 2
0
        private void ParseFieldElements(XPathNavigator fieldsElement, IXmlNamespaceResolver nsres)
        {
            foreach (XPathNavigator fieldElement in fieldsElement.SelectChildren(XPathNodeType.Element))
            {
                FieldDescriptor fieldDescriptor = FieldDescriptor.Parse(fieldElement, nsres, this);
                CheckFieldValidation(fieldDescriptor, this.Name);

                int          fieldIndex   = GetFieldSettingIndexByName(fieldDescriptor.FieldName);
                FieldSetting fieldSetting = fieldIndex < 0 ? null : this.FieldSettings[fieldIndex];
                if (fieldSetting == null)
                {
                    //==== if there is not...: create and inherit
                    fieldSetting = FieldSetting.Create(fieldDescriptor);
                    this.FieldSettings.Add(fieldSetting);
                    //-- inherit new fieldType
                    foreach (ContentType child in this.ChildTypes)
                    {
                        child.InheritField(fieldSetting);
                    }
                }
                else
                {
                    //==== if there is ...
                    if (fieldSetting.Owner == this)
                    {
                        string fieldSettingTypeName = fieldDescriptor.FieldSettingTypeName;
                        if (String.IsNullOrEmpty(fieldSettingTypeName))
                        {
                            fieldSettingTypeName = FieldManager.GetDefaultFieldSettingTypeName(fieldDescriptor.FieldTypeName);
                        }
                        if (fieldSettingTypeName == fieldSetting.GetType().FullName)
                        {
                            fieldSetting.Modify(fieldDescriptor);
                        }
                        else
                        {
                            ChangeFieldSetting(fieldSetting, fieldDescriptor);
                        }
                    }
                    else
                    {
                        //==== if inherited: break inheritance
                        //-- create new
                        FieldSetting newFieldSetting = FieldSetting.Create(fieldDescriptor);
                        newFieldSetting.ParentFieldSetting = fieldSetting;
                        this.FieldSettings[fieldIndex]     = newFieldSetting;
                        //-- inherit
                        foreach (ContentType child in this.ChildTypes)
                        {
                            child.InheritField(newFieldSetting);
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        private static ContentType Create(ISupportsDynamicFields handler, ContentType baseContentType, string ctd)
        {
            var contentType = new ContentType(baseContentType);

            contentType.DisplayName = baseContentType.DisplayName;
            contentType.Description = baseContentType.Description;

            //contentType.ParentType = baseContentType.ParentType;
            contentType.ParentType = baseContentType;

            contentType.FieldSettings.AddRange(baseContentType.FieldSettings);

            var reader    = new StringReader(ctd);
            var xml       = new XPathDocument(reader);
            var nametable = new NameTable();
            var nav       = xml.CreateNavigator();
            var nsres     = new XmlNamespaceManager(nav.NameTable);

            nsres.AddNamespace("x", ContentDefinitionXmlNamespace);
            var contentTypeElement = nav.Select("/x:ContentType", nsres);

            contentTypeElement.MoveNext();
            var contentTypeName = contentTypeElement.Current.GetAttribute("name", "");

            contentType.Name = contentTypeName;
            var fieldElements = nav.Select("/x:ContentType/x:Fields/x:Field", nsres);

            foreach (XPathNavigator fieldElement in fieldElements)
            {
                var fieldDescriptor = FieldDescriptor.Parse(fieldElement, nsres, contentType);
                var fieldSetting    = FieldSetting.Create(fieldDescriptor);
                contentType.SetFieldSlots(fieldSetting, handler);
                contentType.FieldSettings.Add(fieldSetting);
            }
            return(contentType);
        }