Exemple #1
0
        public void Process(ResourceSessionDirector resourceDirector)
        {
            var work      = new CreateOrUpdateProjectBasicDataWork(m_projectRepository, resourceDirector);
            var projectId = work.Execute();

            resourceDirector.SetSessionInfoValue(SessionInfo.ProjectId, projectId);
        }
Exemple #2
0
        private void AddBookAccessories(ResourceSessionDirector resourceSessionDirector, BookData bookData)
        {
            if (bookData.Accessories != null)
            {
                foreach (var file in bookData.Accessories)
                {
                    if (!string.IsNullOrWhiteSpace(file.FileName))
                    {
                        var accessory = new FileResource
                        {
                            FileName     = file.FileName,
                            FullPath     = Path.Combine(resourceSessionDirector.SessionPath, file.FileName),
                            ResourceType = GetResourceTypeByBookAccessory(file)
                        };

                        if (m_log.IsInfoEnabled)
                        {
                            m_log.InfoFormat($"Adding resource: '{accessory.FileName}' as type '{accessory.ResourceType}'");
                        }


                        resourceSessionDirector.Resources.Add(accessory);
                    }
                }
            }
        }
Exemple #3
0
        private FileResource GenerateFullBookArchive(List <TrackRecordingData> recordings, BookData bookData, AudioTypeEnum audioType,
                                                     ResourceSessionDirector resourceSessionDirector)
        {
            var archiveName = GetArchiveName(bookData, audioType);
            var fullPath    = Path.Combine(resourceSessionDirector.SessionPath, archiveName);

            using (var fs = new FileStream(fullPath, FileMode.Create))
            {
                using (var zipFile = new ZipArchive(fs, ZipArchiveMode.Create))
                {
                    foreach (var record in recordings)
                    {
                        var sessionResource = resourceSessionDirector.GetResourceFromSession(ResourceType.Audio, record.FileName);
                        if (sessionResource != null)
                        {
                            zipFile.CreateEntryFromFile(sessionResource.FullPath, record.FileName, CompressionLevel.Optimal);
                        }
                        else
                        {
                            if (m_log.IsErrorEnabled)
                            {
                                m_log.ErrorFormat($"Found metadata info about audioFileRecord : {record.FileName} but file was not uploaded to session.");
                            }
                        }
                    }
                }
            }

            return(new FileResource
            {
                FileName = archiveName,
                FullPath = fullPath,
                ResourceType = ResourceType.Audio,
            });
        }
Exemple #4
0
 public void Process(ResourceSessionDirector resourceSessionDirector)
 {
     foreach (var resource in resourceSessionDirector.Resources)
     {
         m_fileSystemManager.SaveResource(
             resourceSessionDirector.GetSessionInfoValue <string>(SessionInfo.BookId),
             resourceSessionDirector.GetSessionInfoValue <string>(SessionInfo.VersionId), resource);
     }
 }
Exemple #5
0
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var projectId    = resourceSessionDirector.GetSessionInfoValue <long>(SessionInfo.ProjectId);
            var versionXmlId = resourceSessionDirector.GetSessionInfoValue <string>(SessionInfo.VersionXmlId);

            foreach (var resource in resourceSessionDirector.Resources)
            {
                m_fileSystemManager.SaveResource(projectId, versionXmlId, resource);
            }
        }
Exemple #6
0
        private FileResource GetMetadataForProcessing(ResourceSessionDirector resourceSessionDirector)
        {
            var metaData = resourceSessionDirector.Resources.FirstOrDefault(resource => resource.ResourceType == ResourceType.UploadedMetadata) ??
                           resourceSessionDirector.Resources.FirstOrDefault(resource => resource.ResourceType == ResourceType.ConvertedMetadata);

            if (metaData == null)
            {
                throw new ResourceMissingException("Metadata not found in resources");
            }

            return(metaData);
        }
