Пример #1
0
        public static T[] MoreLikeThis <T>(this ISyncAdvancedSessionOperation advancedSession, string index, MoreLikeThisQuery parameters)
        {
            if (string.IsNullOrEmpty(index))
            {
                throw new ArgumentException("Index name cannot be null or empty", "index");
            }

            parameters.IndexName = index;

            // /morelikethis/(index-name)/(ravendb-document-id)?fields=(fields)
            var cmd = advancedSession.DocumentStore.DatabaseCommands;

            var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations)advancedSession);

            inMemoryDocumentSessionOperations.IncrementRequestCount();

            var             multiLoadOperation = new MultiLoadOperation(inMemoryDocumentSessionOperations, cmd.DisableAllCaching, null, null);
            MultiLoadResult multiLoadResult;

            do
            {
                multiLoadOperation.LogOperation();
                using (multiLoadOperation.EnterMultiLoadContext())
                {
                    multiLoadResult = cmd.MoreLikeThis(parameters);
                }
            } while (multiLoadOperation.SetResult(multiLoadResult));

            return(multiLoadOperation.Complete <T>());
        }
Пример #2
0
        public static OperationAllowedResult[] IsOperationAllowedOnDocument(this ISyncAdvancedSessionOperation session, string userId, string operation, params string[] documentIds)
        {
            var serverClient = ((DocumentSession)session).DatabaseCommands as ServerClient;

            if (serverClient == null)
            {
                throw new InvalidOperationException("Cannot get whatever operation is allowed on document in embedded mode.");
            }

            var url = new StringBuilder("/authorization/IsAllowed/")
                      .Append(Uri.EscapeUriString(userId))
                      .Append("?operation=")
                      .Append(Uri.EscapeUriString(operation));

            foreach (var docId in documentIds)
            {
                url.Append("&id=").Append(Uri.EscapeUriString(docId));
            }

            var result = serverClient.ExecuteGetRequest(url.ToString());

            return
                (session.DocumentStore.Conventions.CreateSerializer().Deserialize <OperationAllowedResult[]>(
                     new RavenJTokenReader(result)));
        }
Пример #3
0
        public static T[] MoreLikeThis <T>(this ISyncAdvancedSessionOperation advancedSession, string index, MoreLikeThisQueryParameters parameters)
        {
            var cmd = advancedSession.DocumentStore.DatabaseCommands as ServerClient;

            if (cmd == null)
            {
                throw new NotImplementedException("Embedded client isn't supported by the MoreLikeThis bundle");
            }


            var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations)advancedSession);

            // /morelikethis/(index-name)/(ravendb-document-id)?fields=(fields)
            EnsureIsNotNullOrEmpty(index, "index");

            inMemoryDocumentSessionOperations.IncrementRequestCount();
            var             multiLoadOperation = new MultiLoadOperation(inMemoryDocumentSessionOperations, cmd.DisableAllCaching, null, null);
            MultiLoadResult multiLoadResult;

            do
            {
                multiLoadOperation.LogOperation();
                using (multiLoadOperation.EnterMultiLoadContext())
                {
                    var result = cmd.ExecuteGetRequest(parameters.GetRequestUri(index));

                    multiLoadResult = ((RavenJObject)result).Deserialize <MultiLoadResult>(inMemoryDocumentSessionOperations.Conventions);
                }
            } while (multiLoadOperation.SetResult(multiLoadResult));

            return(multiLoadOperation.Complete <T>());
        }
        /// <summary>
        ///     Gets the children for specific a specific page
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="page">The page.</param>
        /// <returns></returns>
        /// <exception cref="System.NullReferenceException">StructureInfo</exception>
        public static IEnumerable <IPage> GetChildrenFor(this ISyncAdvancedSessionOperation session, IPage page)
        {
            try
            {
                var context = new BrickPileContext(HttpContext.Current.Request.RequestContext);
                if (context.NavigationContext != null && context.NavigationContext.OpenPages != null)
                {
                    return(context.NavigationContext.OpenPages.Where(x => x.Parent != null && x.Parent.Id == page.Id));
                }

                Trie trie = context.Trie;
                if (trie == null)
                {
                    throw new NullReferenceException("The RouteData DataToken does not contains the Trie object");
                }

                IEnumerable <TrieNode> nodes = trie.RootNode.Flatten(n => n.Children);

                TrieNode node = nodes.SingleOrDefault(n => n.PageId.CompareToIgnoreDraftId(page.Id));

                return(node != null
                    ? ((DocumentSession)session).Load <IPage>(node.Children.Select(n => n.PageId).ToArray())
                       .OrderBy(p => p.Metadata.SortOrder)
                    : Enumerable.Empty <IPage>());
            }
            catch (ArgumentNullException exception) {}
            return(null);
        }
