Esempio n. 1
0
        public static void ComputeUrlRelation(SiteDb sitedb, Guid objectId, byte constType, List <string> urllist)
        {
            List <Guid> internalRoutes   = new List <Guid>();
            List <Guid> ExternalResource = new List <Guid>();

            var oldRouteRelations            = sitedb.Relations.GetRelationViaRoutes(objectId);
            var oldExternalResourceRelations = sitedb.Relations.GetExternalRelations(objectId, 0);

            byte FinalDestConstType = 0;

            foreach (var item in urllist.Distinct())
            {
                FinalDestConstType = ConstTypeService.GetConstTypeByUrl(item);;

                if (Service.DomUrlService.IsExternalLink(item))
                {
                    Guid externalid = Kooboo.Data.IDGenerator.Generate(item, ConstObjectType.ExternalResource);
                    ExternalResource.Add(externalid);
                    if (oldExternalResourceRelations.Find(o => o.objectYId == externalid) == null)
                    {
                        sitedb.ExternalResource.AddOrUpdate(item, FinalDestConstType);
                    }
                }
                else
                {
                    var routeids = DomRelation.GetRouteIds(sitedb, item);
                    internalRoutes.AddRange(routeids);
                    if (routeids.Count == 1 && oldRouteRelations.Find(o => o.objectYId == routeids[0]) == null)
                    {
                        sitedb.Routes.EnsureExists(item, FinalDestConstType);
                    }
                }
            }

            foreach (var item in oldRouteRelations)
            {
                if (!internalRoutes.Contains(item.objectYId))
                {
                    sitedb.Relations.Delete(item.Id);
                }
            }

            foreach (var item in internalRoutes)
            {
                if (oldRouteRelations.Find(o => o.objectYId == item) == null)
                {
                    sitedb.Relations.AddOrUpdate(objectId, item, constType, ConstObjectType.Route, FinalDestConstType);
                }
            }


            foreach (var item in oldExternalResourceRelations)
            {
                if (!ExternalResource.Contains(item.objectYId))
                {
                    sitedb.Relations.Delete(item.Id);
                }
            }

            foreach (var item in ExternalResource)
            {
                if (oldExternalResourceRelations.Find(o => o.objectYId == item) == null)
                {
                    sitedb.Relations.AddOrUpdate(objectId, item, constType, ConstObjectType.ExternalResource, FinalDestConstType);
                }
            }
        }