Esempio n. 1
0
        private IEnumerable <T> LoadContentItems <T>(IQuery query, QueryHints hints = null) where T : class, IContent
        {
            var rows       = query.List <object>();
            var versionIds = rows.Cast <object[]>().Select(x => (int)x[0]);

            return(_contentManager.GetManyByVersionId <T>(versionIds, hints ?? QueryHints.Empty));
        }
        private void InitializerTermsLoader(TermsPart part) {
            if (part._termParts != null) {
                return;
            }

            var queryHint = new QueryHints()
                .ExpandRecords("ContentTypeRecord", "CommonPartRecord", "TermsPartRecord");


            foreach (var field in part.ContentItem.Parts.SelectMany(p => p.Fields).OfType<TaxonomyField>()) {
                var tempField = field.Name;
                field.TermsField.Loader(() => {
                    var fieldTermRecordIds = part.Record.Terms.Where(t => t.Field == tempField).Select(tci => tci.TermRecord.Id);
                    var terms = _contentManager.GetMany<TermPart>(fieldTermRecordIds, VersionOptions.Published, queryHint);
                    return terms.ToList();
                });
            }

            part._termParts = new LazyField<IEnumerable<TermContentItemPart>>();
            part._termParts.Loader(() => {
                var ids = part.Terms.Select(t => t.TermRecord.Id).Distinct();
                var terms = _contentManager.GetMany<TermPart>(ids, VersionOptions.Published, queryHint)
                    .ToDictionary(t => t.Id, t => t);
                return
                    part.Terms.Select(
                        x =>
                            new TermContentItemPart {
                                Field = x.Field,
                                TermPart = terms[x.TermRecord.Id]
                            }
                        );
            });
        }
        public virtual ContentItem Get(int id, VersionOptions options, QueryHints hints, string contentType)
        {
            ContentItem contentItem;

            ContentItemVersionRecord versionRecord = null;

            var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(contentType);

            if (contentTypeDefinition == null)
            {
                contentTypeDefinition = new ContentTypeDefinitionBuilder().Named(contentType).Build();
            }

            if (hints == QueryHints.Empty)
            {
                hints = new QueryHints();
            }

            hints = hints.ExpandRecords(contentTypeDefinition.Parts.Select(c => c.PartDefinition.Name + "Record"));

            // do a query to load the records in case Get is called directly
            contentItem = GetContentItem(hints, contentTypeDefinition,
                                         (contentItemCriteria, contentItemVersionCriteria) =>
            {
                contentItemCriteria.Add(Restrictions.Eq("Id", id));
                if (options.IsPublished)
                {
                    contentItemVersionCriteria.Add(Restrictions.Eq("Published", true));
                }
                else if (options.IsLatest)
                {
                    contentItemVersionCriteria.Add(Restrictions.Eq("Latest", true));
                }
                else if (options.IsDraft && !options.IsDraftRequired)
                {
                    contentItemVersionCriteria.Add(
                        Restrictions.And(Restrictions.Eq("Published", false),
                                         Restrictions.Eq("Latest", true)));
                }
                else if (options.IsDraft || options.IsDraftRequired)
                {
                    contentItemVersionCriteria.Add(Restrictions.Eq("Latest", true));
                }

                if (options.VersionNumber != default(int))
                {
                    contentItemVersionCriteria.Add(Restrictions.Eq("VersionNumber", options.VersionNumber));
                }

                contentItemVersionCriteria.SetFetchMode("ContentItemRecord", FetchMode.Eager);
                contentItemVersionCriteria.SetFetchMode("ContentItemRecord.ContentType", FetchMode.Eager);
                contentItemVersionCriteria.SetMaxResults(1);
            });

            FinalizeContentItem(contentItem, options, contentType);

            return(contentItem);
        }
Esempio n. 4
0
 public ContentItem Get(int id, VersionOptions options, QueryHints hints)
 {
     return(_glimpseService.PublishTimedAction(() => _decoratedService.Get(id, options, hints), (r, t) => new ContentManagerGetMessage {
         ContentId = id,
         ContentType = GetContentType(id, r),
         Name = r.GetContentName(),
         Duration = t.Duration,
         VersionOptions = options
     }, TimelineCategories.ContentManager, r => "Get: " + GetContentType(id, r), r => r.GetContentName()).ActionResult);
 }
 public new ContentItem Get(int id, VersionOptions options, QueryHints hints)
 {
     return(_performanceMonitor.PublishTimedAction(() => base.Get(id, options, hints), (r, t) => new ContentManagerMessage
     {
         ContentId = id,
         ContentType = GetContentType(id, r, options),
         Name = r.GetContentName(),
         Duration = t.Duration,
         //VersionOptions = options
     }, TimelineCategories.ContentManagement, r => "Get: " + GetContentType(id, r, options), r => r.GetContentName()).ActionResult);
 }
 public new ContentItem Get(int id, VersionOptions options, QueryHints hints)
 {
     return _performanceMonitor.PublishTimedAction(() => base.Get(id, options, hints), (r, t) => new ContentManagerMessage
     {
         ContentId = id,
         ContentType = GetContentType(id, r, options),
         Name = r.GetContentName(),
         Duration = t.Duration,
         //VersionOptions = options
     }, TimelineCategories.ContentManagement, r => "Get: " + GetContentType(id, r, options), r=> r.GetContentName()).ActionResult;
 }