Exemple #7
0
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var archives = resourceSessionDirector.Resources.Where(x => x.ResourceType == ResourceType.ExtractableArchive);

            foreach (var archive in archives.ToList())
            {
                var filesFromArchive = ExtractFilesFromArchive(archive, resourceSessionDirector);
                foreach (var extractedFile in filesFromArchive)
                {
                    resourceSessionDirector.AddResourceAndFillResourceTypeByExtension(extractedFile);
                }
            }
        }
 public SaveNewBookDataWork(ProjectRepository projectRepository, MetadataRepository metadataRepository,
                            ResourceRepository resourceRepository, CatalogValueRepository catalogValueRepository,
                            PersonRepository personRepository, ResourceSessionDirector resourceDirector) : base(projectRepository)
 {
     m_projectRepository      = projectRepository;
     m_metadataRepository     = metadataRepository;
     m_resourceRepository     = resourceRepository;
     m_catalogValueRepository = catalogValueRepository;
     m_personRepository       = personRepository;
     m_nullableProjectId      = resourceDirector.GetSessionInfoValue <long?>(SessionInfo.ProjectId);
     m_bookData = resourceDirector.GetSessionInfoValue <BookData>(SessionInfo.BookData);
     m_message  = resourceDirector.GetSessionInfoValue <string>(SessionInfo.Message);
     m_userId   = resourceDirector.GetSessionInfoValue <int>(SessionInfo.UserId);
 }
Exemple #9
0
        public void Process(ResourceSessionDirector resourceDirector)
        {
            var existFileResources =
                resourceDirector.Resources.Where(
                    resource =>
                    resource.ResourceType == ResourceType.Book ||
                    resource.ResourceType == ResourceType.Page ||
                    resource.ResourceType == ResourceType.BibliographyDocument ||
                    resource.ResourceType == ResourceType.Transformation);

            foreach (var resource in existFileResources)
            {
                if (string.IsNullOrEmpty(resource.FileName) && m_log.IsFatalEnabled)
                {
                    m_log.ErrorFormat("Resource of type {0} and path {1} does not have fileName", resource.ResourceType,
                                      resource.FullPath);
                    continue;
                }

                using (var dataStream = File.Open(resource.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var resourceUploadContract = GetVersionResourceUploadContract(resource, resourceDirector, dataStream);

                    switch (resource.ResourceType)
                    {
                    case ResourceType.BibliographyDocument:
                        UploadBibliographyFile(resourceUploadContract);
                        break;

                    case ResourceType.Book:
                        UploadResourceToBookVersion(resourceUploadContract);
                        break;

                    case ResourceType.Page:
                        UploadResourceToBookVersion(resourceUploadContract);
                        break;

                    case ResourceType.Transformation:
                        UploadTransformationResource(resourceUploadContract);
                        break;



                    default:
                        throw new ArgumentException($"ResourceType: '{resource.ResourceType}' not meant for ExistDb upload");
                    }
                }
            }
        }
Exemple #10
0
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var bookData = resourceSessionDirector.GetSessionInfoValue <BookData>(SessionInfo.BookData);

            if (bookData.Tracks == null)
            {
                return;
            }

            //DISCOVER all entites
            var recordings = ExtractAudioRecordingsInfo(bookData);

            //GENERATE audioArchive
            PackAllBookAudioArchives(resourceSessionDirector, recordings, bookData);
        }
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var bookVersion = resourceSessionDirector.GetSessionInfoValue <BookVersion>(SessionInfo.BookVersionEntity);

            var trans = resourceSessionDirector.Resources.Where(x => x.ResourceType == ResourceType.Transformation);

            if (bookVersion.Transformations == null)
            {
                bookVersion.Transformations = new List <Transformation>();
            }

            foreach (var transResource in trans)
            {
                var transformation = GetTransformationObject(transResource);
                bookVersion.Transformations.Add(transformation);
            }
        }
Exemple #12
0
        private void PackAllBookAudioArchives(ResourceSessionDirector resourceSessionDirector, Dictionary <AudioTypeEnum, List <TrackRecordingData> > recordings, BookData bookData)
        {
            bookData.FullBookRecordings = new List <FullBookRecordingData>();

            foreach (var audioType in recordings.Keys)
            {
                var allBookArchive = GenerateFullBookArchive(recordings[audioType], bookData, audioType, resourceSessionDirector);
                resourceSessionDirector.Resources.Add(allBookArchive);
                var entity = new FullBookRecordingData
                {
                    AudioType = audioType,
                    FileName  = allBookArchive.FileName,
                    MimeType  = MimeType
                };

                bookData.FullBookRecordings.Add(entity);
            }
        }
Exemple #13
0
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var metaData = GetMetadataForProcessing(resourceSessionDirector);

            var xmlFileStream = File.Open(metaData.FullPath, FileMode.Open);

            BookData bookData = m_xmlMetadataProcessingManager.GetXmlMetadata(xmlFileStream);

            bookData.VersionDescription = resourceSessionDirector.GetSessionInfoValue <string>(SessionInfo.Message);
            bookData.CreateTime         = resourceSessionDirector.GetSessionInfoValue <DateTime>(SessionInfo.CreateTime);

            resourceSessionDirector.SetSessionInfoValue(SessionInfo.BookData, bookData);
            resourceSessionDirector.SetSessionInfoValue(SessionInfo.BookXmlId, bookData.BookXmlId);
            resourceSessionDirector.SetSessionInfoValue(SessionInfo.VersionXmlId, bookData.VersionXmlId);

            AddBookAccessories(resourceSessionDirector, bookData);
            AddBookPages(resourceSessionDirector, bookData);
        }
