Ejemplo n.º 1
0
        internal static void PreloadPageCaching()
        {
            string key = DataScopeManager.CurrentDataScope.ToString() + LocalizationScopeManager.CurrentLocalizationScope;

            if (!_preloadedPageDataScopes.Contains(key))
            {
                lock (_preloadingSyncRoot)
                {
                    if (!_preloadedPageDataScopes.Contains(key))
                    {
                        using (var conn = new DataConnection())
                        {
                            conn.DisableServices();

                            var pages = DataFacade.GetData <IPage>().GroupBy(p => p.Id).Evaluate();
                            if (pages.Count > 0)
                            {
                                var dataSourceId = pages.First().First().DataSourceId;

                                foreach (var pageVersionsGroup in pages)
                                {
                                    string pageKey = GetCacheKey(pageVersionsGroup.Key, dataSourceId);
                                    _pageCache.Add(pageKey, new ReadOnlyCollection <IPage>(pageVersionsGroup.ToList()));
                                }
                            }
                        }

                        _preloadedPageDataScopes.Add(key);
                    }
                }
            }

            if (!_pageStructurePreloaded)
            {
                lock (_preloadingSyncRoot)
                {
                    if (!_pageStructurePreloaded)
                    {
                        var pageStructures = DataFacade.GetData <IPageStructure>().Evaluate();

                        foreach (var str in pageStructures)
                        {
                            _pageStructureCache.Add(str.Id, new ExtendedNullable <PageStructureRecord> {
                                Value = new PageStructureRecord(str)
                            });
                        }

                        foreach (var pair in pageStructures.GroupBy(ps => ps.ParentId))
                        {
                            _childrenCache.Add(pair.Key, new ReadOnlyCollection <Guid>(
                                                   pair
                                                   .OrderBy(p => p.LocalOrdering)
                                                   .Select(v => v.Id).ToList()));
                        }

                        _pageStructurePreloaded = true;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <exclude />
        public static IData GetMetaData(Guid pageId, Guid pageVersionId, string definitionName, Type metaDataType)
        {
            Verify.ArgumentNotNull(definitionName, nameof(definitionName));
            Verify.ArgumentNotNull(metaDataType, nameof(metaDataType));

            //TODO: Consider caching here
            var parameterExpression = Expression.Parameter(metaDataType);

            var lambdaExpression = Expression.Lambda(
                Expression.And(
                    Expression.And(
                        Expression.Equal(
                            Expression.Property(
                                parameterExpression,
                                GetDefinitionPageReferencePropertyInfo(metaDataType)
                                ),
                            Expression.Constant(pageId, typeof(Guid))
                            ),
                        Expression.Equal(
                            Expression.Property(
                                parameterExpression,
                                GetDefinitionPageReferencePropertyVersionInfo(metaDataType)
                                ),
                            Expression.Constant(pageVersionId, typeof(Guid))
                            )
                        ),
                    Expression.Equal(
                        Expression.Property(
                            parameterExpression,
                            GetDefinitionNamePropertyInfo(metaDataType)
                            ),
                        Expression.Constant(definitionName, typeof(string))
                        )),
                parameterExpression
                );

            using (var conn = new DataConnection())
            {
                conn.DisableServices();

                var whereExpression = ExpressionCreator.Where(DataFacade.GetData(metaDataType).Expression, lambdaExpression);

                IEnumerable <IData> dataset = ExpressionHelper.GetCastedObjects <IData>(metaDataType, whereExpression);

                return(dataset.SingleOrDefaultOrException("There're multiple meta data on a page. Page '{0}', definition name '{1}', meta type '{2}'",
                                                          pageId, definitionName, metaDataType.FullName));
            }
        }
Ejemplo n.º 3
0
        private static IReadOnlyCollection <IPage> GetAllPageVersions(Guid pageId)
        {
            string cacheKey = GetCacheKey <IPage>(pageId, Guid.Empty);
            IReadOnlyCollection <IPage> allPageVersions = _pageCache.Get(cacheKey);

            if (allPageVersions == null)
            {
                using (var conn = new DataConnection())
                {
                    conn.DisableServices();

                    allPageVersions = new ReadOnlyCollection <IPage>(
                        conn.Get <IPage>().Where(p => p.Id == pageId).ToList()
                        );
                }

                _pageCache.Add(cacheKey, allPageVersions);
            }

            return(allPageVersions);
        }
Ejemplo n.º 4
0
        /// <exclude />
        public static ReadOnlyCollection <IPagePlaceholderContent> GetPlaceholderContent(Guid pageId, Guid versionId)
        {
            string cacheKey = GetCacheKey <IPagePlaceholderContent>(pageId, versionId);
            var    result   = _placeholderCache.Get(cacheKey);

            if (result == null)
            {
                using (var conn = new DataConnection())
                {
                    conn.DisableServices();

                    var list = DataFacade.GetData <IPagePlaceholderContent>(false)
                               .Where(f => f.PageId == pageId && f.VersionId == versionId).ToList();

                    result = new ReadOnlyCollection <IPagePlaceholderContent>(list);
                }

                _placeholderCache.Add(cacheKey, result);
            }

            return(result);
        }