Esempio n. 7
0
        public IEnumerable <ProductPartQuantity> GetProductQuantitiesFor(BundlePart bundle)
        {
            var quantities = bundle.ProductQuantities.ToDictionary(q => q.ProductId, q => q.Quantity);
            var queryHints = new QueryHints()
                             .ExpandRecords <TitlePartRecord, MediaPartRecord>();
            var parts = _contentManager.GetMany <ProductPart>(quantities.Keys, VersionOptions.Published, queryHints);

            return(parts.Select(p => new ProductPartQuantity {
                Product = p,
                Quantity = quantities[p.ContentItem.Id]
            }).ToList());
        }
Esempio n. 8
0
        private IEnumerable <TerritoryPart> GetTerritoryParents(TerritoryQueryContext context)
        {
            IEnumerable <TerritoryPart> list;
            var root = context.ForTerritory;

            // make sure root we'll use belongs to hierarchy
            if (root.HierarchyPart.Id != ConfiguredHierarchy.Id)
            {
                root = SingleTerritory(root.Record.TerritoryInternalRecord.Id);
            }
            if (root == null)
            {
                // if the root is not valid for the hierarchy, we cannot return
                // any city.
                return(Enumerable.Empty <TerritoryPart>());
            }

            var rootPath  = root.TerritoriesFullPath;
            var parentIds = rootPath.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries).Select(x => {
                int id = 0;
                int.TryParse(x, out id);
                return(id);
            }).ToList();

            parentIds.ToList().Remove(root.Id);
            var queryHints = new QueryHints()
                             .ExpandRecords <TerritoryAdministrativeTypePartRecord, TitlePartRecord>();
            var query = _contentManager.Query();

            query = query
                    .Join <TerritoryAdministrativeTypePartRecord>()
                    .Where(x => x.AdministrativeType == context.TerritoryAdministrativeType.Value && parentIds.Contains(x.Id))
                    .Join <TitlePartRecord>()
                    .OrderBy(x => x.Title);

            if (context.MaxResultItems.HasValue)
            {
                list = query
                       .ForPart <TerritoryPart>()
                       .Join <TerritoryPartRecord>()
                       .Slice(0, context.MaxResultItems.Value);
            }
            else
            {
                list = query
                       .ForPart <TerritoryPart>()
                       .Join <TerritoryPartRecord>()
                       .List();
            }
            return(list);
        }
