/// <summary> /// This is the main entry point of the application. /// </summary> /// <param name="args">Contains an array of command line arguments.</param> public static void Main(string[] args) { string resourceUrl = CommandLine.Parameters.ContainsKey("resourceUrl") ? CommandLine.Parameters["resourceUrl"].ConvertToString() : string.Empty; string authorityUri = CommandLine.Parameters.ContainsKey("authorityUri") ? CommandLine.Parameters["authorityUri"].ConvertToString() : string.Empty; string userName = CommandLine.Parameters.ContainsKey("userName") ? CommandLine.Parameters["userName"].ConvertToString() : string.Empty; string password = CommandLine.Parameters.ContainsKey("password") ? CommandLine.Parameters["password"].ConvertToString() : string.Empty; string clientSecret = CommandLine.Parameters.ContainsKey("clientSecret") ? CommandLine.Parameters["clientSecret"].ConvertToString() : string.Empty; string clientId = CommandLine.Parameters.ContainsKey("clientId") ? CommandLine.Parameters["clientId"].ConvertToString() : string.Empty; string zipFile = CommandLine.Parameters.ContainsKey("zipfile") ? CommandLine.Parameters["zipfile"].ConvertToString() : string.Empty; long folderId = CommandLine.Parameters.ContainsKey("folderid") ? CommandLine.Parameters["folderid"].ToLong() : 0; long componentId = CommandLine.Parameters.ContainsKey("componentid") ? CommandLine.Parameters["componentid"].ToLong() : 0; string version = Assembly.GetEntryAssembly()?.GetCustomAttribute <TargetFrameworkAttribute>()?.FrameworkName; Console.WriteLine($"Inspire SDK Test Client - Target Framework {version}"); Console.WriteLine($"resourceUrl: {resourceUrl}"); Console.WriteLine($"authorityUri: {authorityUri}"); Console.WriteLine($"userName: {userName}"); Console.WriteLine($"password: {password}"); Console.WriteLine($"clientSecret: {clientSecret}"); Console.WriteLine($"clientId: {clientId}"); Console.WriteLine($"zipFile: {zipFile}"); Console.WriteLine($"folderId: {folderId}"); Console.WriteLine($"componentId: {componentId}"); // create a new inspire client configuration InspireClientConfiguration config = new InspireClientConfiguration( clientId, ClientAuthenticationMethods.ResourceOwnerPassword, authorityUri, resourceUrl, clientSecret, userName, password); if (componentId > 0) { // Test GetComponentContent using (InspireClient client = new InspireClient(config)) { if (AsyncHelper.RunSync(() => client.AuthenticateAsync())) { Console.WriteLine("Begin Calling GetComponentContent."); byte[] bytes = client.GetComponentContent(componentId); UTF8Encoding utf8 = new UTF8Encoding(true, true); Console.WriteLine(utf8.GetString(bytes, 0, bytes.Length)); Console.WriteLine("End Calling GetComponentContent."); } } Console.WriteLine("Press any key to continue."); Console.ReadKey(); } if (File.Exists(zipFile)) { Console.WriteLine($"Attempt to import the file \"{zipFile}\" to folder id: {folderId}"); using (InspireClient client = new InspireClient(config)) { if (AsyncHelper.RunSync(() => client.AuthenticateAsync())) { FileInfo zipFileInfo = new FileInfo(zipFile); List <IFormFile> formFiles = new List <IFormFile>(); List <ImportRequestFileModel> importFiles = new List <ImportRequestFileModel>(); ImportRequestFileModel file = new ImportRequestFileModel(); file.FileName = zipFileInfo.Name; file.UnzipFile = true; importFiles.Add(file); using (var stream = File.OpenRead(zipFile)) { string fileName = Path.GetFileName(stream.Name); string formFieldName = "Files"; formFiles.Add( new FormFile(stream, 0, stream.Length, formFieldName, fileName) { Headers = new HeaderDictionary(), ContentDisposition = $"form-data; name=\"{formFieldName}\"; filename=\"{fileName}\"", ContentType = "application/octet-stream" }); } ImportRequestModel model = new ImportRequestModel { Files = formFiles, ImportFiles = importFiles, FolderId = 0, ProjectFolderId = 0 }; List <string> filePaths = new List <string>(); filePaths.Add(zipFile); MinimalWorkerStateModel <MinimalImportStateModel> importState = client.ImportComponents(model, filePaths); WorkerStatus status = importState.Status; while (status != WorkerStatus.Complete && status != WorkerStatus.Failed) { MinimalWorkerStateModel <MinimalImportStateModel> importState2 = client.FindImportState(importState.Key); status = importState2.Status; Console.WriteLine(" status: {0}, {1}", status, importState2.Message); Thread.Sleep(10000); } Console.WriteLine("Done"); } } Console.WriteLine("Press any key to continue."); Console.ReadKey(); } else { using (InspireClient client = new InspireClient(config)) { if (AsyncHelper.RunSync(() => client.AuthenticateAsync())) { Console.WriteLine("Attempt to test Import with No Files"); ImportRequestModel model = new ImportRequestModel { Files = new List <IFormFile>(), ImportFiles = new List <ImportRequestFileModel>(), FolderId = 0, ProjectFolderId = 0 }; MinimalWorkerStateModel <MinimalImportStateModel> importState = client.ImportComponents(model, new List <string>()); if (importState == null) { var errorModel = client.LastErrorResponse; if (errorModel != null) { var errorMessages = errorModel.Messages.FirstOrDefault(); Console.WriteLine(" status: {0}, {1}", "Failed", errorMessages.Message); } else { Console.WriteLine(" status: {0}, {1}", "Failed", "Last Error Response is Null"); } } else { WorkerStatus status = importState.Status; while (status != WorkerStatus.Complete && status != WorkerStatus.Failed) { MinimalWorkerStateModel <MinimalImportStateModel> importState2 = client.FindImportState(importState.Key); status = importState2.Status; Console.WriteLine(" status: {0}, {1}", status, importState2.Message); Thread.Sleep(10000); } var errorMessage = importState.Issues.FirstOrDefault(); Console.WriteLine(" status: {0}, {1}", status, errorMessage.Message); } } } Console.WriteLine("Press any key to continue."); Console.ReadKey(); } // create a new inspire client which will authenticate automatically. using (InspireClient client = new InspireClient(config)) { try { // get app information for the target resource var appInfo = client.RetrieveAppInfo(); if (appInfo != null) { // display the application information found. var appInfoValue = JsonConvert.SerializeObject(appInfo, Formatting.Indented); Console.WriteLine("Application Information:" + Environment.NewLine + "--------------"); Console.WriteLine(appInfoValue); // call the authentication routine... if (AsyncHelper.RunSync(() => client.AuthenticateAsync())) { Console.WriteLine("Authentication Success!"); // get all users defined in the system var usersList = client.RetrieveUsers(); Console.WriteLine("Users:" + Environment.NewLine + "--------------"); if (usersList != null && usersList.Any()) { Console.WriteLine(JsonConvert.SerializeObject(usersList, Formatting.Indented)); } else { Console.WriteLine("No users found."); } Console.WriteLine("Press any key to continue."); Console.ReadKey(); // get all of the current user's projects var myProjects = client.RetrieveProjects(); Console.WriteLine("My Projects:" + Environment.NewLine + "--------------"); if (myProjects != null && myProjects.Any()) { myProjects.ForEach(project => { Console.WriteLine(project.Title); }); } else { Console.WriteLine("No assigned projects found."); } Console.WriteLine("Press any key to continue."); Console.ReadKey(); var componentTypes = client.RetrieveComponentTypes(); Console.WriteLine("Component Types:" + Environment.NewLine + "--------------"); if (componentTypes != null && componentTypes.Any()) { componentTypes.ForEach(componentType => { Console.WriteLine($"{componentType.Name} | {componentType.DocumentType} | {componentType.Description}"); }); } else { Console.WriteLine("No component types found."); } Console.WriteLine("Press any key to continue."); Console.ReadKey(); var folders = client.FindFoldersByFolderId(0, true, Vasont.Inspire.Models.Security.PermissionFlags.All); Console.WriteLine("Folders:" + Environment.NewLine + "--------------"); if (folders != null && folders.Any()) { folders.ForEach(folder => { Console.WriteLine($"{folder.FolderId} | {folder.Name} | {folder.Description}"); }); } else { Console.WriteLine("No folders found."); } Console.WriteLine("Press any key to continue."); Console.ReadKey(); var translationVendors = client.RetrieveTranslationVendors(); Console.WriteLine("Translation Vendors:" + Environment.NewLine + "--------------"); if (translationVendors != null && translationVendors.Any()) { translationVendors.ForEach(translationVendor => { Console.WriteLine($"{translationVendor.TranslationVendorId} | {translationVendor.Name} | {translationVendor.Description}"); }); } else { Console.WriteLine("No translation vendors found."); } Console.WriteLine("Press any key to continue."); Console.ReadKey(); // Test Translation Integration methods var model = new TranslationIntegrationModel { DisplayName = "Test Translation Integration", Description = "Testing Translation Integration records via SDK", IntegrationMethod = IntegrationMethodType.Manual, CreatedDate = DateTime.UtcNow, CreatedBy = 1, Active = true, ConfigurationJson = string.Empty }; // Create new Translation Integration record model = client.CreateTranslationIntegration(model); if (model.TranslationIntegrationId > 0) { Console.WriteLine($"Creation of Translation Integration record successful with identity '{model.TranslationIntegrationId}'"); // Query for it by ID var findModel = client.FindTranslationIntegration(model.TranslationIntegrationId); if (findModel != null && findModel.TranslationIntegrationId > 0) { Console.WriteLine($"Found a Translation Integration record with identifier '{model.TranslationIntegrationId}'"); Console.WriteLine(JsonConvert.SerializeObject(findModel)); string updateName = "Testing Updating Translation Integration"; findModel.DisplayName = updateName; findModel = client.UpdateTranslationIntegration(findModel); // Check the display name on the returned model if (findModel.DisplayName.Equals(updateName)) { // Get the model from the sdk again to be sure it updated in the database findModel = client.FindTranslationIntegration(model.TranslationIntegrationId); if (findModel.DisplayName.Equals(updateName)) { Console.WriteLine($"Successfully Updated Translation Integration record"); } else { Console.WriteLine($"Failed to update the Translation Integration record"); } } else { Console.WriteLine($"Failed to update the Translation Integration record"); } Console.WriteLine("Press any key to continue."); Console.ReadKey(); // Find all Translation Integrations var allTranslationIntegrations = client.FindTranslationIntegrations(false); if (allTranslationIntegrations != null && allTranslationIntegrations.TranslationIntegrations.Any()) { Console.WriteLine($"Translation Integrations found. {Environment.NewLine} Id | Name | Description"); allTranslationIntegrations.TranslationIntegrations.ForEach(translationIntegration => { Console.WriteLine($"{translationIntegration.TranslationIntegrationId} | {translationIntegration.DisplayName} | {translationIntegration.Description}"); }); } else { Console.WriteLine("No Translation Integrations found."); } // Delete the test record if (client.DeleteTranslationIntegration(findModel.TranslationIntegrationId)) { Console.WriteLine($"Successfully deleted the Translation Integration record with identity '{findModel.TranslationIntegrationId}'"); } else { Console.WriteLine($"Failed to delete the Translation Integration record"); } } else { Console.WriteLine($"Failed to find a Translation Integration record with identifier '{model.TranslationIntegrationId}'"); } } else { Console.WriteLine($"Failed to create a Translation Integration record"); } } else if (client.HasError) { Console.WriteLine("Authentication Failed! Reason = :" + Environment.NewLine + client.LastErrorResponse); } } } catch (InspireClientException inEx) { Console.WriteLine("Error: " + inEx.Message); } } // wait Console.WriteLine("Press any key to close the console."); Console.ReadKey(); }