Exemple #14
0
 private static void AddBookPages(ResourceSessionDirector resourceSessionDirector, BookData bookData)
 {
     if (bookData.Pages != null)
     {
         foreach (var page in bookData.Pages)
         {
             if (!string.IsNullOrWhiteSpace(page.XmlResource))
             {
                 var pageResource = new FileResource
                 {
                     FileName     = page.XmlResource,
                     FullPath     = Path.Combine(resourceSessionDirector.SessionPath, page.XmlResource),
                     ResourceType = ResourceType.Page
                 };
                 resourceSessionDirector.Resources.Add(pageResource);
             }
         }
     }
 }
Exemple #15
0
        private List <Resource> ExtractFilesFromArchive(Resource extractableArchive, ResourceSessionDirector resourceSessionDirector)
        {
            var result = new List <Resource>();

            using (ZipArchive archive = ZipFile.OpenRead(extractableArchive.FullPath))
            {
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    var fileName = entry.Name;
                    var fullPath = resourceSessionDirector.GetFullPathForNewSessionResource(fileName);
                    if (!string.IsNullOrWhiteSpace(fileName))
                    {
                        if (!string.IsNullOrWhiteSpace(fileName))
                        {
                            try
                            {
                                if (m_log.IsDebugEnabled)
                                {
                                    m_log.Debug($"Extracting file '{fileName}' from archive '{extractableArchive.FullPath}'");
                                }

                                entry.ExtractToFile(fullPath, false);
                                result.Add(new Resource
                                {
                                    FileName = fileName,
                                    FullPath = fullPath
                                });
                            }
                            catch (InvalidDataException ex)
                            {
                                if (m_log.IsErrorEnabled)
                                {
                                    m_log.ErrorFormat("Cannot extract resource: '{0}' from archive '{1}'. Exception: '{2}'", fileName,
                                                      extractableArchive.FullPath, ex.Message);
                                }
                            }
                        }
                    }
                }
            }

            return(result);
        }
        public void Process(ResourceSessionDirector resourceDirector)
        {
            var bookEntity = resourceDirector.GetSessionInfoValue <BookVersion>(SessionInfo.BookVersionEntity);

            var bookVersionId = m_bookVersionRepository.Create(bookEntity);
            var bookVersion   = m_bookVersionRepository.FindById <BookVersion>(bookVersionId);

            var categories           = m_categoryRepository.GetAllCategories();
            var categoriesDictionary = categories.ToDictionary(category => category.Id);

            var bookVersionCategories = m_categoryRepository.GetDirectCategoriesByBookVersionId(bookVersionId);

            var allBookVersionCategoryIds = new List <int>();

            foreach (var bookVersionCategory in bookVersionCategories)
            {
                Category category;
                if (categoriesDictionary.TryGetValue(bookVersionCategory.Id, out category))
                {
                    allBookVersionCategoryIds.Add(category.Id);
                    while (category.ParentCategory != null && categoriesDictionary.TryGetValue(category.ParentCategory.Id, out category))
                    {
                        allBookVersionCategoryIds.Add(category.Id);
                    }
                }
            }

            var specialPermissions   = m_permissionRepository.GetAutoimportPermissionsByCategoryIdList(allBookVersionCategoryIds);
            var groupsWithAutoimport = m_permissionRepository.GetGroupsBySpecialPermissionIds(specialPermissions.Select(x => x.Id));

            var newPermissions = groupsWithAutoimport.Select(groupWithAutoimport => new Permission
            {
                Book  = bookVersion.Book,
                Group = groupWithAutoimport
            });

            foreach (var newPermission in newPermissions)
            {
                m_permissionRepository.CreatePermissionIfNotExist(newPermission);
            }
        }
        public CreateOrUpdateProjectBasicDataWork(ProjectRepository projectRepository, ResourceSessionDirector resourceDirector) : base(projectRepository)
        {
            m_projectRepository = projectRepository;

            m_nullableProjectId = resourceDirector.GetSessionInfoValue <long?>(SessionInfo.ProjectId);
            m_bookData          = resourceDirector.GetSessionInfoValue <BookData>(SessionInfo.BookData);
            m_userId            = resourceDirector.GetSessionInfoValue <int>(SessionInfo.UserId);
            m_projectType       = resourceDirector.GetSessionInfoValue <ProjectTypeContract>(SessionInfo.ProjectType);
        }
