示例#1
0
        private void CreateOneToManyRelation(RootResource resource, Property property)
        {
            var rootResource   = RootResources.First(r => r.Class == property.Class);
            var nestedResource = resource.OneToMany(property);

            nestedResource.IsReadonly   = true;
            nestedResource.RootResource = rootResource;
            rootResource.AlternateResources.Add(nestedResource);
        }
示例#2
0
        public void AddRootResource(ClassModel c)
        {
            var resource = new RootResource();

            resource.Name      = c.Name;
            resource.Class     = c;
            resource.DataModel = DataModel;
            RootResources.Add(resource);
        }
示例#3
0
        private void CreateManyToManyRelation(RootResource resource, Property property)
        {
            var    rootResource = RootResources.First(r => r.Class == property.Class);
            string pivotName;

            if (resource.Class == property.Class || string.Compare(resource.Class.Name, property.Noun, StringComparison.InvariantCulture) < 0)
            {
                pivotName = $"{resource.Class.Name}{property.Noun}";
            }
            else
            {
                pivotName = $"{property.Noun}{resource.Class.Name}";
            }
            var nestedResource = resource.ManyToMany(property, pivotName);

            nestedResource.Name         = property.Name.Substring(0, property.Name.Length - 1);
            nestedResource.Name.Plural  = property.Name;
            nestedResource.RootResource = rootResource;
            rootResource.AlternateResources.Add(nestedResource);
        }
示例#4
0
        public void AddNestedResources(ClassModel c)
        {
            var resource = RootResources.First(r => r.Class == c);

            foreach (var property in c.Properties)
            {
                if (!property.IsCollection || property.BuiltInType != BuiltInType.Object)
                {
                    continue;
                }
                if (property.IsManyToMany)
                {
                    CreateManyToManyRelation(resource, property);
                }
                else
                {
                    CreateOneToManyRelation(resource, property);
                }
            }
        }
示例#5
0
        public void Read()
        {
            foreach (System.Xml.XPath.XPathNavigator child in document.CreateNavigator().Select("root/*"))
            {
                if (child.Name == "depth")
                {
                    int maxCrawlNestity;
                    if (int.TryParse(child.InnerXml, out maxCrawlNestity))
                    {
                        MaxCrawlNestity = maxCrawlNestity;
                    }
                    else
                    {
                        MaxCrawlNestity = 2;
                    }
                }
            }


            foreach (System.Xml.XPath.XPathNavigator child in document.CreateNavigator().Select("root/rootResources/*"))
            {
                if (child.Name == "resource")
                {
                    Uri  uriResult;
                    bool isValidUri = Uri.TryCreate(child.InnerXml, UriKind.Absolute, out uriResult) &&
                                      (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

                    if (isValidUri)
                    {
                        RootResources.Add(child.InnerXml);
                    }
                }
            }

            if (MaxCrawlNestity == -1)
            {
                MaxCrawlNestity = 2;
            }
        }