Esempio n. 9
0
        internal void SetHints(QueryHints hints)
        {
            if (hints.IsEmpty)
            {
                return;
            }

            IntPtr qptr = _functions.SetHints(Collection.Database.DatabaseHandle, this, hints.ToByteArray());

            if (qptr == IntPtr.Zero)
            {
                //TODO: throw more specific exception
                //throw new EJDBQueryException(_jb);
                EjdbException.FromDatabase(Collection.Database, "Failed to set hints");
            }
        }
        private ContentItem GetContentItem(QueryHints hints, ContentTypeDefinition contentTypeDefinition, Action <ICriteria, ICriteria> predicate)
        {
            var session = _sessionLocator.Value.For(typeof(ContentItemRecord));
            var contentItemVersionCriteria = session.CreateCriteria(typeof(ContentItemVersionRecord));
            var contentItemCriteria        = contentItemVersionCriteria.CreateCriteria("ContentItemRecord");

            predicate(contentItemCriteria, contentItemVersionCriteria);

            var contentItemMetadata        = session.SessionFactory.GetClassMetadata(typeof(ContentItemRecord));
            var contentItemVersionMetadata = session.SessionFactory.GetClassMetadata(typeof(ContentItemVersionRecord));

            if (hints != QueryHints.Empty)
            {
                // break apart and group hints by their first segment
                var hintDictionary = hints.Records
                                     .Select(hint => new { Hint = hint, Segments = hint.Split('.') })
                                     .GroupBy(item => item.Segments.FirstOrDefault())
                                     .ToDictionary(grouping => grouping.Key, StringComparer.InvariantCultureIgnoreCase);

                // locate hints that match properties in the ContentItemVersionRecord
                foreach (var hit in contentItemVersionMetadata.PropertyNames.Where(hintDictionary.ContainsKey).SelectMany(key => hintDictionary[key]))
                {
                    contentItemVersionCriteria.SetFetchMode(hit.Hint, FetchMode.Eager);
                    hit.Segments.Take(hit.Segments.Count() - 1).Aggregate(contentItemVersionCriteria, ExtendCriteria);
                }

                // locate hints that match properties in the ContentItemRecord
                foreach (var hit in contentItemMetadata.PropertyNames.Where(hintDictionary.ContainsKey).SelectMany(key => hintDictionary[key]))
                {
                    contentItemVersionCriteria.SetFetchMode("ContentItemRecord." + hit.Hint, FetchMode.Eager);
                    hit.Segments.Take(hit.Segments.Count() - 1).Aggregate(contentItemCriteria, ExtendCriteria);
                }

                if (hintDictionary.SelectMany(x => x.Value).Any(x => x.Segments.Count() > 1))
                {
                    contentItemVersionCriteria.SetResultTransformer(new DistinctRootEntityResultTransformer());
                }
            }

            contentItemCriteria.SetCacheable(true);

            ContentItemTransformer contentItemTransformer = new ContentItemTransformer(contentTypeDefinition, this.partTypeRecordMatchingService, this.New);
            var returnValue = contentItemVersionCriteria.SetResultTransformer(contentItemTransformer).List <ContentItem>();

            return(returnValue.FirstOrDefault());
        }
Esempio n. 11
0
        void IDisposable.Dispose()
        {
            if (_dataConnection != null)
            {
                if (_dataConnection.QueryHints.Count > 0)
                {
                    QueryHints.AddRange(_queryHints);
                }
                if (_dataConnection.NextQueryHints.Count > 0)
                {
                    NextQueryHints.AddRange(_nextQueryHints);
                }

                _dataConnection.Dispose();
                _dataConnection = null;
            }
        }
Esempio n. 12
0
        internal void ReleaseQuery()
        {
            if (_dataConnection != null)
            {
                if (LockDbManagerCounter == 0 && KeepConnectionAlive == false)
                {
                    if (_dataConnection.QueryHints.Count > 0)
                    {
                        QueryHints.AddRange(_queryHints);
                    }
                    if (_dataConnection.NextQueryHints.Count > 0)
                    {
                        NextQueryHints.AddRange(_nextQueryHints);
                    }

                    _dataConnection.Dispose();
                    _dataConnection = null;
                }
            }
        }
Esempio n. 13
0
        /// <summary>
        /// Closes underlying connection and fires <see cref="OnClosing"/> event (only if connection existed).
        /// </summary>
        void Close()
        {
            if (_dataConnection != null)
            {
                if (OnClosing != null)
                {
                    OnClosing(this, EventArgs.Empty);
                }

                if (_dataConnection.QueryHints.Count > 0)
                {
                    QueryHints.AddRange(_queryHints);
                }
                if (_dataConnection.NextQueryHints.Count > 0)
                {
                    NextQueryHints.AddRange(_nextQueryHints);
                }

                _dataConnection.Dispose();
                _dataConnection = null;
            }
        }
        private void InitializerTermsLoader(TermsPart part)
        {
            if (part._termParts != null)
            {
                return;
            }

            var queryHint = new QueryHints()
                            .ExpandRecords("ContentTypeRecord", "CommonPartRecord", "TermsPartRecord");


            foreach (var field in part.ContentItem.Parts.SelectMany(p => p.Fields).OfType <TaxonomyField>())
            {
                var tempField = field.Name;
                field.TermsField.Loader(() => {
                    var fieldTermRecordIds = part.Record.Terms.Where(t => t.Field == tempField).Select(tci => tci.TermRecord.Id);
                    var terms = _contentManager.GetMany <TermPart>(fieldTermRecordIds, VersionOptions.Published, queryHint);
                    return(terms.ToList());
                });
            }

            part._termParts = new LazyField <IEnumerable <TermContentItemPart> >();
            part._termParts.Loader(() => {
                var ids   = part.Terms.Select(t => t.TermRecord.Id).Distinct();
                var terms = _contentManager.GetMany <TermPart>(ids, VersionOptions.Published, queryHint)
                            .ToDictionary(t => t.Id, t => t);
                return
                (part.Terms.Select(
                     x =>
                     new TermContentItemPart {
                    Field = x.Field,
                    TermPart = terms[x.TermRecord.Id]
                }
                     ));
            });
        }
