From f6bd9c4e1f8cd7acfa781a42d94be9e3c75168e4 Mon Sep 17 00:00:00 2001 From: kuh0005 Date: Thu, 24 Aug 2023 09:27:23 +0200 Subject: [PATCH 1/3] Create draft PR for #185 From 08a36ebdf6fdbc7981d083adf0100df983230840 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Thu, 24 Aug 2023 11:52:22 +0200 Subject: [PATCH 2/3] create not exit data fragment --- .../AxoDataExchange/DataExchangeViewModel.cs | 2 +- .../AxoDataFragmentExchange.cs | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs index 2852ae6ad..31597a48a 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs @@ -64,7 +64,7 @@ public IBrowsableDataObject SelectedRecord _selectedRecord = value; if (value != null) { - DataExchange.FromRepositoryToShadowsAsync(value); + DataExchange.FromRepositoryToShadowsAsync(value).Wait(); DataExchange.ChangeTrackerSetChanges(value); IsHashCorrect = DataExchange.IsHashCorrect(_selectedRecord, Asp.GetAuthenticationStateAsync().Result.User.Identity); Changes = DataExchange.ChangeTrackerGetChanges().OrderBy(p => p.DateTime.Ticks).ToList(); diff --git a/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs b/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs index 62681093d..1b35d0d0e 100644 --- a/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs +++ b/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs @@ -198,22 +198,36 @@ await Task.Run(() => { foreach (var fragment in DataFragments) { - Pocos.AXOpen.Data.IAxoDataEntity poco = (Pocos.AXOpen.Data.IAxoDataEntity)fragment.RefUIData.CreatePoco(); - poco.DataEntityId = identifier; - poco.Hash = HashHelper.CreateHash(poco); - - fragment?.Repository.Create(identifier, poco); + CreateNewPocoInFragmentRepository(identifier, fragment); } DataFragments.First().Repository.Read(identifier); }); } + private static void CreateNewPocoInFragmentRepository(string identifier, IAxoDataExchange fragment) + { + Pocos.AXOpen.Data.IAxoDataEntity poco = (Pocos.AXOpen.Data.IAxoDataEntity)fragment.RefUIData.CreatePoco(); + poco.DataEntityId = identifier; + poco.Hash = HashHelper.CreateHash(poco); + + fragment?.Repository.Create(identifier, poco); + } + public async Task FromRepositoryToShadowsAsync(IBrowsableDataObject entity) { foreach (var fragment in DataFragments) { - await fragment.RefUIData.PlainToShadow(fragment.Repository.Read(entity.DataEntityId)); + var exist = fragment.Repository.Exists(entity.DataEntityId); + + if (exist) + { + await fragment.RefUIData.PlainToShadow(fragment.Repository.Read(entity.DataEntityId)); + } + else + { + CreateNewPocoInFragmentRepository(entity.DataEntityId, fragment); + } } } From 1cc348a975cc9c716437e7d856067c1354512fbb Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Thu, 24 Aug 2023 13:23:11 +0200 Subject: [PATCH 3/3] test for missing fragment --- .../AxoDataFragmentExchange.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/data/tests/AXOpen.Data.Tests/DataExchangeFragments/AxoDataFragmentExchange.cs b/src/data/tests/AXOpen.Data.Tests/DataExchangeFragments/AxoDataFragmentExchange.cs index c1db75c25..32338224d 100644 --- a/src/data/tests/AXOpen.Data.Tests/DataExchangeFragments/AxoDataFragmentExchange.cs +++ b/src/data/tests/AXOpen.Data.Tests/DataExchangeFragments/AxoDataFragmentExchange.cs @@ -451,6 +451,33 @@ public async void CreateCopy_ShouldCreateInAllRepositoriesFromExisting() Assert.Equal(4859ul, manip.CounterDelay); } + [Fact] + public async void FromRepositoryToShadows_CreateMissingFragment() + { + var parent = NSubstitute.Substitute.For(); + parent.GetConnector().Returns(AXSharp.Connector.ConnectorAdapterBuilder.Build().CreateDummy().GetConnector(null)); + var sut = new ProcessData(parent, "a", "b"); + var s = sut.CreateBuilder(); + var sharedRepo = new InMemoryRepository(); + var manipRepo = new InMemoryRepository(); + s.Set.SetRepository(sharedRepo); + s.Manip.SetRepository(manipRepo); + + sharedRepo.Create("hey remote create", new Pocos.axosimple.SharedProductionData() + { ComesFrom = 185, GoesTo = 398 }); + manipRepo.Create("hey remote create", new() { CounterDelay = 898577ul }); + manipRepo.Delete("hey remote create"); + + sut.FromRepositoryToShadowsAsync(new SharedProductionData() { DataEntityId = "hey remote create" }); + + Assert.Equal("hey remote create", sut.Set.Set.DataEntityId.Shadow); + Assert.Equal(185, sut.Set.Set.ComesFrom.Shadow); + Assert.Equal(398, sut.Set.Set.GoesTo.Shadow); + Assert.Equal("", sut.Manip.Set.DataEntityId.Shadow); + Assert.Equal(0ul, sut.Manip.Set.CounterDelay.Shadow); + + } + [Fact()] public async void ExportTest() {