public override ItemLink[] GetBrokenLinks(Database database)
        {
            Assert.ArgumentNotNull((object)database, "database");

            var manager = _factory.GetContextLinkDatabaseDataManager(database);

            var query = @"CONSTRUCT {{ ?s ?p <{0}> }} WHERE {{ ?s ?p <{0}> }}";

            query = String.Format(query, SitecoreTripleHelper.BrokenLinkUri.ToString());

            var triples = manager.TripleQuery(query);

            var links = new List <ItemLink>();

            foreach (var triple in triples)
            {
                var sourceItem = SitecoreTripleHelper.UriToItem(triple.Subject.ToString());

                if (sourceItem != null)
                {
                    links.Add(new ItemLink(sourceItem.Database.Name, sourceItem.ID, sourceItem.Language, sourceItem.Version, SitecoreTripleHelper.GetFieldIdFromPredicate(triple.Predicate), sourceItem.Database.Name, new ID(Guid.Empty), sourceItem.Language, sourceItem.Version, string.Empty));
                }

                Job job = Context.Job;
                if (job != null && job.Category == "GetBrokenLinks")
                {
                    ++job.Status.Processed;
                }
                LinkCounters.DataRead.Increment();
                DataCounters.PhysicalReads.Increment();
            }


            return(links.ToArray());
        }
        public bool ShouldFilter(Triple triple)
        {
            var subjectItem = SitecoreTripleHelper.UriToItem(triple.Subject.ToString());

            bool shouldFilter = false;

            if (subjectItem != null)
            {
                var subjectPath = subjectItem.Paths.FullPath.ToLower();

                shouldFilter = _systemFolderPaths.Any(subjectPath.StartsWith);
            }

            if (shouldFilter)
            {
                return(true);
            }

            var objectItem = SitecoreTripleHelper.UriToItem(triple.Object.ToString());

            if (objectItem != null)
            {
                var objectPath = objectItem.Paths.FullPath.ToLower();

                shouldFilter = _systemFolderPaths.Any(objectPath.StartsWith);
            }

            return(shouldFilter);
        }
Example #3
0
        private IUriNode GetPredicate(string subUri, string objUri)
        {
            var g = new Graph();

            var predicate = g.CreateUriNode(UriFactory.Create("http://sitecore.net/linkedto"));

            var sourceItem = SitecoreTripleHelper.UriToItem(subUri);
            var targetItem = SitecoreTripleHelper.UriToItem(objUri);

            if (sourceItem != null && targetItem != null)
            {
                var sourceTemplateName = sourceItem.TemplateName;
                var targetTemplateName = targetItem.TemplateName;

                foreach (var baseConcept in _concepts)
                {
                    if (baseConcept.IsMatch(sourceTemplateName, targetTemplateName))
                    {
                        predicate = g.CreateUriNode(baseConcept.ConceptUri);
                    }
                }
            }

            return(predicate);
        }
        public Triple FormatTriple(Triple triple)
        {
            var subjectItem = SitecoreTripleHelper.UriToItem(triple.Subject.ToString());
            var objectItem  = SitecoreTripleHelper.UriToItem(triple.Object.ToString());

            if (subjectItem == null || objectItem == null)
            {
                return(triple);
            }

            //TODO: Better solution for removing /sitecore/shell from links
            var subjectUrl = LinkManager.GetItemUrl(subjectItem).Replace("/sitecore/shell", "");
            var objectUrl  = LinkManager.GetItemUrl(objectItem).Replace("/sitecore/shell", "");

            var g = new Graph();

            IUriNode sub  = g.CreateUriNode(new Uri(subjectUrl));
            IUriNode pred = g.CreateUriNode(new Uri(triple.Predicate.ToString().Split('#')[0]));
            IUriNode obj  = g.CreateUriNode(new Uri(objectUrl));

            triple = new Triple(sub, pred, obj);

            return(triple);
        }