Esempio n. 15
0
 public IEnumerable <T> GetMany <T>(IEnumerable <int> ids, VersionOptions options, QueryHints hints) where T : class, IContent
 {
     return(_decoratedService.GetMany <T>(ids, options, hints));
 }
Esempio n. 16
0
 public IEnumerable <T> GetManyByVersionId <T>(IEnumerable <int> versionRecordIds, QueryHints hints) where T : class, IContent
 {
     return(_decoratedService.GetManyByVersionId <T>(versionRecordIds, hints));
 }
Esempio n. 17
0
 public IEnumerable <ContentItem> GetManyByVersionId(IEnumerable <int> versionRecordIds, QueryHints hints)
 {
     return(_decoratedService.GetManyByVersionId(versionRecordIds, hints));
 }
Esempio n. 18
0
        public IEnumerable <T> GetMany <T>(IEnumerable <int> contentItemIds, QueryHints hints = null) where T : class, IContent
        {
            var query = GetDeletedVersionsQuery(contentItemIds);

            return(LoadContentItems <T>(query, hints));
        }
Esempio n. 19
0
 public IEnumerable <ContentItem> GetMany(IEnumerable <int> contentItemIds, QueryHints hints = null)
 {
     return(GetMany <ContentItem>(contentItemIds, hints));
 }
        public IEnumerable <T> GetMany <T>(IEnumerable <int> ids, VersionOptions options, QueryHints hints) where T : class, IContent
        {
            var idList = ids.ToList();

            return(_contentItems
                   .Where(i => idList.Contains(i.Id))
                   .Select(i => i.As <T>()));
        }
Esempio n. 21
0
 public IContentQuery <TPart, TRecord> WithQueryHints(QueryHints hints)
 {
     return(this);
 }
Esempio n. 22
0
 public IEnumerable <T> GetManyByVersionId <T>(IEnumerable <int> versionRecordIds, QueryHints hints) where T : class, IContent
 {
     throw new NotImplementedException();
 }
Esempio n. 23
0
 public ContentItem Get(int id, VersionOptions options, QueryHints hints)
 {
     throw new NotImplementedException();
 }
Esempio n. 24
0
        public IDictionary <string, IEnumerable <T> > GetRelatedByContentItems <T>(int contentId, VersionOptions options, QueryHints hints) where T : class, IContent
        {
            var query   = from record in mRepository.Table where record.RelatedContentItemId == contentId select record;
            var records = query.ToList();
            var relatedContentItemIds = records.Select(x => x.ContentItemId).ToList();
            var relatedContentItems   = mContentManager.GetMany <T>(relatedContentItemIds, options, hints).ToLookup(x => x.Id);
            var dictionary            = new Dictionary <string, IEnumerable <T> >();

            foreach (var record in records)
            {
                if (!dictionary.ContainsKey(record.Discriminator))
                {
                    dictionary.Add(record.Discriminator, new List <T>());
                }

                var list = (IList <T>)dictionary[record.Discriminator];

                list.AddRange(relatedContentItems[record.ContentItemId]);
            }

            return(dictionary);
        }
Esempio n. 25
0
        public IEnumerable <T> GetRelatedContentItems <T>(int contentId, VersionOptions options, QueryHints hints, string discriminator = null) where T : class, IContent
        {
            var query = from record in mRepository.Table where record.ContentItemId == contentId select record;

            if (!String.IsNullOrEmpty(discriminator))
            {
                query = from record in query where record.Discriminator == discriminator select record;
            }

            var relatedContentItemIds = query.Select(x => x.RelatedContentItemId).ToList();

            return(mContentManager.GetMany <T>(relatedContentItemIds, options, hints));
        }
Esempio n. 26
0
 public IEnumerable <T> GetMany <T>(IEnumerable <int> ids, VersionOptions options, QueryHints hints) where T : class, IContent
 {
     throw new NotImplementedException();
 }
Esempio n. 27
0
        internal void SetHints(QueryHints hints)
        {
            if (hints.IsEmpty)
            {
                return;
            }

            IntPtr qptr = _setHints(Collection.Database.DatabaseHandle, this, hints.ToByteArray());

            if (qptr == IntPtr.Zero)
            {
                //TODO: throw more specific exception
                //throw new EJDBQueryException(_jb);
                EjdbException.FromDatabase(Collection.Database, "Failed to set hints");
            }
        }
Esempio n. 28
0
 public IEnumerable <ContentItem> GetManyByVersionId(IEnumerable <int> versionRecordIds, QueryHints hints)
 {
     throw new NotImplementedException();
 }
Esempio n. 29
0
 public ContentItem Get(int id, VersionOptions options, QueryHints hints)
 {
     return(_decoratedService.Get(id, options, hints));
 }