protected override void BeginWork()
        {
            base.BeginWork();
            _jobParameter =
                (NearDuplicationJobBEO)XmlUtility.DeserializeObject(BootParameters, typeof(NearDuplicationJobBEO));

            #region Assertion

            _jobParameter.DatasetId.ShouldBeGreaterThan(0);
            _jobParameter.MatterId.ShouldBeGreaterThan(0);
            _jobParameter.CollectionId.ShouldNotBeEmpty();
            //  _jobParameter.JobName.ShouldNotBeEmpty();

            #endregion

            _ingestionId      = string.Format("{0}_Dataset-{1}_RunId-{2}", _jobParameter.JobName, _jobParameter.DatasetId, PipelineId);
            _familyThreshHold = ((_jobParameter.FamilyThreshold > 0)
                                     ? (byte)_jobParameter.FamilyThreshold
                                     : Constants.NearDuplicationFamilyThresholdDefaultValue);
            _clusterThreshHold = ((_jobParameter.ClusterThreshold > 0)
                                      ? (byte)_jobParameter.ClusterThreshold
                                      : Constants.NearDuplicationClusterThresholdDefaultValue);
            //Get Vault Database Connection string
            var documentVaultManager = new DocumentVaultManager();
            _connectionString = documentVaultManager.GetConnectionStringForMatter(_jobParameter.MatterId);

            //Get Polaris license server IP address
            _licenseServer = CmgServiceConfigBO.GetServiceConfigurationsforConfig(Constants.NearDuplicationPolarisLicenseKeyName);
        }
        /// <summary>
        /// Deletes the near native for overlay.
        /// </summary>
        /// <param name="overlayDocumentDetailObjects">The overlay document detail objects.</param>
        private void DeleteNearNativeForOverlay(IEnumerable <DocumentDetail> overlayDocumentDetailObjects)
        {
            try
            {
                if (overlayDocumentDetailObjects != null && overlayDocumentDetailObjects.Any())
                {
                    // extract RVWDocumentBEO objects out of overlay document detail objects.
                    IEnumerable <RVWDocumentBEO> overlayDocuments = overlayDocumentDetailObjects.Select(p => p.document);

                    // Call Document Vault Manager function delete document binary
                    if (overlayDocuments.Any())
                    {
                        var documentVaultManager = new DocumentVaultManager();
                        documentVaultManager.DeleteNearNativeDocumentBinary(overlayDocuments);
                        //Delete document Redaction
                        var firstOrDefault = overlayDocuments.FirstOrDefault();
                        if (firstOrDefault != null)
                        {
                            documentVaultManager.DeleteDocumentsMetaData(_matterId, firstOrDefault.CollectionId, overlayDocuments, 4);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ReportToDirector(ex);
                ex.Trace().Swallow();
                //LogMessage(false, ex.ToUserString());
            }
        }
        public bool UpdateProducedImageFilePath(string documentId, string collectionId, long matterId, List <string> producedImages, string userId)
        {
            var fileCount            = 0;
            var documentTextEntities = new List <DocumentTextEntity>();

            producedImages.Sort();
            foreach (var imageFile in producedImages)
            {
                fileCount = fileCount + 1;
                documentTextEntities.Add(new DocumentTextEntity
                {
                    CollectionId        = new Guid(collectionId),
                    CreatedBy           = userId,
                    DocumentReferenceId = documentId,
                    SequenceId          = fileCount,
                    DocumentTextType    = new DocumentTextTypeEntity
                    {
                        TextTypeId   = 2,
                        TextTypeName = ConDocumentTypeName
                    },
                    DocumentText = imageFile
                });
            }
            var documentMasterRecords = new List <DocumentMasterEntity>
            {
                new DocumentMasterEntity
                {
                    DocumentReferenceId = documentId,
                    CollectionId        = new Guid(collectionId)
                }
            };
            var documentVaultManager = new DocumentVaultManager();

            return(documentVaultManager.BulkUpdateImagesInDocumentText(matterId, documentMasterRecords, documentTextEntities, 2));
        }
        protected override void BeginWork()
        {
            base.BeginWork();
            _jobParameter =
                (NearDuplicationJobBEO) XmlUtility.DeserializeObject(BootParameters, typeof (NearDuplicationJobBEO));

            #region Assertion

            _jobParameter.DatasetId.ShouldBeGreaterThan(0);
            _jobParameter.MatterId.ShouldBeGreaterThan(0);
            _jobParameter.CollectionId.ShouldNotBeEmpty();
          //  _jobParameter.JobName.ShouldNotBeEmpty();

            #endregion

            _ingestionId = string.Format("{0}_Dataset-{1}_RunId-{2}", _jobParameter.JobName, _jobParameter.DatasetId, PipelineId);
            _familyThreshHold = ((_jobParameter.FamilyThreshold > 0)
                                     ? (byte) _jobParameter.FamilyThreshold
                                     : Constants.NearDuplicationFamilyThresholdDefaultValue);
            _clusterThreshHold = ((_jobParameter.ClusterThreshold > 0)
                                      ? (byte) _jobParameter.ClusterThreshold
                                      : Constants.NearDuplicationClusterThresholdDefaultValue);
            //Get Vault Database Connection string
            var documentVaultManager = new DocumentVaultManager();
            _connectionString = documentVaultManager.GetConnectionStringForMatter(_jobParameter.MatterId);

            //Get Polaris license server IP address
            _licenseServer = CmgServiceConfigBO.GetServiceConfigurationsforConfig(Constants.NearDuplicationPolarisLicenseKeyName);
        }
        protected override void BeginWork()
        {
            base.BeginWork();

            _jobParameter =
                (NearDuplicationJobBEO)XmlUtility.DeserializeObject(BootParameters, typeof(NearDuplicationJobBEO));

            #region "Assertion"

            _jobParameter.DatasetId.ShouldBeGreaterThan(0);
            _jobParameter.MatterId.ShouldBeGreaterThan(0);
            _jobParameter.CollectionId.ShouldNotBeEmpty();
            // _jobParameter.JobName.ShouldNotBeEmpty();

            #endregion

            _ingestionId = string.Format("{0}_Dataset-{1}_RunId-{2}", _jobParameter.JobName, _jobParameter.DatasetId, PipelineId);
            var familyThreshHold = ((_jobParameter.FamilyThreshold > 0)
                                        ? (byte)_jobParameter.FamilyThreshold
                                        : Constants.NearDuplicationFamilyThresholdDefaultValue);
            var clusterThreshHold = ((_jobParameter.ClusterThreshold > 0)
                                         ? (byte)_jobParameter.ClusterThreshold
                                         : Constants.NearDuplicationClusterThresholdDefaultValue);

            //Get Vault Database Connection string
            var documentVaultManager = new DocumentVaultManager();
            _connectionString = documentVaultManager.GetConnectionStringForMatter(_jobParameter.MatterId);

            //Get Dataset details
            _dataset = DataSetBO.GetDataSetDetailForDataSetId(_jobParameter.DatasetId);
            _dataset.ShouldNotBe(null);

            //Get Polaris license server IP address
            var licenseServer =
                CmgServiceConfigBO.GetServiceConfigurationsforConfig(Constants.NearDuplicationPolarisLicenseKeyName);

            try
            {
                //Initialize Near Dupe Adapter
                _nearDuplicationAdapter = new EVPolarisNearDuplicationAdapter();
                _nearDuplicationAdapter.InitializeAdapter(_connectionString, _ingestionId, licenseServer,
                                                          clusterThreshHold,
                                                          familyThreshHold);
            }
            catch (Exception ex)
            {
                Tracer.Error(
                    "Near Duplication Start Up Worker: Failed to initialize Near duplication engine for job run id:{0}, exception:{1}",
                    PipelineId, ex);
                throw;
            }
            // _nearDuplicationAdapter.DeleteAllData();
        }
        protected override void BeginWork()
        {
            base.BeginWork();

            _jobParameter =
                (NearDuplicationJobBEO) XmlUtility.DeserializeObject(BootParameters, typeof (NearDuplicationJobBEO));

            #region "Assertion"

            _jobParameter.DatasetId.ShouldBeGreaterThan(0);
            _jobParameter.MatterId.ShouldBeGreaterThan(0);
            _jobParameter.CollectionId.ShouldNotBeEmpty();
           // _jobParameter.JobName.ShouldNotBeEmpty();

            #endregion
                       
            _ingestionId = string.Format("{0}_Dataset-{1}_RunId-{2}", _jobParameter.JobName, _jobParameter.DatasetId, PipelineId);
            var familyThreshHold = ((_jobParameter.FamilyThreshold > 0)
                                        ? (byte) _jobParameter.FamilyThreshold
                                        : Constants.NearDuplicationFamilyThresholdDefaultValue);
            var clusterThreshHold = ((_jobParameter.ClusterThreshold > 0)
                                         ? (byte) _jobParameter.ClusterThreshold
                                         : Constants.NearDuplicationClusterThresholdDefaultValue);

            //Get Vault Database Connection string
            var documentVaultManager = new DocumentVaultManager();
            _connectionString = documentVaultManager.GetConnectionStringForMatter(_jobParameter.MatterId);

            //Get Dataset details
            _dataset= DataSetBO.GetDataSetDetailForDataSetId(_jobParameter.DatasetId);
            _dataset.ShouldNotBe(null);

            //Get Polaris license server IP address
            var licenseServer =
                CmgServiceConfigBO.GetServiceConfigurationsforConfig(Constants.NearDuplicationPolarisLicenseKeyName);

            try
            {
                //Initialize Near Dupe Adapter
                _nearDuplicationAdapter = new EVPolarisNearDuplicationAdapter();
                _nearDuplicationAdapter.InitializeAdapter(_connectionString, _ingestionId, licenseServer,
                                                          clusterThreshHold,
                                                          familyThreshHold);
            }
            catch (Exception ex)
            {
                Tracer.Error(
                    "Near Duplication Start Up Worker: Failed to initialize Near duplication engine for job run id:{0}, exception:{1}",
                    PipelineId, ex);
                throw;
            }
           // _nearDuplicationAdapter.DeleteAllData();
        }
Example #7
0
        /// <summary>
        ///   Get Native File Path
        /// </summary>
        private String GetNativeFilePath(String documentId)
        {
            string nativeFile           = string.Empty;
            var    documentVaultManager = new DocumentVaultManager();

            using (EVTransactionScope transScope = new EVTransactionScope(System.Transactions.TransactionScopeOption.Suppress))
            {
                nativeFile = documentVaultManager.GetNativeFilePath(m_Dataset.Matter.FolderID,
                                                                    new Guid(m_JobParameter.CollectionId),
                                                                    documentId);
            }
            return(nativeFile);
        }
        /// <summary>
        ///   Get Native File Path
        /// </summary>
        private string GetNativeFilePath(String documentId)
        {
            string nativeFile;
            var    documentVaultManager = new DocumentVaultManager();

            using (new EVTransactionScope(System.Transactions.TransactionScopeOption.Suppress))
            {
                nativeFile = documentVaultManager.GetNativeFilePath(_datasetBEO.Matter.FolderID,
                                                                    new Guid(_jobParams.CollectionId),
                                                                    documentId);
            }
            return(nativeFile);
        }
 /// <summary>
 /// Get Document Text File for colletionId
 /// </summary>
 private IEnumerable <RVWDocumentBEO> GetDocumentTextFile()
 {
     try
     {
         //Get document text file
         var documentVaultManager = new DocumentVaultManager();
         var documents            = documentVaultManager.GetDocumentTextFileForCollection(_jobParameter.MatterId,
                                                                                          _jobParameter.CollectionId,
                                                                                          1);
         return(documents);
     }
     catch (Exception ex)
     {
         Tracer.Error(
             "Near Duplication Start Up Worker: Failed in get document text file for job run id:{0}, exception:{1}",
             PipelineId, ex);
         throw;
     }
 }
Example #10
0
 /// <summary>
 ///     Get Document Control Number for Documents
 /// </summary>
 /// <param name="nearDuplicationResultDocuments"></param>
 /// <returns></returns>
 private List <DocumentMasterEntity> GetDocumentControlNumberForDocuments(
     IEnumerable <NearDuplicationResultInfo> nearDuplicationResultDocuments)
 {
     try
     {
         List <string> documentReferenceIds =
             nearDuplicationResultDocuments.Select(resultDocument => resultDocument.DocumentId).ToList();
         var documentVaultManager = new DocumentVaultManager();
         IEnumerable <DocumentMasterEntity> documentsDetailInfo =
             documentVaultManager.BulkGetDcnForDocuments(_jobParameter.MatterId,
                                                         _jobParameter.CollectionId, documentReferenceIds);
         return(documentsDetailInfo.ToList());
     }
     catch (Exception ex)
     {
         ReportToDirector(ex);
         ex.Trace().Swallow();
     }
     return(null);
 }
        /// <summary>
        /// Overlay- Check ContentFile (i.e  same file as used during Append)
        /// </summary>
        /// <param name="collectionId"></param>
        /// <param name="documentId"></param>
        /// <returns></returns>
        private string GetExistingContentFile(string collectionId, string documentId)
        {
            string         contentFilePath = null;
            var            docVaultManager = new DocumentVaultManager();
            RVWDocumentBEO document;

            using (new EVTransactionScope(System.Transactions.TransactionScopeOption.Suppress))
            {
                document = docVaultManager.GetDocumentFileDetails(_datasetBEO.Matter.FolderID, new Guid(collectionId), documentId, 1, string.Empty);
            }
            if (document != null && document.DocumentBinary != null && document.DocumentBinary.FileList != null && document.DocumentBinary.FileList.Count > 0)
            {
                var contentFile         = document.DocumentBinary.FileList.Where(f => f.Type == Constants.ExtractedText_FILE_TYPE);
                var rvwExternalFileBeos = contentFile as RVWExternalFileBEO[] ?? contentFile.ToArray();
                if (rvwExternalFileBeos.FirstOrDefault() != null)
                {
                    contentFilePath = (!string.IsNullOrEmpty(rvwExternalFileBeos.First().Path) ? rvwExternalFileBeos.First().Path : string.Empty);
                }
            }
            return(contentFilePath);
        }
Example #12
0
        /// <summary>
        /// Overlay- Check ContentFile (i.e  same file as used during Append)
        /// </summary>
        /// <param name="collectionId"></param>
        /// <param name="documentId"></param>
        /// <param name="textFilePath"></param>
        /// <param name="newTextFile"></param>
        /// <returns></returns>
        private string GetExistingContentFile(string collectionId, string documentId)
        {
            string contentFilePath = null;
            DocumentVaultManager docVaultManager = new DocumentVaultManager();
            var            collectionGUILD       = new Guid(collectionId);
            RVWDocumentBEO document = null;

            using (EVTransactionScope transScope = new EVTransactionScope(System.Transactions.TransactionScopeOption.Suppress))
            {
                document = docVaultManager.GetDocumentFileDetails(m_Dataset.Matter.FolderID, new Guid(collectionId), documentId, 1, string.Empty);
            }
            if (document != null && document.DocumentBinary != null && document.DocumentBinary.FileList != null && document.DocumentBinary.FileList.Count > 0)
            {
                var contentFile = document.DocumentBinary.FileList.Where(f => f.Type == Constants.ExtractedText_FILE_TYPE);
                if (contentFile != null && contentFile.FirstOrDefault() != null)
                {
                    contentFilePath = (!string.IsNullOrEmpty(contentFile.FirstOrDefault().Path) ? contentFile.FirstOrDefault().Path : string.Empty);
                }
            }
            return(contentFilePath);
        }
Example #13
0
        /// <summary>
        ///     Update Fields in Database
        /// </summary>
        private bool UpdateNearDuplicationFieldsInDatabase()
        {
            bool status = false;

            try
            {
                Tracer.Info(
                    "Near Duplication EV Update Worker: Update fields in database, started time {0} for job run id :{1}",
                    DateTime.Now, PipelineId);
                var documentVaultManager = new DocumentVaultManager();
                status = documentVaultManager.BulkUpsertDocumentsFields(
                    _jobParameter.MatterId.ToString(CultureInfo.InvariantCulture),
                    _jobParameter.CollectionId, _documentsFields);
                Tracer.Info(
                    "Near Duplication EV Update Worker: Update fields in database, completed time {0} for job run id :{1}",
                    DateTime.Now, PipelineId);
            }
            catch (Exception ex)
            {
                ReportToDirector(ex);
                ex.Trace().Swallow();
            }
            return(status);
        }
 /// <summary>
 /// Get Document Text File for colletionId
 /// </summary>
 private IEnumerable<RVWDocumentBEO> GetDocumentTextFile()
 {
     try
     {
         //Get document text file
         var documentVaultManager = new DocumentVaultManager();
         var documents = documentVaultManager.GetDocumentTextFileForCollection(_jobParameter.MatterId,
                                                                               _jobParameter.CollectionId,
                                                                               1);
         return documents;
     }
     catch (Exception ex)
     {
         Tracer.Error(
             "Near Duplication Start Up Worker: Failed in get document text file for job run id:{0}, exception:{1}",
             PipelineId, ex);
         throw;
     }
 }
Example #15
0
        /// <summary>
        /// Gets the reconversion document beos for job id.
        /// </summary>
        /// <param name="matterId">The matter id.</param>
        /// <param name="jobId">The job id.</param>
        /// <param name="filters">The filters.</param>
        /// <returns></returns>
        public static IEnumerable <ReconversionDocumentBEO> GetReconversionDocumentBeosForJobId(long matterId, long jobId,
                                                                                                string filters)
        {
            IDataReader dataReader = null;

            if (!string.IsNullOrEmpty(filters))
            {
                //user can filter the conversion results then do select all
                //filters has filter key : value with comma a delimiter
                var documentVaultManager = new DocumentVaultManager();
                documentVaultManager.Init(matterId);
                dataReader = documentVaultManager.GetConversionResultsDataReader(matterId, jobId, null, null, filters);
            }
            else
            {
                var          evDbManager = new EVDbManager(matterId);
                const string sqlCommand  =
                    @"SELECT dm.DocID,dm.DocTitle,dm.DocReferenceID, dm.CollectionID, ps.DCN ,T.DocText
                FROM [dbo].[DOC_ProcessSet] AS ps 
                INNER JOIN [dbo].[DOC_DocumentMaster] AS dm ON ps.[DocID] = dm.[DocID] 
                LEFT OUTER JOIN  dbo.DOC_DocumentText T ON DM.DocID = T.DocID AND T.TextTypeID = 2 
                WHERE ps.JobID = @JobID 
                ORDER BY  DM.DocTitle";
                var dbCommand = evDbManager.CreateTextCommand(sqlCommand);
                dbCommand.CommandTimeout = 0;
                evDbManager.AddInParameter(dbCommand, "JobID", DbType.Int64, jobId);
                dataReader = evDbManager.ExecuteDataReader(dbCommand);
            }

            Debug.Assert(dataReader != null);
            ReconversionDocumentBEO reconversionDocumentBeo = null;

            while (dataReader.Read())
            {
                string docRefId     = dataReader["DocReferenceID"].ToString();
                string collectionId = dataReader["CollectionID"].ToString();
                string dcn          = dataReader["DCN"].ToString();

                //new document (need to check this due to that multiple rows are returned in case of one document with multiple file path associated)
                if (reconversionDocumentBeo == null ||
                    !docRefId.Equals(reconversionDocumentBeo.DocumentId) ||
                    !collectionId.Equals(reconversionDocumentBeo.CollectionId) ||
                    !dcn.Equals(reconversionDocumentBeo.DCNNumber))
                {
                    if (reconversionDocumentBeo != null)
                    {
                        //query sorts the results in DCN order
                        //accumulate the file list of the document (DCN) then yield
                        //Example:(DCN File1),(DCN,File2) and (DCN001, File3)
                        //yield DCN,<File1,File2,File3>
                        yield return(reconversionDocumentBeo);
                    }
                    reconversionDocumentBeo = new ReconversionDocumentBEO()
                    {
                        DocumentId   = docRefId,
                        CollectionId = collectionId,
                        DCNNumber    = dcn
                    };
                }
                reconversionDocumentBeo.FileList.Add(dataReader[Constants.ColumnDocText].ToString());
                //add file path to list of file path for the document
            }
            dataReader.Close();
            if (reconversionDocumentBeo != null)
            {
                yield return(reconversionDocumentBeo);
            }
        }
Example #16
0
        /// <summary>
        /// Gets the production document list.
        /// </summary>
        /// <param name="filePath">The file path.</param>
        /// <param name="selectionMode">The selection mode.</param>
        /// <param name="matterId">The matter id.</param>
        /// <param name="baseJobConfig">The base job config.</param>
        /// <param name="redactableCollectionId">The redactable collection id.</param>
        /// <param name="jobId"></param>
        /// <param name="filters"> </param>
        /// <returns></returns>
        public virtual IEnumerable <ReconversionProductionDocumentBEO> GetProductionDocumentList(
            string filePath, ReProcessJobSelectionMode selectionMode, long matterId,
            ProductionDetailsBEO baseJobConfig, string redactableCollectionId, int jobId, string filters = null)
        {
            switch (selectionMode)
            {
            case ReProcessJobSelectionMode.Selected:
            {
                var docidList = GetDocumentIdListFromFile(filePath, Constants.DocId);
                foreach (var v in GetProductionDocumentListForIdList(
                             docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId))
                {
                    yield return(v);
                }
                break;
            }

            case ReProcessJobSelectionMode.Csv:
            case ReProcessJobSelectionMode.CrossReference:
            {
                var dictIds = GetDocumentIdListFromFile(filePath, Constants.DCN, Constants.DocumentSetName);

                //put all value in one list. Since there is only one production set, it should all be the same collectionId
                var ids = new List <string>();
                foreach (var dictId in dictIds)
                {
                    ids.AddRange(dictId.Value);
                }
                foreach (var v in GetProductionDocumentListForIdList(
                             ids, Constants.DCN, matterId, baseJobConfig, redactableCollectionId, jobId))
                {
                    yield return(v);
                }
                break;
            }

            case ReProcessJobSelectionMode.All:
                IEnumerable <ReconversionProductionDocumentBEO> reconversionProductionDocumentBeos = null;
                if (!string.IsNullOrEmpty(filters))
                {
                    var documentVaultManager = new DocumentVaultManager();
                    documentVaultManager.Init(matterId);

                    IEnumerable <DocumentConversionLogBeo> documentConversionLogBeos =
                        documentVaultManager.GetConversionResultsWithFilters(matterId, jobId, null, null, filters
                                                                             );
                    var docidList =
                        documentConversionLogBeos.Select(
                            documentConversionLogBeo =>
                            documentConversionLogBeo.DocId.ToString(CultureInfo.InvariantCulture)).ToList();
                    reconversionProductionDocumentBeos = GetProductionDocumentListForIdList(
                        docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId);
                }
                else
                {
                    reconversionProductionDocumentBeos = GetProductionDocumentListForIdList
                                                         (
                        null, "ALL", matterId, baseJobConfig, redactableCollectionId, jobId);
                }
                if (reconversionProductionDocumentBeos == null)
                {
                    yield return(null);
                }
                foreach (var reConversionProductionBeo in reconversionProductionDocumentBeos)
                {
                    yield return(reConversionProductionBeo);
                }
                break;
            }
        }
 /// <summary>
 /// Overlay- Check ContentFile (i.e  same file as used during Append)
 /// </summary>
 /// <param name="collectionId"></param>
 /// <param name="documentId"></param>
 /// <param name="textFilePath"></param>
 /// <param name="newTextFile"></param>
 /// <returns></returns>
 private string GetExistingContentFile(string collectionId, string documentId)
 {
     string contentFilePath = null;
     DocumentVaultManager docVaultManager = new DocumentVaultManager();
     var collectionGUILD = new Guid(collectionId);
     RVWDocumentBEO document = null;
     using (EVTransactionScope transScope = new EVTransactionScope(System.Transactions.TransactionScopeOption.Suppress))
     {
         document = docVaultManager.GetDocumentFileDetails(m_Dataset.Matter.FolderID, new Guid(collectionId), documentId, 1, string.Empty);
     }
     if (document != null && document.DocumentBinary != null && document.DocumentBinary.FileList != null && document.DocumentBinary.FileList.Count > 0)
     {
         var contentFile = document.DocumentBinary.FileList.Where(f => f.Type == Constants.ExtractedText_FILE_TYPE);
         if (contentFile != null && contentFile.FirstOrDefault() != null)
         {
             contentFilePath = (!string.IsNullOrEmpty(contentFile.FirstOrDefault().Path) ? contentFile.FirstOrDefault().Path : string.Empty);
         }
     }
     return contentFilePath;
 }
 public bool UpdateProducedImageFilePath(string documentId, string collectionId, long matterId, List<string> producedImages,string userId)
 {
     var fileCount = 0;
     var documentTextEntities = new List<DocumentTextEntity>();
     producedImages.Sort();
     foreach (var imageFile in producedImages)
     {
         fileCount = fileCount + 1;
         documentTextEntities.Add(new DocumentTextEntity
         {
             CollectionId = new Guid(collectionId),
             CreatedBy = userId,
             DocumentReferenceId = documentId,
             SequenceId = fileCount,
             DocumentTextType = new DocumentTextTypeEntity
             {
                 TextTypeId = 2,
                 TextTypeName = ConDocumentTypeName
             },
             DocumentText = imageFile
         });
     }
     var documentMasterRecords = new List<DocumentMasterEntity>
                                     {
                                         new DocumentMasterEntity
                                             {
                                                 DocumentReferenceId = documentId,
                                                 CollectionId = new Guid(collectionId)
                                             }
                                     };
     var documentVaultManager = new DocumentVaultManager();
     return documentVaultManager.BulkUpdateImagesInDocumentText(matterId, documentMasterRecords, documentTextEntities,2);
 }
 /// <summary>
 ///   Get Native File Path
 /// </summary>       
 private String GetNativeFilePath(String documentId)
 {
     string nativeFile = string.Empty;
     var documentVaultManager = new DocumentVaultManager();
     using (EVTransactionScope transScope = new EVTransactionScope(System.Transactions.TransactionScopeOption.Suppress))
     {
         nativeFile = documentVaultManager.GetNativeFilePath(m_Dataset.Matter.FolderID,
                                                             new Guid(m_JobParameter.CollectionId),
                                                             documentId);
     }
     return nativeFile;
 }
        /// <summary>
        /// Gets the production document list.
        /// </summary>
        /// <param name="filePath">The file path.</param>
        /// <param name="selectionMode">The selection mode.</param>
        /// <param name="matterId">The matter id.</param>
        /// <param name="baseJobConfig">The base job config.</param>
        /// <param name="redactableCollectionId">The redactable collection id.</param>
        /// <param name="jobId"></param>
        /// <param name="filters"> </param>
        /// <returns></returns>
        public virtual IEnumerable<ReconversionProductionDocumentBEO> GetProductionDocumentList(
            string filePath, ReProcessJobSelectionMode selectionMode, long matterId,
            ProductionDetailsBEO baseJobConfig, string redactableCollectionId, int jobId,string filters=null)
        {
            switch (selectionMode)
            {
                case ReProcessJobSelectionMode.Selected:
                    {
                        var docidList = GetDocumentIdListFromFile(filePath, Constants.DocId);
                        foreach (var v in GetProductionDocumentListForIdList(
                            docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId))
                            yield return v;
                        break;
                    }
                case ReProcessJobSelectionMode.Csv:
                case ReProcessJobSelectionMode.CrossReference:
                    {
                        var dictIds = GetDocumentIdListFromFile(filePath, Constants.DCN, Constants.DocumentSetName);

                        //put all value in one list. Since there is only one production set, it should all be the same collectionId
                        var ids = new List<string>();
                        foreach (var dictId in dictIds)
                        {
                            ids.AddRange(dictId.Value);
                        }
                        foreach (var v in GetProductionDocumentListForIdList(
                            ids, Constants.DCN, matterId, baseJobConfig, redactableCollectionId, jobId)) yield return v;
                        break;
                    }
                case ReProcessJobSelectionMode.All:
                    IEnumerable<ReconversionProductionDocumentBEO> reconversionProductionDocumentBeos = null;
                    if (!string.IsNullOrEmpty(filters))
                    {
                        var documentVaultManager = new DocumentVaultManager();
                        documentVaultManager.Init(matterId);

                        IEnumerable<DocumentConversionLogBeo> documentConversionLogBeos =
                            documentVaultManager.GetConversionResultsWithFilters(matterId, jobId, null, null, filters
                                );
                        var docidList =
                            documentConversionLogBeos.Select(
                                documentConversionLogBeo =>
                                documentConversionLogBeo.DocId.ToString(CultureInfo.InvariantCulture)).ToList();
                        reconversionProductionDocumentBeos = GetProductionDocumentListForIdList(
                            docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId);
                    }
                    else
                    {
                        reconversionProductionDocumentBeos = GetProductionDocumentListForIdList
                            (
                                null, "ALL", matterId, baseJobConfig, redactableCollectionId, jobId);
                    }
                    if (reconversionProductionDocumentBeos == null) yield return null;
                    foreach (var reConversionProductionBeo in reconversionProductionDocumentBeos)
                        yield return reConversionProductionBeo;
                    break;
            }
        }
 /// <summary>
 ///  Get document count in Volume
 /// </summary>
 private int GetVolumeDocumentCount(string volumePath)
 {
     var docManager = new DocumentVaultManager();
     return docManager.GetVolumeDocumentCount(Convert.ToInt64(_mProductionDocumentDetail.MatterId), _mProductionDocumentDetail.ProductionCollectionId, volumePath);
 }
 /// <summary>
 ///     Get Document Control Number for Documents
 /// </summary>
 /// <param name="nearDuplicationResultDocuments"></param>
 /// <returns></returns>
 private List<DocumentMasterEntity> GetDocumentControlNumberForDocuments(
     IEnumerable<NearDuplicationResultInfo> nearDuplicationResultDocuments)
 {
     try
     {
         List<string> documentReferenceIds =
             nearDuplicationResultDocuments.Select(resultDocument => resultDocument.DocumentId).ToList();
         var documentVaultManager = new DocumentVaultManager();
         IEnumerable<DocumentMasterEntity> documentsDetailInfo =
             documentVaultManager.BulkGetDcnForDocuments(_jobParameter.MatterId,
                 _jobParameter.CollectionId, documentReferenceIds);
         return documentsDetailInfo.ToList();
     }
     catch (Exception ex)
     {
         ReportToDirector(ex);
         ex.Trace().Swallow();
     }
     return null;
 }
 /// <summary>
 ///     Update Fields in Database
 /// </summary>
 private bool UpdateNearDuplicationFieldsInDatabase()
 {
     bool status = false;
     try
     {
         Tracer.Info(
             "Near Duplication EV Update Worker: Update fields in database, started time {0} for job run id :{1}",
             DateTime.Now, PipelineId);
         var documentVaultManager = new DocumentVaultManager();
         status = documentVaultManager.BulkUpsertDocumentsFields(
             _jobParameter.MatterId.ToString(CultureInfo.InvariantCulture),
             _jobParameter.CollectionId, _documentsFields);
         Tracer.Info(
             "Near Duplication EV Update Worker: Update fields in database, completed time {0} for job run id :{1}",
             DateTime.Now, PipelineId);
     }
     catch (Exception ex)
     {
         ReportToDirector(ex);
         ex.Trace().Swallow();
     }
     return status;
 }
        /// <summary>
        /// Gets the reconversion document beos for job id.
        /// </summary>
        /// <param name="matterId">The matter id.</param>
        /// <param name="jobId">The job id.</param>
        /// <param name="filters">The filters.</param>
        /// <returns></returns>
        public static IEnumerable<ReconversionDocumentBEO> GetReconversionDocumentBeosForJobId(long matterId, long jobId,
                                                                                               string filters)
        {

            IDataReader dataReader = null;

            if (!string.IsNullOrEmpty(filters))
            {
                //user can filter the conversion results then do select all
                //filters has filter key : value with comma a delimiter
                var documentVaultManager = new DocumentVaultManager();
                documentVaultManager.Init(matterId);
                dataReader = documentVaultManager.GetConversionResultsDataReader(matterId, jobId, null, null, filters);
            }
            else
            {
                var evDbManager = new EVDbManager(matterId);
                const string sqlCommand =
                    @"SELECT dm.DocID,dm.DocTitle,dm.DocReferenceID, dm.CollectionID, ps.DCN ,T.DocText
                FROM [dbo].[DOC_ProcessSet] AS ps 
                INNER JOIN [dbo].[DOC_DocumentMaster] AS dm ON ps.[DocID] = dm.[DocID] 
                LEFT OUTER JOIN  dbo.DOC_DocumentText T ON DM.DocID = T.DocID AND T.TextTypeID = 2 
                WHERE ps.JobID = @JobID 
                ORDER BY  DM.DocTitle";
                var dbCommand = evDbManager.CreateTextCommand(sqlCommand);
                dbCommand.CommandTimeout = 0;
                evDbManager.AddInParameter(dbCommand, "JobID", DbType.Int64, jobId);
                dataReader = evDbManager.ExecuteDataReader(dbCommand);
            }

            Debug.Assert(dataReader!=null);
            ReconversionDocumentBEO reconversionDocumentBeo = null;
            while (dataReader.Read())
            {
                string docRefId = dataReader["DocReferenceID"].ToString();
                string collectionId = dataReader["CollectionID"].ToString();
                string dcn = dataReader["DCN"].ToString();

                //new document (need to check this due to that multiple rows are returned in case of one document with multiple file path associated)
                if (reconversionDocumentBeo == null ||
                    !docRefId.Equals(reconversionDocumentBeo.DocumentId) ||
                    !collectionId.Equals(reconversionDocumentBeo.CollectionId) ||
                    !dcn.Equals(reconversionDocumentBeo.DCNNumber))
                {

                    if (reconversionDocumentBeo != null)
                    {
                        //query sorts the results in DCN order
                        //accumulate the file list of the document (DCN) then yield
                        //Example:(DCN File1),(DCN,File2) and (DCN001, File3)
                        //yield DCN,<File1,File2,File3> 
                        yield return reconversionDocumentBeo;
                    }
                    reconversionDocumentBeo = new ReconversionDocumentBEO()
                                                  {
                                                      DocumentId = docRefId,
                                                      CollectionId = collectionId,
                                                      DCNNumber = dcn
                                                  };
                }
                reconversionDocumentBeo.FileList.Add(dataReader[Constants.ColumnDocText].ToString());
                //add file path to list of file path for the document

            }
            dataReader.Close();
            if (reconversionDocumentBeo != null) yield return reconversionDocumentBeo;
        }
        /// <summary>
        /// Tag the documents with not reviewed tag
        /// </summary>
        /// <param name="reviewsetRecord">Reviewset Record</param>
        /// <param name="tempList">List of documents added to reviewset</param>
        private void TagDocumentsNotReviewed(DocumentRecordCollection reviewsetRecord,
                                             List <ReviewsetDocumentBEO> tempList)
        {
            reviewsetRecord.ShouldNotBe(null);
            tempList.ShouldNotBe(null);
            var matterId     = reviewsetRecord.ReviewsetDetails.MatterId.ToString(CultureInfo.InvariantCulture);
            var collectionId = reviewsetRecord.ReviewsetDetails.CollectionId;

            //var currentUser = EVSessionManager.Get<UserSessionBEO>(Constants.UserSessionInfo);
            var documentTagObjects = new List <DocumentTagBEO>();

            var _binderDetail = BinderVaultManagerInstance.GetBinderSpecificDetails(matterId,
                                                                                    reviewsetRecord.ReviewsetDetails.BinderId);

            _binderDetail.ShouldNotBe(null);
            _binderDetail.NotReviewedTagId.ShouldBeGreaterThan(0);
            _binderDetail.ReviewedTagId.ShouldBeGreaterThan(0);
            reviewsetRecord.ReviewsetDetails.NotReviewedTagId = _binderDetail.NotReviewedTagId;
            reviewsetRecord.ReviewsetDetails.ReviewedTagId    = _binderDetail.ReviewedTagId;


            var docsInfo = ConvertToBulkDocumentInfoBEO(tempList);

            //dictionary to hold list of documents to update
            var documentList = docsInfo.ToDictionary(a => a.DocumentId, a => a);

            //get Effective Tags for the give tag
            var effectiveTagList =
                BulkTagBO.GetEfectiveTags(matterId, new Guid(collectionId), _binderDetail.BinderId,
                                          _binderDetail.NotReviewedTagId, Constants.One).ToList();

            var currentState = new List <DocumentTagBEO>();
            var newState     = new List <DocumentTagBEO>();

            //get the list of tags with current status for the documents to be tagged
            currentState.AddRange(DocumentVaultManager.GetDocumentTags(matterId, new Guid(collectionId),
                                                                       documentList.Keys.ToList()));
            //for every tag from the effective list of tags to be updated
            foreach (var tag in effectiveTagList)
            {
                newState.AddRange(
                    documentList.Values.Select(
                        x =>
                        new DocumentTagBEO
                {
                    TagId            = tag.TagId,
                    Status           = tag.TagState,
                    DocumentId       = x.DocumentId,
                    DCN              = x.DCN,
                    TagTypeSpecifier = tag.type,
                    TagName          = tag.TagName
                }));
            }

            //get all the documents that is not part of current documents list and update to vault
            var vaultChanges = newState.Except(currentState, new DocumentTagComparer()).Distinct().ToList();

            //Remove the entries that are already untagged but are marked for untagging
            vaultChanges.RemoveAll(document => document.Status == Constants.Untagged &&
                                   currentState.Exists(
                                       y =>
                                       y.TagId == document.TagId &&
                                       String.Compare(y.DocumentId, document.DocumentId,
                                                      StringComparison.OrdinalIgnoreCase) == 0) == false);

            /* The following statement will take the untagged documents in the new state and
             * make it as list of tagged documents so that except operator in the next statement
             * remove all the tagged documents in the current state that have
             * been untagged now.*/
            var newstateUntaggedDocuments = newState.Where(t => t.Status != Constants.Tagged).Select(t =>
                                                                                                     new DocumentTagBEO {
                TagId = t.TagId, DocumentId = t.DocumentId, Status = Constants.Tagged
            }).ToList();

            //Determine Tag changes to update in search index..This has to be supplied for IndexTaggerWorker to take care in search-engine
            var indexChanges = reviewsetRecord.DocumentTags = currentState.FindAll(currentStateOfDocument =>
                                                                                   (newstateUntaggedDocuments.Find(newStateOfDocument =>
                                                                                                                   currentStateOfDocument.TagId == newStateOfDocument.TagId &&
                                                                                                                   currentStateOfDocument.DocumentId == newStateOfDocument.DocumentId &&
                                                                                                                   currentStateOfDocument.Status == newStateOfDocument.Status) == null)).Union(newState).
                                                              Distinct(new DocumentTagBEO()).ToList();

            DocumentVaultManager.UpdateDocumentTags(matterId, new Guid(collectionId), _binderDetail.BinderId,
                                                    vaultChanges, indexChanges, _createdBy);
            Send(reviewsetRecord);
        }