Exemple #18
0
        public void Process(ResourceSessionDirector resourceDirector)
        {
            var existFileResources =
                resourceDirector.Resources.Where(
                    resource =>
                    resource.ResourceType == ResourceType.Book ||
                    resource.ResourceType == ResourceType.Page ||
                    resource.ResourceType == ResourceType.BibliographyDocument ||
                    resource.ResourceType == ResourceType.Transformation);

            var storeType = resourceDirector.GetSessionInfoValue <FulltextStoreTypeContract>(SessionInfo.StoreType);
            var bookData  = resourceDirector.GetSessionInfoValue <BookData>(SessionInfo.BookData);

            var fulltextResourceProcessor = m_fulltextStoreProcessorProvider.GetByStoreType(storeType);

            foreach (var resource in existFileResources)
            {
                if (string.IsNullOrEmpty(resource.FileName))
                {
                    if (m_log.IsErrorEnabled)
                    {
                        m_log.ErrorFormat("Resource of type {0} and path {1} does not have fileName", resource.ResourceType, resource.FullPath);
                    }

                    continue;
                }

                using (var dataStream = File.Open(resource.FullPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var resourceUploadContract = GetVersionResourceUploadContract(resource, resourceDirector, dataStream);

                    switch (resource.ResourceType)
                    {
                    case ResourceType.BibliographyDocument:
                        fulltextResourceProcessor.UploadBibliographyFile(resourceUploadContract);
                        break;

                    case ResourceType.Book:
                        fulltextResourceProcessor.UploadFullbookToBookVersion(resourceUploadContract);
                        break;

                    case ResourceType.Page:
                        var pageId = fulltextResourceProcessor.UploadPageToBookVersion(resourceUploadContract);
                        if (pageId != null)
                        {
                            var bookPageData = bookData.Pages.FirstOrDefault(x => x.XmlResource == resource.FileName);
                            if (bookPageData != null)
                            {
                                bookPageData.XmlId = pageId;
                            }
                        }
                        break;

                    case ResourceType.Transformation:
                        fulltextResourceProcessor.UploadTransformationResource(resourceUploadContract);
                        break;

                    default:
                        throw new ArgumentException($"ResourceType: '{resource.ResourceType}' not meant for ExistDb upload");
                    }
                }
            }
        }
Exemple #19
0
 private VersionResourceUploadContract GetVersionResourceUploadContract(FileResource resource, ResourceSessionDirector resourceDirector, Stream dataStream)
 {
     return(new VersionResourceUploadContract
     {
         BookId = resourceDirector.GetSessionInfoValue <string>(SessionInfo.BookXmlId),
         BookVersionId = resourceDirector.GetSessionInfoValue <string>(SessionInfo.VersionXmlId),
         FileName = resource.FileName,
         ResourceType = resource.ResourceType,
         DataStream = dataStream
     });
 }
Exemple #20
0
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var inputFilesResource = resourceSessionDirector.Resources.Where(resource => resource.ResourceType == ResourceType.SourceDocument).OrderBy(r => r.FileName, StringComparer.CurrentCultureIgnoreCase);
            var inputFileResource  = inputFilesResource.First();

            string metaDataFileName;

            if (resourceSessionDirector.Resources.Any(x => x.ResourceType == ResourceType.UploadedMetadata))
            {
                metaDataFileName = string.Format("{0}_converted.xmd", Path.GetFileNameWithoutExtension(inputFileResource.FileName));
            }
            else
            {
                metaDataFileName = string.Format("{0}.xmd", Path.GetFileNameWithoutExtension(inputFileResource.FileName));
            }

            var metaDataResource = new FileResource
            {
                FileName     = metaDataFileName,
                FullPath     = Path.Combine(resourceSessionDirector.SessionPath, metaDataFileName),
                ResourceType = ResourceType.ConvertedMetadata
            };

            var tmpDirPath = Path.Combine(resourceSessionDirector.SessionPath, "tmp");

            if (!Directory.Exists(tmpDirPath))
            {
                Directory.CreateDirectory(tmpDirPath);
            }

            var message     = resourceSessionDirector.GetSessionInfoValue <string>(SessionInfo.Message);
            var createTime  = resourceSessionDirector.GetSessionInfoValue <DateTime>(SessionInfo.CreateTime);
            var projectType = (ProjectTypeEnum)resourceSessionDirector.GetSessionInfoValue <ProjectTypeContract>(SessionInfo.ProjectType);

            var versionProviderHelper = new VersionProviderHelper(message, createTime, m_projectRepository, m_versionIdGenerator, projectType);

            var settings = new DocxToTeiConverterSettings
            {
                Debug             = false,
                InputFilesPath    = inputFilesResource.Select(p => p.FullPath).ToArray(),
                UploadedFilesPath = resourceSessionDirector.Resources.GroupBy(resource => resource.ResourceType).
                                    ToDictionary(resourceGroup => resourceGroup.Key,
                                                 resourceGroup => resourceGroup.Select(resource => resource.FullPath).ToArray()),
                //MetadataFilePath = null,
                OutputDirectoryPath       = resourceSessionDirector.SessionPath,
                OutputMetadataFilePath    = metaDataResource.FullPath,
                TempDirectoryPath         = tmpDirPath,
                GetVersionList            = versionProviderHelper.GetVersionsByBookXmlId,
                SplitDocumentByPageBreaks = true,
                // HttpRuntime.BinDirectory is used instead of HostingEnvironment.ApplicationPhysicalPath because all required files are in bin folder
                DataDirectoryPath = Path.Combine(HttpRuntime.BinDirectory, m_dataDirectoryPath)
            };

            var evidenceFolderPath = Path.Combine(HttpRuntime.BinDirectory,
                                                  m_conversionMetadataPath);
            var evidenceXmlFiles = Directory.GetFiles(evidenceFolderPath);
            ConversionResult conversionResult = null;

            foreach (var evidenceXmlFile in evidenceXmlFiles)
            {
                settings.MetadataFilePath = evidenceXmlFile;

                var converter = new DocxToTeiConverter();
                conversionResult = converter.Convert(settings);

                if (conversionResult.Errors.Count == 0)
                {
                    break;
                }
            }

            if (conversionResult.IsConverted)
            {
                resourceSessionDirector.Resources.Add(metaDataResource);
            }
            else
            {
                var exception = conversionResult.Errors.FirstOrDefault();
                throw new ConversionException(string.Format("File was not converted sucessfully. See InnerException : '{0}'", exception), exception);
            }
        }
        public void Process(ResourceSessionDirector resourceSessionDirector)
        {
            var inputFilesResource = resourceSessionDirector.Resources.Where(resource => resource.ResourceType == ResourceType.SourceDocument).OrderBy(r => r.FileName, StringComparer.CurrentCultureIgnoreCase);
            var inputFileResource  = inputFilesResource.First();

            string metaDataFileName;

            if (resourceSessionDirector.Resources.Any(x => x.ResourceType == ResourceType.UploadedMetadata))
            {
                metaDataFileName = string.Format("{0}_converted.xmd", Path.GetFileNameWithoutExtension(inputFileResource.FileName));
            }
            else
            {
                metaDataFileName = string.Format("{0}.xmd", Path.GetFileNameWithoutExtension(inputFileResource.FileName));
            }

            var metaDataResource = new Resource
            {
                FileName     = metaDataFileName,
                FullPath     = Path.Combine(resourceSessionDirector.SessionPath, metaDataFileName),
                ResourceType = ResourceType.ConvertedMetadata
            };

            var tmpDirPath = Path.Combine(resourceSessionDirector.SessionPath, "tmp");

            if (!Directory.Exists(tmpDirPath))
            {
                Directory.CreateDirectory(tmpDirPath);
            }

            var message    = resourceSessionDirector.GetSessionInfoValue <string>(SessionInfo.Message);
            var createTime = resourceSessionDirector.GetSessionInfoValue <DateTime>(SessionInfo.CreateTime);

            var versionProviderHelper = new VersionProviderHelper(message, createTime, m_bookRepository, m_versionIdGenerator);

            var settings = new DocxToTeiConverterSettings
            {
                Debug             = false,
                InputFilesPath    = inputFilesResource.Select(p => p.FullPath).ToArray(),
                UploadedFilesPath = resourceSessionDirector.Resources.GroupBy(resource => resource.ResourceType).
                                    ToDictionary(resourceGroup => resourceGroup.Key,
                                                 resourceGroup => resourceGroup.Select(resource => resource.FullPath).ToArray()),
                MetadataFilePath          = m_conversionMetadataPath,
                OutputDirectoryPath       = resourceSessionDirector.SessionPath,
                OutputMetadataFilePath    = metaDataResource.FullPath,
                TempDirectoryPath         = tmpDirPath,
                GetVersionList            = versionProviderHelper.GetVersionsByBookId,
                SplitDocumentByPageBreaks = true,
                DataDirectoryPath         = m_dataDirectoryPath
            };

            var converter        = new DocxToTeiConverter();
            var conversionResult = converter.Convert(settings);

            if (conversionResult.IsConverted)
            {
                resourceSessionDirector.Resources.Add(metaDataResource);
            }
            else
            {
                var exception = conversionResult.Errors.FirstOrDefault();
                throw new ConversionException(string.Format("File was not converted sucessfully. See InnerException : '{0}'", exception), exception);
            }
        }