Пример #5
0
 public static T[] MoreLikeThis <T>(this ISyncAdvancedSessionOperation advancedSession, string index, string documentId)
 {
     return(MoreLikeThis <T>(advancedSession, index, new MoreLikeThisQuery
     {
         DocumentId = documentId
     }));
 }
Пример #6
0
        public static string[] GetRevisionIdsFor <T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
        {
            var jsonDocuments = ((DocumentSession)session).DatabaseCommands.StartsWith(id + "/revisions/", null, start, pageSize, metadataOnly: true);

            return(jsonDocuments
                   .Select(document => document.Key)
                   .ToArray());
        }
Пример #7
0
        /// <summary>
        /// Returns all previous document revisions for specified document (with paging).
        /// </summary>
        public static T[] GetRevisionsFor <T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
        {
            var getRevisionsOperation = new GetRevisionOperation();
            var command = getRevisionsOperation.CreateRequest(id, start, pageSize);

            session.RequestExecuter.Execute(command, session.Context);
            return(ProcessResults <T>(session, command));
        }
Пример #8
0
        public static T[] MoreLikeThis <T, TIndexCreator>(this ISyncAdvancedSessionOperation advancedSession, string documentId) where TIndexCreator : AbstractIndexCreationTask, new()
        {
            var indexCreator = new TIndexCreator();

            return(MoreLikeThis <T>(advancedSession, indexCreator.IndexName, new MoreLikeThisQuery
            {
                DocumentId = documentId
            }));
        }
Пример #9
0
        public static T[] MoreLikeThis <TTransformer, T, TIndexCreator>(this ISyncAdvancedSessionOperation advancedSession, MoreLikeThisQuery parameters)
            where TIndexCreator : AbstractIndexCreationTask, new()
            where TTransformer : AbstractTransformerCreationTask, new()
        {
            var indexCreator = new TIndexCreator();
            var transformer  = new TTransformer();

            return(MoreLikeThis <T>(advancedSession, indexCreator.IndexName, transformer.TransformerName, parameters));
        }
        public static T[] GetTemporalRevisionsFor <T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
        {
            var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations)session);
            var jsonDocuments = ((DocumentSession)session).DatabaseCommands.StartsWith(id + TemporalConstants.TemporalKeySeparator, null, start, pageSize);

            return(jsonDocuments
                   .Select(inMemoryDocumentSessionOperations.TrackEntity <T>)
                   .ToArray());
        }
Пример #11
0
        /// <summary>
        /// Returns all previous document revisions for specified document (with paging).
        /// </summary>
        public static T[] GetRevisionsFor <T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
        {
            var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations)session);
            var jsonDocuments = ((DocumentSession)session).DatabaseCommands.GetRevisionsFor(id, start, pageSize);

            return(jsonDocuments
                   .Select(inMemoryDocumentSessionOperations.TrackEntity <T>)
                   .ToArray());
        }
Пример #12
0
        public static T[] GetRevisionsFor <T>(this ISyncAdvancedSessionOperation session, string id, int start, int pageSize)
        {
            var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations)session);
            var jsonDocuments = session.DatabaseCommands.StartsWith(id + "/revisions/", start, pageSize);

            return(jsonDocuments
                   .Select(jsonDocument => inMemoryDocumentSessionOperations.TrackEntity <T>(jsonDocument.Key, jsonDocument.DataAsJson, jsonDocument.Metadata))
                   .ToArray());
        }
        public static DateTime?GetExpire <T>(this ISyncAdvancedSessionOperation advanced, T obj)
        {
            RavenJToken token;

            if (advanced.GetMetadataFor(obj).TryGetValue("Raven-Expiration-Date", out token))
            {
                var date = token.Value <DateTime>();
                return(date);
            }
            return(null);
        }
        /// <summary>
        ///     Gets the ancestors for a specific page
        /// </summary>
        /// <param name="session">The session.</param>
        /// <param name="page">The page.</param>
        /// <param name="includeStartPage">if set to <c>true</c> [include start page].</param>
        /// <returns></returns>
        /// <exception cref="System.NullReferenceException">StructureInfo</exception>
        public static IEnumerable <IPage> GetAncestorsFor(this ISyncAdvancedSessionOperation session, IPage page,
                                                          bool includeStartPage = false)
        {
            try
            {
                var context = new BrickPileContext(HttpContext.Current.Request.RequestContext);
                if (context.Trie == null)
                {
                    throw new NullReferenceException("The RouteData DataToken does not contains the Trie object");
                }
                IEnumerable <TrieNode> nodes = context.Trie.GetAncestors(page.Id, includeStartPage);

                return(((DocumentSession)session).Load <IPage>(nodes.Select(n => n.PageId)));
            }
            catch (ArgumentNullException exception) {}
            return(null);
        }
        /// <summary>
        ///     Gets the parent for a specific page
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="session">The session.</param>
        /// <param name="page">The page.</param>
        /// <returns></returns>
        public static T GetParentFor <T>(this ISyncAdvancedSessionOperation session, IPage page) where T : IPage
        {
            if (page.Parent == null)
            {
                return(default(T));
            }

            try
            {
                var context = new BrickPileContext(HttpContext.Current.Request.RequestContext);
                if (context.NavigationContext.OpenPages.Any(x => x.Id == page.Parent.Id))
                {
                    return((T)context.NavigationContext.OpenPages.Single(x => x.Id == page.Parent.Id));
                }
            }
            catch (ArgumentNullException exception) {}

            return(page.Parent == null ? default(T) : ((DocumentSession)session).Load <T>(page.Parent.Id));
        }
        /// <summary>
        ///     Gets the start page for BrickPile
        /// </summary>
        /// <param name="session">The session.</param>
        /// <returns></returns>
        /// <exception cref="System.NullReferenceException">StructureInfo</exception>
        public static IPage GetStartPage(this ISyncAdvancedSessionOperation session)
        {
            try
            {
                var context = new BrickPileContext(HttpContext.Current.Request.RequestContext);
                if (context.NavigationContext.StartPage != null)
                {
                    return(context.NavigationContext.StartPage);
                }

                Trie trie = context.Trie;

                if (trie == null)
                {
                    throw new NullReferenceException("The RouteData DataToken does not contains the Trie object.");
                }

                return(((DocumentSession)session).Load <Page>(trie.RootNode.PageId));
            }
            catch (ArgumentNullException exception) {}
            return(null);
        }
