Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions backend/FwLite/FwDataMiniLcmBridge/Api/FwDataMiniLcmApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,11 @@ internal SemanticDomain FromLcmSemanticDomain(ICmSemanticDomain semanticDomain)
{
Id = semanticDomain.Guid,
Name = FromLcmMultiString(semanticDomain.Name),
Abbreviation = FromLcmMultiString(semanticDomain.Abbreviation),
Code = LcmHelpers.GetSemanticDomainCode(semanticDomain),
Description = FromLcmMultiString(semanticDomain.Description),
OcmCodes = semanticDomain.OcmCodes ?? string.Empty,
LouwNidaCodes = semanticDomain.LouwNidaCodes ?? string.Empty,
Predefined = CanonicalGuidsSemanticDomain.CanonicalSemDomGuids.Contains(semanticDomain.Guid),
};
}
Expand Down Expand Up @@ -456,10 +460,11 @@ public async Task<SemanticDomain> CreateSemanticDomain(SemanticDomain semanticDo
{
var lcmSemanticDomain = Cache.ServiceLocator.GetInstance<ICmSemanticDomainFactory>()
.Create(semanticDomain.Id, Cache.LangProject.SemanticDomainListOA);
lcmSemanticDomain.OcmCodes = semanticDomain.Code;
UpdateLcmMultiString(lcmSemanticDomain.Name, semanticDomain.Name);
// TODO: Find out if semantic domains are guaranteed to have an "en" writing system, or if we should use lcmCache.DefautlAnalWs instead
UpdateLcmMultiString(lcmSemanticDomain.Abbreviation, new MultiString(){{"en", semanticDomain.Code}});
UpdateLcmMultiString(lcmSemanticDomain.Abbreviation, semanticDomain.Abbreviation);
UpdateLcmMultiString(lcmSemanticDomain.Description, semanticDomain.Description);
lcmSemanticDomain.OcmCodes = semanticDomain.OcmCodes;
lcmSemanticDomain.LouwNidaCodes = semanticDomain.LouwNidaCodes;
});
return await GetSemanticDomain(semanticDomain.Id) ?? throw new InvalidOperationException("Semantic domain was not created");
}
Expand Down
4 changes: 3 additions & 1 deletion backend/FwLite/FwDataMiniLcmBridge/Api/LcmHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,9 @@ internal static string GetSemanticDomainCode(ICmSemanticDomain semanticDomain)
{
var abbr = semanticDomain.Abbreviation;
// UiString can be null even though there is an abbreviation available
return abbr.UiString ?? abbr.BestVernacularAnalysisAlternative.Text;
var code = abbr.UiString ?? abbr.BestVernacularAnalysisAlternative.Text;
// LCM uses "***" as the missing-string marker when Abbreviation is empty
return code is null or "***" ? string.Empty : code;
}

internal static void SetString(this ITsMultiString multiString, FwDataMiniLcmApi api, WritingSystemId ws, string value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,34 @@ public override MultiString Name
set => throw new NotImplementedException();
}

public override string Code
public override MultiString Abbreviation
{
get => new UpdateMultiStringProxy(_lcmSemanticDomain.Abbreviation, _lexboxLcmApi);
set => throw new NotImplementedException();
}

public override RichMultiString Description
{
get => _lcmSemanticDomain.Abbreviation.BestAnalysisVernacularAlternative.Text;
get => new UpdateRichMultiStringProxy(_lcmSemanticDomain.Description, _lexboxLcmApi);
set => throw new NotImplementedException();
}

public override string Code
{
get => LcmHelpers.GetSemanticDomainCode(_lcmSemanticDomain);
// Derived from Abbreviation on read; ignore writes (do not map Code → Abbreviation).
set { }
}

public override string OcmCodes
{
get => _lcmSemanticDomain.OcmCodes ?? string.Empty;
set => _lcmSemanticDomain.OcmCodes = value;
}

public override string LouwNidaCodes
{
get => _lcmSemanticDomain.LouwNidaCodes ?? string.Empty;
set => _lcmSemanticDomain.LouwNidaCodes = value;
}
}
8 changes: 7 additions & 1 deletion backend/FwLite/FwLiteProjectSync.Tests/Import/ImportTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,13 @@ public async Task ImportsANewlyCreatedComplexFormType()
[Fact]
public async Task ImportsANewlyCreatedSemanticDomain()
{
var sd = new SemanticDomain { Id = Guid.NewGuid(), Name = { ["en"] = "Test SD" }, Code = "TSD"};
var sd = new SemanticDomain
{
Id = Guid.NewGuid(),
Name = { ["en"] = "Test SD" },
Abbreviation = { ["en"] = "TSD" },
Code = "TSD",
};
await _fixture.FwDataApi.CreateSemanticDomain(sd);
await ImportService.ImportProject(_fixture.CrdtApi, _fixture.FwDataApi, 1);
var importedSd = await _fixture.CrdtApi.GetSemanticDomain(sd.Id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public async Task ImportProject_IsResumable_AcrossRandomFailures()
{
Id = Guid.NewGuid(),
Name = new() { ["en"] = "Test Semantic Domain" },
Abbreviation = new() { ["en"] = "TSD" },
Code = "TSD"
}]));

Expand Down
Loading
Loading