public void SearchDocument_DocumentIdNull_Exception() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.Version = version; var searchDocumentResponse = Fixture.Create <SearchDocumentResponse>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearch(searchDocumentRequest, LoggerId); Assert.IsTrue(searchDocumentRequest2.ErrorMessage == string.Format(ErrorMessage.ValueEmpty, SpoConstants.DocumentId)); }
public void SearchDocument_AllOldVersions() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.DocumentId = documentId; var searchDocumentResponse = Fixture.Create <SearchDocumentAllMetaDataVersions>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearchAllOldVersions(searchDocumentRequest, LoggerId); Assert.IsTrue(string.IsNullOrEmpty(searchDocumentRequest2.ErrorMessage)); }
public void SearchDocument_AllOldVersions_FileNotFound_Exception() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.DocumentId = Fixture.Create <Guid>(); var searchDocumentResponse = Fixture.Create <SearchDocumentAllMetaDataVersions>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearchAllOldVersions(searchDocumentRequest, LoggerId); Assert.IsTrue(searchDocumentRequest2.ErrorMessage == ErrorMessage.FileNotFound); }
public void SearchDocument_OldVersion_VersionString() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.DocumentId = documentId; searchDocumentRequest.Version = Fixture.Create <string>(); var searchDocumentResponse = Fixture.Create <SearchDocumentResponse>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearch(searchDocumentRequest, LoggerId); Assert.IsTrue(searchDocumentRequest2.ErrorMessage == ErrorMessage.FileNotFound); }
public void SearchDocument_GreaterVersionProvided_Exception() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.DocumentId = documentId; searchDocumentRequest.Version = "5.0"; var searchDocumentResponse = Fixture.Create <SearchDocumentResponse>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearch(searchDocumentRequest, LoggerId); Assert.IsTrue(searchDocumentRequest2.ErrorMessage == ErrorMessage.GreaterVersionProvided); }
public void SearchDocument_OldVersion_VersionDecimal() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.DocumentId = documentId; searchDocumentRequest.Version = "1.0"; var searchDocumentResponse = Fixture.Create <SearchDocumentResponse>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearch(searchDocumentRequest, LoggerId); Assert.IsTrue(string.IsNullOrEmpty(searchDocumentRequest2.ErrorMessage)); }
public void SearchDocument_FileNotFound_Exception() { var searchDocumentRequest = new SearchDocumentRequest(); searchDocumentRequest.DocumentId = Fixture.Create <Guid>(); searchDocumentRequest.Version = Fixture.Create <decimal>().ToString(); var searchDocumentResponse = Fixture.Create <SearchDocumentResponse>(); var ddmsSearchDocument = Substitute.For <DDMSSearchDocument>(); var searchDocumentRequest2 = ddmsSearchDocument.DDMSSearch(searchDocumentRequest, LoggerId); Assert.IsTrue(searchDocumentRequest2.ErrorMessage == ErrorMessage.FileNotFound); }
/// <summary> /// Method to retrieve a document based on specific version /// </summary> /// <param name="clientContext">SPO Client Context</param> /// <param name="searchDocumentRequest">Request Model for Search Operation</param> /// <param name="LoggerId">Message Id used for logging information</param> /// <returns></returns> private SearchDocumentResponse SearchDocument(ClientContext clientContext, SearchDocumentRequest searchDocumentRequest, string LoggerId) { SearchDocumentResponse searchDocumentResponse = new SearchDocumentResponse(); int requestedVersion = 0, currentResponseVersion = 0; try { Log.DebugFormat("In SearchDocument method before calling SearchDocumentCurrentVersion for MessageId - {0}", LoggerId); //Check if version passed in request is latest published version searchDocumentResponse = SearchDocumentCurrentVersion(clientContext, searchDocumentRequest, LoggerId); Log.DebugFormat("In SearchDocument method after calling SearchDocumentCurrentVersion for MessageId - {0}", LoggerId); if (string.IsNullOrEmpty(searchDocumentResponse.ErrorMessage)) { //Get the version in SPO format from request requestedVersion = GetVersionNumber(searchDocumentRequest.Version, LoggerId); //Get the version in SPO format from latest published document currentResponseVersion = GetVersionNumber(searchDocumentResponse.Version, LoggerId); if (requestedVersion <= currentResponseVersion) { Log.DebugFormat("Before calling SearchDocumentByVersion method - requested version is less than major version for MessageId - {0}", LoggerId); //if the version passed in request is not the latest published version if (requestedVersion != currentResponseVersion) { //Get the previous version document content searchDocumentResponse = SearchDocumentByVersion(clientContext, searchDocumentRequest, requestedVersion, LoggerId); } } else { searchDocumentResponse = null; searchDocumentResponse = new SearchDocumentResponse() { ErrorMessage = ErrorMessage.GreaterVersionProvided }; } } Log.DebugFormat("Out SearchDocument method for MessageId - {0}", LoggerId); } catch (Exception ex) { Log.ErrorFormat("Exception in SearchDocument method for MessageId - {0} :{1}", LoggerId, ex.Message); searchDocumentResponse.ErrorMessage = ex.Message; } return(searchDocumentResponse); }
/// <summary> /// Method to Search a document /// </summary> /// <param name="searchDocumentRequest">Request model for Search operation</param> /// <param name="LoggerId">Message Id used for logging information</param> /// <returns></returns> public SearchDocumentResponse DDMSSearch(SearchDocumentRequest searchDocumentRequest, string LoggerId) { SearchDocumentResponse searchDocumentResponse = new SearchDocumentResponse(); SecureString secureString = null; try { Log.DebugFormat("In DDMSSearch method for MessageId - {0}", LoggerId); if (searchDocumentRequest.DocumentId != Guid.Empty) { using (ClientContext clientContext = new ClientContext(ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOSiteURL))) { //Get SPO Credentials secureString = new NetworkCredential("", CommonHelper.Decrypt(ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOPassword), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOPasswordKey), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOPasswordIv))).SecurePassword; //Decrypt the user name and password information String username = CommonHelper.Decrypt(ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOUserName), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOUserNameKey), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOUserNameIv)); clientContext.Credentials = new SharePointOnlineCredentials(username, secureString); if ((!string.IsNullOrEmpty(searchDocumentRequest.Version) && !string.IsNullOrWhiteSpace(searchDocumentRequest.Version))) { //if version number is passed in request object searchDocumentResponse = SearchDocument(clientContext, searchDocumentRequest, LoggerId); } } } else { Log.DebugFormat("In DDMSSearch method DocumentId is empty for MessageId - {0}", LoggerId); searchDocumentResponse.ErrorMessage = string.Format(ErrorMessage.ValueEmpty, SpoConstants.DocumentId); } Log.DebugFormat("Out of DDMSSearch method for MessageId - {0}", LoggerId); } catch (Exception e) { Log.ErrorFormat("Exception in DDMSSearch method for MessageId - {0} :{1}", LoggerId, e.Message); searchDocumentResponse.ErrorMessage = e.Message; } return(searchDocumentResponse); }
public IEnumerable <SearchDocumentResponse> Get([FromUri] SearchDocumentRequest value) { var userIdentity = (PublicationsIdentity)HttpContext.Current.User.Identity; return(Mapper.Map <System.Collections.Generic.IEnumerable <SearchDocumentResponse> >(_documentService.SearchDocuments(value.SearchingTerm, value.ParentFolderID, userIdentity.UserID))); }
/// <summary> /// Method to fetch all the versions metadata /// </summary> /// <param name="searchDocumentRequest">Request model for Search Operation</param> /// <param name="LoggerId">Message Id used for logging information</param> /// <returns></returns> public SearchDocumentAllMetaDataVersions DDMSSearchAllOldVersions(SearchDocumentRequest searchDocumentRequest, string LoggerId) { SearchDocumentAllMetaDataVersions searchDocumentAllMetaDataVersions = new SearchDocumentAllMetaDataVersions(); //create a list of search response List <SearchDocumentAllVersionsResponse> listSearchDocumentResponse = new List <SearchDocumentAllVersionsResponse>(); SecureString secureString = null; try { Log.DebugFormat("In DDMSSearchAllOldVersions method for MessageId - {0}", LoggerId); using (ClientContext clientContext = new ClientContext(ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOSiteURL))) { //Get SPO credentials secureString = new NetworkCredential("", CommonHelper.Decrypt(ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOPassword), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOPasswordKey), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOPasswordIv))).SecurePassword; //Decrypt the user name and password information String username = CommonHelper.Decrypt(ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOUserName), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOUserNameKey), ConfigurationManager.AppSettings.Get(ConfigurationConstants.SPOUserNameIv)); clientContext.Credentials = new SharePointOnlineCredentials(username, secureString); //retrieve file based on DocumentId Microsoft.SharePoint.Client.File file = clientContext.Web.GetFileById(searchDocumentRequest.DocumentId); //load list item fields ListItem listItem = file.ListItemAllFields; //load all the list item versions ListItemVersionCollection versions = listItem.Versions; clientContext.Load(file); //fetch the specific metadata clientContext.Load(listItem, item => item[SpoConstants.Name], item => item[SpoConstants.DealerNumber], item => item[SpoConstants.RequestUser], item => item[SpoConstants.Version]); clientContext.Load(versions); clientContext.ExecuteQueryWithRetry(Convert.ToInt32(ConfigurationManager.AppSettings.Get(ExecuteQueryConstants.RetryCount)), Convert.ToInt32(ConfigurationManager.AppSettings.Get(ExecuteQueryConstants.RetryDelayTime)), LoggerId); Log.DebugFormat("In DDMSSearchAllOldVersions method after ExecuteQueryWithRetry for MessageId - {0}", LoggerId); //loop through all versions and fetch metadata foreach (var version in versions) { //assign the metadata of each version to search document response model SearchDocumentAllVersionsResponse searchDocumentResponse = new SearchDocumentAllVersionsResponse(); foreach (var item in version.FieldValues) { if (item.Key == SpoConstants.Name && item.Value != null) { searchDocumentResponse.DocumentName = item.Value.ToString(); } if (item.Key == SpoConstants.DealerNumber && item.Value != null) { searchDocumentResponse.DealerNumber = item.Value.ToString(); } if (item.Key == SpoConstants.RequestUser && item.Value != null) { searchDocumentResponse.RequestUser = item.Value.ToString(); } if (item.Key == SpoConstants.Version && item.Value != null) { searchDocumentResponse.Version = item.Value.ToString(); } } listSearchDocumentResponse.Add(searchDocumentResponse); } } Log.DebugFormat("Out of DDMSSearchAllOldVersions method for MessageId - {0}", LoggerId); searchDocumentAllMetaDataVersions.SearchMetadata = listSearchDocumentResponse; } catch (WebException e) when(e.Status == WebExceptionStatus.NameResolutionFailure) { Log.ErrorFormat("WebException in DDMSSearchAllOldVersions method for MessageId - {0} :{1}", LoggerId, e.Message); searchDocumentAllMetaDataVersions.ErrorMessage = ErrorMessage.RemoteName; } catch (ServerException ex) { Log.ErrorFormat("ServerException in DDMSSearchAllOldVersions method for MessageId - {0} :{1}", LoggerId, ex.Message); if (ex.ServerErrorTypeName == ErrorException.SystemIoFileNotFound) { searchDocumentAllMetaDataVersions.ErrorMessage = ErrorMessage.FileNotFound; } else { searchDocumentAllMetaDataVersions.ErrorMessage = ex.Message; } } catch (Exception ex) { Log.ErrorFormat("Exception in DDMSSearchAllOldVersions method for MessageId - {0} :{1}", LoggerId, ex.Message); searchDocumentAllMetaDataVersions.ErrorMessage = ex.Message; } return(searchDocumentAllMetaDataVersions); }
/// <summary> /// Method to retrieve document if it is latest published version /// </summary> /// <param name="clientContext">SPO Client Context</param> /// <param name="searchDocumentRequest">Request model for Search Operation</param> /// <param name="LoggerId">Message Id used for logging information</param> /// <returns></returns> private SearchDocumentResponse SearchDocumentCurrentVersion(ClientContext clientContext, SearchDocumentRequest searchDocumentRequest, string LoggerId) { SearchDocumentResponse searchDocumentResponse = new SearchDocumentResponse(); try { Log.DebugFormat("In SearchDocumentCurrentVersion method for MessageId - {0}", LoggerId); //Retrieve file based on documentid Microsoft.SharePoint.Client.File file = clientContext.Web.GetFileById(searchDocumentRequest.DocumentId); //Fetch the list item fields ListItem oListItem = file.ListItemAllFields; clientContext.Load(file); //Load the specific metadata of the file clientContext.Load(oListItem, item => item[SpoConstants.Name], item => item[SpoConstants.DealerNumber], item => item[SpoConstants.RequestUser], item => item[SpoConstants.Version]); ClientResult <Stream> clientResult = file.OpenBinaryStream(); clientContext.ExecuteQueryWithRetry(Convert.ToInt32(ConfigurationManager.AppSettings.Get(ExecuteQueryConstants.RetryCount)), Convert.ToInt32(ConfigurationManager.AppSettings.Get(ExecuteQueryConstants.RetryDelayTime)), LoggerId); Log.DebugFormat("In SearchDocumentCurrentVersion after ExecuteQueryWithRetry method for MessageId - {0}", LoggerId); using (MemoryStream mStream = new MemoryStream()) { if (clientResult != null) { clientResult.Value.CopyTo(mStream); //Read the file content and assign to response model searchDocumentResponse.DocumentContent = mStream.ToArray(); searchDocumentResponse.DocumentName = file.Name.ToString(); //Add file metadata in search response foreach (var item in oListItem.FieldValues) { if (item.Key == SpoConstants.Name && item.Value != null) { searchDocumentResponse.DocumentName = item.Value.ToString(); } if (item.Key == SpoConstants.DealerNumber && item.Value != null) { searchDocumentResponse.DealerNumber = item.Value.ToString(); } if (item.Key == SpoConstants.RequestUser && item.Value != null) { searchDocumentResponse.RequestUser = item.Value.ToString(); } if (item.Key == SpoConstants.Version && item.Value != null) { searchDocumentResponse.Version = item.Value.ToString(); } } } } Log.DebugFormat("Out of SearchDocumentCurrentVersion method for MessageId - {0}", LoggerId); } catch (WebException e) when(e.Status == WebExceptionStatus.NameResolutionFailure) { Log.ErrorFormat("WebException in SearchDocumentCurrentVersion method for MessageId - {0} :{1}", LoggerId, e.Message); searchDocumentResponse.ErrorMessage = ErrorMessage.RemoteName; } catch (ServerException ex) { Log.ErrorFormat("ServerException in SearchDocumentCurrentVersion method for MessageId - {0} :{1}", LoggerId, ex.Message); if (ex.ServerErrorTypeName == ErrorException.SystemIoFileNotFound) { searchDocumentResponse.ErrorMessage = ErrorMessage.FileNotFound; } else { searchDocumentResponse.ErrorMessage = ex.Message; } } catch (Exception ex) { Log.ErrorFormat("Exception in SearchDocumentCurrentVersion method for MessageId - {0} :{1}", LoggerId, ex.Message); searchDocumentResponse.ErrorMessage = ex.Message; } return(searchDocumentResponse); }
public IHttpActionResult SearchDocument(Guid documentId, string version = null) { Guid messageId; Dictionary <string, dynamic> keyValuePairs; //Retrieve the header parameters from request object RetrieveHeaders(out keyValuePairs, out messageId); SearchDocumentRequest searchDocumentRequest = new SearchDocumentRequest(); SearchDocumentResponse searchDocumentResponse = new SearchDocumentResponse(); try { Log.DebugFormat("In api/SearchDocument method for MessageId - {0}", messageId.ToString()); searchDocumentRequest.DocumentId = documentId; searchDocumentRequest.Version = version; if (searchDocumentRequest.DocumentId != Guid.Empty) { //If documentid is not empty and version number is not passed retrieve the document metadata if ((string.IsNullOrEmpty(searchDocumentRequest.Version) || string.IsNullOrWhiteSpace(searchDocumentRequest.Version))) { //Create a new SearchDocumentAllMetadataVersions model object SearchDocumentAllMetaDataVersions searchDocumentAllMetaDataVersions = new SearchDocumentAllMetaDataVersions(); try { Log.DebugFormat("In api/SearchDocument, before calling DDMSSearchAllOldVersions method for MessageId - {0} Document ID :{1}", messageId.ToString(), searchDocumentRequest.DocumentId.ToString()); //To fetch document metadata for all versions searchDocumentAllMetaDataVersions = ddmsSearchDocument.DDMSSearchAllOldVersions(searchDocumentRequest, messageId.ToString()); Log.DebugFormat("In api/SearchDocument, after calling DDMSSearchAllOldVersions method for MessageId - {0} Document ID :{1}", messageId.ToString(), searchDocumentRequest.DocumentId.ToString()); if (string.IsNullOrEmpty(searchDocumentAllMetaDataVersions.ErrorMessage)) { //Add headers to response message keyValuePairs.Add(HeaderConstants.ErrorCode, (int)HttpStatusCode.OK); keyValuePairs.Add(HeaderConstants.Status, HeaderValueConstants.Success); foreach (var field in keyValuePairs) { if (!string.IsNullOrEmpty(field.Value.ToString()) && !string.IsNullOrWhiteSpace(field.Value.ToString())) { HttpContext.Current.Response.Headers.Add(field.Key, field.Value.ToString()); } } return(Content(HttpStatusCode.OK, searchDocumentAllMetaDataVersions)); } //Search based on documentid is not successful - file not found if (searchDocumentAllMetaDataVersions.ErrorMessage == ErrorMessage.FileNotFound) { AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.NotFound, ErrorMessage.FileNotFound); return(Content(HttpStatusCode.NotFound, searchDocumentAllMetaDataVersions)); } else { //Any other failures/exceptions in search functionality AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.InternalServerError, searchDocumentAllMetaDataVersions.ErrorMessage); return(Content(HttpStatusCode.InternalServerError, searchDocumentAllMetaDataVersions)); } } catch (Exception e) { Log.ErrorFormat("Error in api/SearchDocument DDMSSearch method for MessageId - {0} :{ 1}", messageId.ToString(), e.Message); searchDocumentAllMetaDataVersions.ErrorMessage = e.Message; AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.InternalServerError, searchDocumentAllMetaDataVersions.ErrorMessage); return(Content(HttpStatusCode.InternalServerError, searchDocumentAllMetaDataVersions)); } } try { Log.DebugFormat("In api/SearchDocument, before calling DDMSSearch method for MessageId - {0} - Document ID :{1} Version :{2}", messageId.ToString(), searchDocumentRequest.DocumentId.ToString(), searchDocumentRequest.Version); //Fetch the document based on documentid and version number searchDocumentResponse = ddmsSearchDocument.DDMSSearch(searchDocumentRequest, messageId.ToString()); Log.DebugFormat("In api/SearchDocument, after calling DDMSSearch method for MessageId - {0} - Document ID :{1} Version :{2}", messageId.ToString(), searchDocumentRequest.DocumentId.ToString(), searchDocumentRequest.Version); if (string.IsNullOrEmpty(searchDocumentResponse.ErrorMessage)) { keyValuePairs.Add(HeaderConstants.ErrorCode, (int)HttpStatusCode.OK); keyValuePairs.Add(HeaderConstants.Status, HeaderValueConstants.Success); foreach (var field in keyValuePairs) { if (!string.IsNullOrEmpty(field.Value.ToString()) && !string.IsNullOrWhiteSpace(field.Value.ToString())) { HttpContext.Current.Response.Headers.Add(field.Key, field.Value.ToString()); } } return(Content(HttpStatusCode.OK, searchDocumentResponse)); } //Add error response file not found if (searchDocumentResponse.ErrorMessage == ErrorMessage.FileNotFound) { AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.NotFound, ErrorMessage.FileNotFound); return(Content(HttpStatusCode.NotFound, searchDocumentResponse)); } else { AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.InternalServerError, searchDocumentResponse.ErrorMessage); return(Content(HttpStatusCode.InternalServerError, searchDocumentResponse)); } } catch (Exception ex) { Log.ErrorFormat("Error in api/SearchDocument DDMSSearch method for MessageId - {0} :{1}", messageId.ToString(), ex.Message); searchDocumentResponse.ErrorMessage = ex.Message; AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.InternalServerError, searchDocumentResponse.ErrorMessage); return(Content(HttpStatusCode.InternalServerError, searchDocumentResponse)); } } else { Log.DebugFormat("In api/SearchDocument, DocumentId is empty for MessageId - {0} - Document ID :{1}", messageId.ToString(), searchDocumentRequest.DocumentId.ToString()); AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.InternalServerError, string.Format(ErrorMessage.ValueEmpty, "documentId")); return(Content(HttpStatusCode.BadRequest, string.Format(ErrorMessage.ValueEmpty, "documentId"))); } } catch (Exception ex) { Log.ErrorFormat("Error in api/SearchDocument for MessageId - {0} :{1}", messageId.ToString(), ex.Message); AddErrorResponseHeaders(keyValuePairs, (int)HttpStatusCode.InternalServerError, ex.Message); return(Content(HttpStatusCode.InternalServerError, ex.Message)); } }