Пример #17
0
        public static T[] MoreLikeThis <T>(this ISyncAdvancedSessionOperation advancedSession, string index, string transformer, MoreLikeThisQuery parameters)
        {
            if (string.IsNullOrEmpty(index))
            {
                throw new ArgumentException("Index name cannot be null or empty", "index");
            }

            parameters.IndexName   = index;
            parameters.Transformer = transformer;

            // /morelikethis/(index-name)/(ravendb-document-id)?fields=(fields)
            var cmd = ((DocumentSession)advancedSession).DatabaseCommands;

            var inMemoryDocumentSessionOperations = ((InMemoryDocumentSessionOperations)advancedSession);

            inMemoryDocumentSessionOperations.IncrementRequestCount();

            var        loadOperation = new LoadOperation(inMemoryDocumentSessionOperations, cmd.DisableAllCaching, null, null);
            LoadResult loadResult;

            do
            {
                loadOperation.LogOperation();
                using (loadOperation.EnterLoadContext())
                {
                    var result = cmd.MoreLikeThis(parameters);
                    loadResult = new LoadResult
                    {
                        Includes = result.Includes,
                        Results  = result.Results
                    };
                }
            } while (loadOperation.SetResult(loadResult));

            return(loadOperation.Complete <T>());
        }
Пример #18
0
        public static T[] MoreLikeThis <T, TIndexCreator>(this ISyncAdvancedSessionOperation advancedSession, MoreLikeThisQueryParameters parameters) where TIndexCreator : AbstractIndexCreationTask, new()
        {
            var indexCreator = new TIndexCreator();

            return(MoreLikeThis <T>(advancedSession, indexCreator.IndexName, parameters));
        }
 /// <summary>
 ///     Gets the draft for a specific page, if it exists
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="session">The session.</param>
 /// <param name="page">The page.</param>
 /// <returns></returns>
 public static T GetDraftFor <T>(this ISyncAdvancedSessionOperation session, IPage page)
 {
     return(((DocumentSession)session).Load <T>(page.Id.Replace("/draft", "") + "/draft"));
 }
 public static void AddExpire <T>(this ISyncAdvancedSessionOperation advanced, T obj, DateTime dateTime)
 {
     advanced.GetMetadataFor(obj)["Raven-Expiration-Date"] = new RavenJValue(dateTime);
 }
Пример #21
0
 public static OperationAllowedResult IsOperationAllowedOnDocument(this ISyncAdvancedSessionOperation session, string userId, string operation, string documentId)
 {
     return(IsOperationAllowedOnDocument(session, userId, operation, new[] { documentId }).First());
 }
 public static TemporalMetadata GetTemporalMetadataFor <T>(this ISyncAdvancedSessionOperation session, T instance)
 {
     return(session.GetMetadataFor(instance).GetTemporalMetadata());
 }
 public static void RemoveExpire <T>(this ISyncAdvancedSessionOperation advanced, T obj)
 {
     advanced.GetMetadataFor(obj).Remove("Raven-Expiration-Date");
 }