protected override int ExecuteWorkImplementation()
        {
            var importHistory = m_importedRecordMetadataRepository.Load <ImportHistory>(m_importHistoryId);
            ImportedProjectMetadata importedProjectMetadata = null;
            Snapshot latestSnapshot = null;

            if (m_data.ImportedProjectMetadataId.HasValue)
            {
                importedProjectMetadata = m_importedRecordMetadataRepository.Load <ImportedProjectMetadata>(m_data.ImportedProjectMetadataId.Value);
            }

            if (!m_data.IsFailed)
            {
                latestSnapshot = m_projectRepository.GetLatestSnapshot(m_data.ProjectId);
            }

            var importMetadata = new ImportedRecordMetadata
            {
                LastUpdate              = importHistory,
                LastUpdateMessage       = m_data.FaultedMessage,
                Snapshot                = latestSnapshot,
                ImportedProjectMetadata = importedProjectMetadata
            };

            return((int)m_importedRecordMetadataRepository.Create(importMetadata));
        }
        public ImportHistory GetLastImportHistoryForImportedProjectMetadata(int importedProjectMetadataId)
        {
            ImportedRecordMetadata importedRecordMetadata = null;

            return(GetSession().QueryOver <ImportHistory>()
                   .JoinAlias(x => x.ImportedRecordMetadata, () => importedRecordMetadata)
                   .Where(() => importedRecordMetadata.ImportedProjectMetadata.Id == importedProjectMetadataId)
                   .OrderBy(x => x.Date).Desc
                   .Take(1)
                   .SingleOrDefault());
        }
        public virtual LastImportStatisticsResult GetLastUpdateExternalRepositoryStatistics(int repositoryId)
        {
            ExternalRepository     externalRepository     = null;
            ImportHistory          importHistory1         = null;
            ImportHistory          importHistory2         = null;
            ImportedRecordMetadata importedRecordMetadata = null;
            Snapshot snapshot = null;
            LastImportStatisticsResult lastImportStatisticsResult = null;

            var subQuery = QueryOver.Of(() => importHistory2).Where(x => x.ExternalRepository.Id == repositoryId)
                           .OrderBy(x => x.Date).Desc
                           .Select(x => x.Id)
                           .Take(1);

            var result = GetSession().QueryOver(() => importHistory1)
                         .JoinAlias(() => importHistory1.ExternalRepository, () => externalRepository)
                         .JoinAlias(() => importHistory1.ImportedRecordMetadata, () => importedRecordMetadata, JoinType.LeftOuterJoin)
                         .JoinAlias(() => importedRecordMetadata.Snapshot, () => snapshot, JoinType.LeftOuterJoin)
                         .WithSubquery
                         .WhereProperty(() => importHistory1.Id).Eq(subQuery)
                         .SelectList(list => list
                                     .SelectCount(() => importedRecordMetadata.Id)
                                     .WithAlias(() => lastImportStatisticsResult.TotalItems)
                                     .Select(
                                         Projections.Sum(Projections.Conditional(
                                                             Restrictions.Eq(
                                                                 Projections.Property(() => snapshot.VersionNumber), 1),
                                                             Projections.Constant(1, NHibernateUtil.Int32),
                                                             Projections.Constant(0, NHibernateUtil.Int32))))
                                     .WithAlias(() => lastImportStatisticsResult.NewItems)
                                     .Select(
                                         Projections.Sum(Projections.Conditional(
                                                             Restrictions.Gt(
                                                                 Projections.Property(() => snapshot.VersionNumber), 1),
                                                             Projections.Constant(1, NHibernateUtil.Int32),
                                                             Projections.Constant(0, NHibernateUtil.Int32)))
                                         .WithAlias(() => lastImportStatisticsResult.UpdatedItems)))
                         .TransformUsing(Transformers.AliasToBean <LastImportStatisticsResult>())
                         .SingleOrDefault <LastImportStatisticsResult>();

            return(result);
        }