Skip to content

Commit

Permalink
Translation memory actions
Browse files Browse the repository at this point in the history
  • Loading branch information
vitaliy-bezugly committed Mar 18, 2024
1 parent 5d3e515 commit c1101bc
Show file tree
Hide file tree
Showing 9 changed files with 216 additions and 0 deletions.
52 changes: 52 additions & 0 deletions Apps.Lionbridge/Actions/TranslationMemoryActions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using Apps.Lionbridge.Api;
using Apps.Lionbridge.Constants;
using Apps.Lionbridge.Extensions;
using Apps.Lionbridge.Models.Dtos;
using Apps.Lionbridge.Models.Requests.File;
using Apps.Lionbridge.Models.Requests.Job;
using Apps.Lionbridge.Models.Requests.TranslationMemory;
using Apps.Lionbridge.Models.Responses.TranslationMemory;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Actions;
using Blackbird.Applications.Sdk.Common.Invocation;
using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces;
using RestSharp;

namespace Apps.Lionbridge.Actions;

[ActionList]
public class TranslationMemoryActions(InvocationContext invocationContext, IFileManagementClient fileManagementClient)
: LionbridgeInvocable(invocationContext)
{
[Action("Add translation memory", Description = "Add a translation memory to a job")]
public async Task<TranslationMemoryResponse> AddTranslationMemory([ActionParameter] GetJobRequest request,
[ActionParameter] AddTranslationMemoryRequest addTranslationMemoryRequest,
[ActionParameter] AddSourceFileRequest fileRequest)
{
var uploadResponse = await UploadFmsFile(request.JobId, fileRequest, fileManagementClient);
string endpoint = $"{ApiEndpoints.Jobs}/{request.JobId}{ApiEndpoints.TranslationMemories}";
var extendedMetadata = EnumerableExtensions.ToDictionary(addTranslationMemoryRequest.ExtendedMetadataKeys, addTranslationMemoryRequest.ExtendedMetadataValues);

var apiRequest = new LionbridgeRequest(endpoint, Method.Post)
.AddJsonBody(new
{
fmsFileId = uploadResponse.FmsFileId,
sourceNativeLanguageCode = addTranslationMemoryRequest.SourceNativeLanguageCode,
targetNativeLanguageCode = addTranslationMemoryRequest.TargetNativeLanguageCode,
extendedMetadata = extendedMetadata
});

var dto = await Client.ExecuteWithErrorHandling<TranslationMemoryDto>(apiRequest);
return new TranslationMemoryResponse(dto);
}

[Action("Get translation memory", Description = "Get a translation memory.")]
public async Task<TranslationMemoryResponse> GetTranslationMemory(
[ActionParameter] GetTranslationMemoryRequest request)
{
string endpoint = $"{ApiEndpoints.Jobs}/{request.LionBridgeJobId}{ApiEndpoints.TranslationMemories}/{request.TmupdateId}";
var apiRequest = new LionbridgeRequest(endpoint);
var dto = await Client.ExecuteWithErrorHandling<TranslationMemoryDto>(apiRequest);
return new TranslationMemoryResponse(dto);
}
}
1 change: 1 addition & 0 deletions Apps.Lionbridge/Constants/ApiEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ public static class ApiEndpoints
public const string SourceFiles = "/sourcefiles";
public const string RetrieveFile = "/retrievefile";
public const string SupportAssets = "/supportassets";
public const string TranslationMemories = "/tmupdates";
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ public SupportAssetDataSourceHandler(InvocationContext invocationContext, [Actio
public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context,
CancellationToken cancellationToken)
{
if(string.IsNullOrEmpty(_jobId))
{
throw new InvalidOperationException("You should provide a Job ID first");
}

var endpoint = $"{ApiEndpoints.Jobs}/{_jobId}{ApiEndpoints.SupportAssets}";
var request = new LionbridgeRequest(endpoint);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Apps.Lionbridge.Api;
using Apps.Lionbridge.Constants;
using Apps.Lionbridge.Models.Requests.SupportAssets;
using Apps.Lionbridge.Models.Responses.TranslationMemory;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;

namespace Apps.Lionbridge.DataSourceHandlers;

public class TranslationMemoryDataSourceHandler : LionbridgeInvocable, IAsyncDataSourceHandler
{
private readonly string _jobId;

public TranslationMemoryDataSourceHandler(InvocationContext invocationContext,
[ActionParameter] GetSupportAssetRequest request) : base(invocationContext)
{
_jobId = request.LionBridgeJobId;
}

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context,
CancellationToken cancellationToken)
{
if(string.IsNullOrEmpty(_jobId))
{
throw new InvalidOperationException("You should provide a Job ID first");
}

var endpoint = $"{ApiEndpoints.Jobs}/{_jobId}{ApiEndpoints.TranslationMemories}";
var request = new LionbridgeRequest(endpoint);

var response = await Client.ExecuteWithErrorHandling<TranslationMemoriesResponse>(request);

return response.Embedded.tmupdates.Where(job =>
context.SearchString == null ||
job.FileName.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(job => job.TmupdateId, job => job.FileName);
}
}
30 changes: 30 additions & 0 deletions Apps.Lionbridge/Models/Dtos/TranslationMemoryDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using Newtonsoft.Json;

namespace Apps.Lionbridge.Models.Dtos;

public class TranslationMemoryDto
{
[JsonProperty("tmupdateId")]
public string TmupdateId { get; set; }

[JsonProperty("jobId")]
public string JobId { get; set; }

[JsonProperty("fileId")]
public string FileId { get; set; }

[JsonProperty("fileType")]
public string FileType { get; set; }

[JsonProperty("fileName")]
public string FileName { get; set; }

[JsonProperty("sourceNativeLanguageCode")]
public string SourceNativeLanguageCode { get; set; }

[JsonProperty("targetNativeLanguageCode")]
public string TargetNativeLanguageCode { get; set; }

[JsonProperty("extendedMetadata")]
public Dictionary<string, string> ExtendedMetadata { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Blackbird.Applications.Sdk.Common;

namespace Apps.Lionbridge.Models.Requests.TranslationMemory;

public class AddTranslationMemoryRequest
{
[Display("Source native language code")]
public string SourceNativeLanguageCode { get; set; }

[Display("Target native language code")]
public string TargetNativeLanguageCode { get; set; }

[Display("Extended metadata keys")]
public IEnumerable<string>? ExtendedMetadataKeys { get; set; }

[Display("Extended metadata values")]
public IEnumerable<string>? ExtendedMetadataValues { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using Apps.Lionbridge.DataSourceHandlers;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Dynamic;

namespace Apps.Lionbridge.Models.Requests.TranslationMemory;

public class GetTranslationMemoryRequest
{
[Display("Job ID"), DataSource(typeof(JobDataSourceHandler))]
public string LionBridgeJobId { get; set; }

[Display("TM update ID"), DataSource(typeof(TranslationMemoryDataSourceHandler))]
public string TmupdateId { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Apps.Lionbridge.Models.Dtos;

namespace Apps.Lionbridge.Models.Responses.TranslationMemory;

public class TranslationMemoriesResponse : EmbeddedItemsWrapper<TranslationMemoriesWrapper>
{

}

public record TranslationMemoriesWrapper(IEnumerable<TranslationMemoryDto> tmupdates);
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using Apps.Lionbridge.Models.Dtos;
using Blackbird.Applications.Sdk.Common;

namespace Apps.Lionbridge.Models.Responses.TranslationMemory;

public class TranslationMemoryResponse
{
[Display("TM update ID")]
public string TmupdateId { get; set; }

[Display("Job ID")]
public string JobId { get; set; }

[Display("File ID")]
public string FileId { get; set; }

[Display("File type")]
public string FileType { get; set; }

[Display("Filename")]
public string FileName { get; set; }

[Display("Source native language code")]
public string SourceNativeLanguageCode { get; set; }

[Display("Target native language code")]
public string TargetNativeLanguageCode { get; set; }

[Display("Extended metadata keys")]
public IEnumerable<string> ExtendedMetadataKeys { get; set; }

[Display("Extended metadata values")]
public IEnumerable<string> ExtendedMetadataValues { get; set; }

public TranslationMemoryResponse(TranslationMemoryDto translationMemoryDto)
{
TmupdateId = translationMemoryDto.TmupdateId;
JobId = translationMemoryDto.JobId;
FileId = translationMemoryDto.FileId;
FileType = translationMemoryDto.FileType;
FileName = translationMemoryDto.FileName;
SourceNativeLanguageCode = translationMemoryDto.SourceNativeLanguageCode;
TargetNativeLanguageCode = translationMemoryDto.TargetNativeLanguageCode;
ExtendedMetadataKeys = translationMemoryDto.ExtendedMetadata.Keys.ToArray();
ExtendedMetadataValues = translationMemoryDto.ExtendedMetadata.Values.ToArray();
}
}

0 comments on commit c1101bc

Please sign in to comment.