Exemple #22
0
        public void Process(ResourceSessionDirector resourceDirector)
        {
            var storeType             = resourceDirector.GetSessionInfoValue <FulltextStoreTypeContract>(SessionInfo.StoreType);
            var autoImportPermissions = resourceDirector.GetSessionInfoValue <IList <PermissionFromAuthContract> >(SessionInfo.AutoImportPermissions);
            var bookData = resourceDirector.GetSessionInfoValue <BookData>(SessionInfo.BookData);

            bookData.FileNameMapping = new Dictionary <string, FileResource>();
            foreach (var fileResource in resourceDirector.Resources.Where(x => x.NewNameInStorage != null))
            {
                bookData.FileNameMapping.Add(fileResource.FileName, fileResource);
            }

            bookData.ContainsEditionNote = true; //HACK always create new EditionNoteResource, TODO determine if edition note exists

            var saveNewBookDataWork = new SaveNewBookDataWork(m_projectRepository, m_metadataRepository, m_resourceRepository, m_catalogValueRepository, m_personRepository, resourceDirector);

            saveNewBookDataWork.Execute();

            var projectId          = saveNewBookDataWork.ProjectId;
            var userId             = saveNewBookDataWork.UserId;
            var message            = saveNewBookDataWork.Message;
            var resourceVersionIds = saveNewBookDataWork.ImportedResourceVersionIds;
            var bookVersionId      = saveNewBookDataWork.BookVersionId;

            var createNewSnapshot = new CreateSnapshotForImportedDataWork(m_projectRepository, projectId, userId, resourceVersionIds, bookData, message, bookVersionId);

            createNewSnapshot.Execute();

            PublishSnapshotToExternalDatabase(createNewSnapshot.SnapshotId, projectId, bookData.Pages, storeType);

            //var bookVersionId = m_bookVersionRepository.Create(bookData);
            //var bookVersion = m_bookVersionRepository.FindById<BookVersion>(bookVersionId);

            //var categories = m_categoryRepository.GetAllCategories();
            //var categoriesDictionary = categories.ToDictionary(category => category.Id);

            //var bookVersionCategories = m_categoryRepository.GetDirectCategoriesByBookVersionId(bookVersionId);

            //var allBookVersionCategoryIds = new List<int>();
            //foreach (var bookVersionCategory in bookVersionCategories)
            //{
            //    Category category;
            //    if (categoriesDictionary.TryGetValue(bookVersionCategory.Id, out category))
            //    {
            //        allBookVersionCategoryIds.Add(category.Id);
            //        while (category.ParentCategory != null && categoriesDictionary.TryGetValue(category.ParentCategory.Id, out category))
            //        {
            //            allBookVersionCategoryIds.Add(category.Id);
            //        }
            //    }
            //}

            var processAutoImportPermission = new ProcessAutoImportPermissionWork(m_permissionRepository, projectId, createNewSnapshot.BookTypes, autoImportPermissions);

            processAutoImportPermission.Execute();

            //var specialPermissions = m_permissionRepository.GetAutoimportPermissionsByCategoryIdList(allBookVersionCategoryIds);
            //var groupsWithAutoimport = m_permissionRepository.GetGroupsBySpecialPermissionIds(specialPermissions.Select(x => x.Id));

            //var newPermissions = groupsWithAutoimport.Select(groupWithAutoimport => new Permission
            //{
            //    Book = bookVersion.Book,
            //    Group = groupWithAutoimport
            //});

            //foreach (var newPermission in newPermissions)
            //{
            //     m_permissionRepository.CreatePermissionIfNotExist(newPermission);
            //}
            resourceDirector.SetSessionInfoValue(SessionInfo.ProjectId, projectId);
        }