diff --git a/All.sln b/All.sln index bceb0b5d70..2ad59e31d7 100644 --- a/All.sln +++ b/All.sln @@ -2065,38 +2065,6 @@ Global {737D5567-7B1F-410D-9B7B-BAE8065ED15B}.Release|Any CPU.Build.0 = Release|Any CPU {737D5567-7B1F-410D-9B7B-BAE8065ED15B}.Release|x64.ActiveCfg = Release|Any CPU {737D5567-7B1F-410D-9B7B-BAE8065ED15B}.Release|x64.Build.0 = Release|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|x64.ActiveCfg = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|x64.Build.0 = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|x64.ActiveCfg = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|x64.Build.0 = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|Any CPU.ActiveCfg = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|Any CPU.Build.0 = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|x64.ActiveCfg = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|x64.Build.0 = Debug|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|Any CPU.Build.0 = Release|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|x64.ActiveCfg = Release|Any CPU - {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|x64.Build.0 = Release|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|x64.ActiveCfg = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|x64.Build.0 = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|x64.ActiveCfg = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|x64.Build.0 = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|Any CPU.ActiveCfg = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|Any CPU.Build.0 = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|x64.ActiveCfg = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|x64.Build.0 = Debug|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|Any CPU.Build.0 = Release|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|x64.ActiveCfg = Release|Any CPU - {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|x64.Build.0 = Release|Any CPU {75144587-6F51-46C8-8E40-DA652FBC53F4}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU {75144587-6F51-46C8-8E40-DA652FBC53F4}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU {75144587-6F51-46C8-8E40-DA652FBC53F4}.Debug Mac|x64.ActiveCfg = Debug|Any CPU @@ -2145,6 +2113,38 @@ Global {A0C9EBE0-A56A-4D07-B6EF-2EEAEC45D6C4}.Release|Any CPU.Build.0 = Release|Any CPU {A0C9EBE0-A56A-4D07-B6EF-2EEAEC45D6C4}.Release|x64.ActiveCfg = Release|Any CPU {A0C9EBE0-A56A-4D07-B6EF-2EEAEC45D6C4}.Release|x64.Build.0 = Release|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|x64.ActiveCfg = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug Mac|x64.Build.0 = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Debug|x64.Build.0 = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|Any CPU.ActiveCfg = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|Any CPU.Build.0 = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|x64.ActiveCfg = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release Mac|x64.Build.0 = Debug|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|Any CPU.Build.0 = Release|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|x64.ActiveCfg = Release|Any CPU + {7F0206A9-61D4-4D3A-9B43-789DABA7C143}.Release|x64.Build.0 = Release|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|Any CPU.ActiveCfg = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|Any CPU.Build.0 = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|x64.ActiveCfg = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug Mac|x64.Build.0 = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|x64.ActiveCfg = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Debug|x64.Build.0 = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|Any CPU.ActiveCfg = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|Any CPU.Build.0 = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|x64.ActiveCfg = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release Mac|x64.Build.0 = Debug|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|Any CPU.Build.0 = Release|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|x64.ActiveCfg = Release|Any CPU + {2CC777EB-BD63-4FAB-BC3A-68A640D2E639}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ConnectorCSI/ConnectorCSIBridge/ConnectorCSIBridge.csproj b/ConnectorCSI/ConnectorCSIBridge/ConnectorCSIBridge.csproj index f427af43a9..e2d7c9fdb9 100644 --- a/ConnectorCSI/ConnectorCSIBridge/ConnectorCSIBridge.csproj +++ b/ConnectorCSI/ConnectorCSIBridge/ConnectorCSIBridge.csproj @@ -5,6 +5,6 @@ false - + \ No newline at end of file diff --git a/ConnectorCSI/ConnectorCSIShared/UI/ConnectorBindingsCSI.Recieve.cs b/ConnectorCSI/ConnectorCSIShared/UI/ConnectorBindingsCSI.Recieve.cs index 9c4dfa108e..d810f40ada 100644 --- a/ConnectorCSI/ConnectorCSIShared/UI/ConnectorBindingsCSI.Recieve.cs +++ b/ConnectorCSI/ConnectorCSIShared/UI/ConnectorBindingsCSI.Recieve.cs @@ -1,4 +1,4 @@ -using ConnectorCSI.Storage; +using ConnectorCSI.Storage; using DesktopUI2; using DesktopUI2.Models; using DesktopUI2.ViewModels; @@ -18,6 +18,8 @@ using Serilog.Context; using Speckle.Core.Logging; using Speckle.Core.Models.GraphTraversal; +using Speckle.Core.Logging; +using Speckle.Core.Kits.ConverterInterfaces; namespace Speckle.ConnectorCSI.UI { @@ -38,7 +40,7 @@ public override async Task ReceiveStream(StreamState state, Progres var kit = KitManager.GetDefaultKit(); var appName = GetHostAppVersion(Model); - var converter = kit.LoadConverter(appName); + ISpeckleConverter converter = kit.LoadConverter(appName); // set converter settings as tuples (setting slug, setting selection) // for csi, these must go before the SetContextDocument method. @@ -151,6 +153,11 @@ private List ConvertReceivedObjects(ISpeckleConverter convert progress.Update(conversionProgressDict); } + if (converter is IFinalizable finalizable) + { + finalizable.FinalizeConversion(); + } + return conversionResults; } diff --git a/ConnectorCSI/ConnectorSAP2000/ConnectorSAP2000.csproj b/ConnectorCSI/ConnectorSAP2000/ConnectorSAP2000.csproj index 8f61141175..d953a8de1f 100644 --- a/ConnectorCSI/ConnectorSAP2000/ConnectorSAP2000.csproj +++ b/ConnectorCSI/ConnectorSAP2000/ConnectorSAP2000.csproj @@ -5,6 +5,6 @@ false - + \ No newline at end of file diff --git a/ConnectorCSI/DriverCSharp/DriverCSharp.csproj b/ConnectorCSI/DriverCSharp/DriverCSharp.csproj index b2f9fefb85..723e97c68c 100644 --- a/ConnectorCSI/DriverCSharp/DriverCSharp.csproj +++ b/ConnectorCSI/DriverCSharp/DriverCSharp.csproj @@ -8,7 +8,6 @@ false - @@ -23,4 +22,5 @@ + \ No newline at end of file diff --git a/Core/Core/Kits/ConverterInterfaces/IFinalizable.cs b/Core/Core/Kits/ConverterInterfaces/IFinalizable.cs new file mode 100644 index 0000000000..1c6d27cdbb --- /dev/null +++ b/Core/Core/Kits/ConverterInterfaces/IFinalizable.cs @@ -0,0 +1,7 @@ +namespace Speckle.Core.Kits.ConverterInterfaces +{ + public interface IFinalizable + { + void FinalizeConversion(); + } +} diff --git a/Objects/Converters/ConverterCSI/ConverterCSIBridge/ConverterCSIBridge.csproj b/Objects/Converters/ConverterCSI/ConverterCSIBridge/ConverterCSIBridge.csproj index 4a309a3a93..2c09c9843d 100644 --- a/Objects/Converters/ConverterCSI/ConverterCSIBridge/ConverterCSIBridge.csproj +++ b/Objects/Converters/ConverterCSI/ConverterCSIBridge/ConverterCSIBridge.csproj @@ -17,13 +17,13 @@ - + - - - + + + @@ -33,12 +33,10 @@ - - - + + + - + \ No newline at end of file diff --git a/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.DatabaseTableUtils.cs b/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.DatabaseTableUtils.cs new file mode 100644 index 0000000000..13e12071b1 --- /dev/null +++ b/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.DatabaseTableUtils.cs @@ -0,0 +1,14 @@ +using ConverterCSIShared.Models; + +namespace Objects.Converter.CSI +{ + public partial class ConverterCSI + { + private ETABSGridLineDefinitionTable gridLineDefinitionTable; + private ETABSGridLineDefinitionTable GridLineDefinitionTable => gridLineDefinitionTable ??= new(Model, new(Model)); + public void CommitAllDatabaseTableChanges() + { + GridLineDefinitionTable.CommitPendingChanges(); + } + } +} diff --git a/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.cs b/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.cs index 96c57688ed..1eb54355aa 100644 --- a/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.cs +++ b/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSI.cs @@ -15,10 +15,11 @@ using Objects.Other; using Objects.Structural.Materials; using OSG = Objects.Structural.Geometry; +using Speckle.Core.Kits.ConverterInterfaces; namespace Objects.Converter.CSI { - public partial class ConverterCSI : ISpeckleConverter + public partial class ConverterCSI : ISpeckleConverter, IFinalizable { #if ETABS public static string CSIAppName = HostApplications.ETABS.Name; @@ -432,5 +433,10 @@ public List ConvertToSpeckle(List objects) } public IEnumerable GetServicedApplications() => new string[] { CSIAppName }; + + public void FinalizeConversion() + { + CommitAllDatabaseTableChanges(); + } } } diff --git a/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSIShared.projitems b/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSIShared.projitems index 26af5f4eab..37d75b000b 100644 --- a/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSIShared.projitems +++ b/Objects/Converters/ConverterCSI/ConverterCSIShared/ConverterCSIShared.projitems @@ -11,6 +11,7 @@ + diff --git a/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/DatabaseTableWrapper.cs b/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/DatabaseTableWrapper.cs index a594c75cdf..ed9ffce2d6 100644 --- a/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/DatabaseTableWrapper.cs +++ b/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/DatabaseTableWrapper.cs @@ -2,27 +2,30 @@ using System.Collections.Generic; using ConverterCSIShared.Services; using CSiAPIv1; +using Speckle.Core.Logging; namespace ConverterCSIShared.Models { internal abstract class DatabaseTableWrapper { public abstract string TableKey { get; } + protected readonly cSapModel cSapModel; protected readonly ToNativeScalingService toNativeScalingService; + private int tableVersion; protected string[] fieldKeysIncluded; - protected int numRecords; - private readonly List tableData; + private int numRecords; + private List tableData; + private readonly List rowsToAdd = new(); protected DatabaseTableWrapper(cSapModel cSapModel, ToNativeScalingService toNativeScalingService) { this.cSapModel = cSapModel; this.toNativeScalingService = toNativeScalingService; - this.tableData = new List(GetTableData()); + RefreshTableData(); } - - private string[] GetTableData() + private void RefreshTableData() { var tableData = Array.Empty(); cSapModel.DatabaseTables.GetTableForEditingArray( @@ -33,22 +36,29 @@ private string[] GetTableData() ref numRecords, ref tableData ); - return tableData; + this.tableData = new List(tableData); } - protected void AddRow(params string[] arguments) + protected void AddRowToBeCommitted(params string[] arguments) { if (arguments.Length != fieldKeysIncluded.Length) { - throw new ArgumentException( - $"Method {nameof(AddRow)} was passed an array of length {arguments.Length}, but was expecting an array of length {fieldKeysIncluded.Length}" - ); + throw new ArgumentException($"Method {nameof(AddRowToBeCommitted)} was passed an array of length {arguments.Length}, but was expecting an array of length {fieldKeysIncluded.Length}"); + } + rowsToAdd.Add(arguments); + } + + public void CommitPendingChanges() + { + foreach (string[] row in rowsToAdd) + { + tableData.AddRange(row); + numRecords++; } - tableData.AddRange(arguments); - numRecords++; + ApplyTablesEditedTables(); } - public void ApplyEditedTables() + private void ApplyTablesEditedTables() { var tableDataArray = tableData.ToArray(); cSapModel.DatabaseTables.SetTableForEditingArray( @@ -64,14 +74,13 @@ ref tableDataArray int numInfoMsgs = 0; int numErrorMsgs = 0; string importLog = ""; - cSapModel.DatabaseTables.ApplyEditedTables( - false, - ref numFatalErrors, - ref numErrorMsgs, - ref numWarnMsgs, - ref numInfoMsgs, - ref importLog - ); + cSapModel.DatabaseTables.ApplyEditedTables(false, ref numFatalErrors, ref numErrorMsgs, ref numWarnMsgs, ref numInfoMsgs, ref importLog); + + if (numFatalErrors == 0 && numErrorMsgs == 0) + { + SpeckleLog.Logger.Error("{numErrors} errors and {numFatalErrors} fatal errors occurred when attempting to add {numRowsToAdd} rows to table with key, {tableKey}", numErrorMsgs, numFatalErrors, rowsToAdd.Count, TableKey); + } + rowsToAdd.Clear(); } } } diff --git a/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/ETABSGridLineDefinitionTable.cs b/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/ETABSGridLineDefinitionTable.cs index accd5bc477..209ebdce1d 100644 --- a/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/ETABSGridLineDefinitionTable.cs +++ b/Objects/Converters/ConverterCSI/ConverterCSIShared/Models/ETABSGridLineDefinitionTable.cs @@ -79,7 +79,7 @@ public void AddCartesian( }; } - AddRow(newRow); + AddRowToBeCommitted(newRow); } /// diff --git a/Objects/Converters/ConverterCSI/ConverterCSIShared/PartialClasses/Geometry/ConvertGridLines.cs b/Objects/Converters/ConverterCSI/ConverterCSIShared/PartialClasses/Geometry/ConvertGridLines.cs index cbe6be0b91..fa9c268cc2 100644 --- a/Objects/Converters/ConverterCSI/ConverterCSIShared/PartialClasses/Geometry/ConvertGridLines.cs +++ b/Objects/Converters/ConverterCSI/ConverterCSIShared/PartialClasses/Geometry/ConvertGridLines.cs @@ -1,21 +1,15 @@ -using System; using System.Collections.Generic; using Objects.Geometry; using Objects.Structural.CSI.Geometry; using Objects.BuiltElements; -using ConverterCSIShared.Models; namespace Objects.Converter.CSI { public partial class ConverterCSI { - private ETABSGridLineDefinitionTable gridLineDefinitionTable; - private ETABSGridLineDefinitionTable GridLineDefinitionTable => gridLineDefinitionTable ??= new(Model, new(Model)); - public void GridLineToNative(GridLine gridline) { GridLineDefinitionTable.AddCartesian(gridline); - GridLineDefinitionTable.ApplyEditedTables(); } public CSIGridLines gridLinesToSpeckle(string name) diff --git a/Objects/Converters/ConverterCSI/ConverterETABS/ConverterETABS.csproj b/Objects/Converters/ConverterCSI/ConverterETABS/ConverterETABS.csproj index c004905e95..c075b65c5c 100644 --- a/Objects/Converters/ConverterCSI/ConverterETABS/ConverterETABS.csproj +++ b/Objects/Converters/ConverterCSI/ConverterETABS/ConverterETABS.csproj @@ -16,13 +16,13 @@ - + - - - + + + @@ -32,12 +32,10 @@ - - - + + + - + \ No newline at end of file diff --git a/Objects/Converters/ConverterCSI/ConverterSAFE/ConverterSAFE.csproj b/Objects/Converters/ConverterCSI/ConverterSAFE/ConverterSAFE.csproj index cbf9c0daff..f0fc9f5521 100644 --- a/Objects/Converters/ConverterCSI/ConverterSAFE/ConverterSAFE.csproj +++ b/Objects/Converters/ConverterCSI/ConverterSAFE/ConverterSAFE.csproj @@ -15,16 +15,16 @@ TRACE;SAFE - + - + - - - + + + @@ -34,10 +34,8 @@ - - - + + + \ No newline at end of file diff --git a/Objects/Converters/ConverterCSI/ConverterSAP2000/ConverterSAP2000.csproj b/Objects/Converters/ConverterCSI/ConverterSAP2000/ConverterSAP2000.csproj index e077cc1326..6da986aa0a 100644 --- a/Objects/Converters/ConverterCSI/ConverterSAP2000/ConverterSAP2000.csproj +++ b/Objects/Converters/ConverterCSI/ConverterSAP2000/ConverterSAP2000.csproj @@ -15,16 +15,16 @@ TRACE;SAP2000 - + - + - - - + + + @@ -34,10 +34,8 @@ - - - + + + \ No newline at end of file