diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-29 20:37:05 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-29 20:37:05 +0200 |
| commit | cfb92ea5e80b1af847829a76ab3c9ed7f52ae2c4 (patch) | |
| tree | 10aae33b609f8adc654f00597fcd902faeee8fd9 /Software/Visual_Studio/Tango.Synchronization/Remote | |
| parent | 1348ceabdd5d93b78f7f0d9295a5b3424ae93962 (diff) | |
| download | Tango-cfb92ea5e80b1af847829a76ab3c9ed7f52ae2c4.tar.gz Tango-cfb92ea5e80b1af847829a76ab3c9ed7f52ae2c4.zip | |
Fixed an issue with boolean values on local DB sync.
Added support for SYNC_CONFIGURATION table on for local DB sync.
Fixed an issue with multiple row updates on remote DB sync.
Added warning for missing destination property on remote DB sync.
Throw exception when no remote machine found on remote DB sync.
Diffstat (limited to 'Software/Visual_Studio/Tango.Synchronization/Remote')
| -rw-r--r-- | Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs | 53 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Synchronization/Remote/SyncConfiguration.cs | 14 |
2 files changed, 37 insertions, 30 deletions
diff --git a/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs b/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs index 49555f75c..0bd76dbd1 100644 --- a/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs +++ b/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs @@ -11,7 +11,7 @@ using System.Collections; namespace Tango.Synchronization.Remote { - public class RemoteDBComparer : IDisposable + public class RemoteDBComparer : IDBComparer { private remote.RemoteDB _remoteDB; private local.LocalDB _localDB; @@ -65,6 +65,11 @@ namespace Tango.Synchronization.Remote LogManager.Log("Querying all remote machines..."); var remote_machines = _remoteDB.MACHINES.Where(x => x.SERIAL_NUMBER == _machineSerial).ToList(); + if (remote_machines.Count == 0) + { + throw LogManager.Log(new DataBaseComparisonException("Could not locate machine on remote server " + _machineSerial)); + } + LogManager.Log("Querying all remote organizations..."); guids = remote_machines.Select(x => x.ORGANIZATION_GUID).ToList(); var remote_organizations = _remoteDB.ORGANIZATIONS.Where(x => guids.Contains(x.GUID)).ToList(); @@ -114,7 +119,7 @@ namespace Tango.Synchronization.Remote } - LogManager.Log("Comparing addresses tables"); + LogManager.Log("Comparing addresses"); CompareCollections(remote_addresses, local_addresses, _remoteDB.ADDRESSES, _localDB.ADDRESSES); LogManager.Log("Comparing cartridges"); @@ -150,6 +155,8 @@ namespace Tango.Synchronization.Remote LogManager.Log("Comparing users roles"); CompareCollections(remote_users_roles, local_users_roles, _remoteDB.USERS_ROLES, _localDB.USERS_ROLES); + LogManager.Log("Comparison done!"); + return _diffs; } @@ -163,6 +170,12 @@ namespace Tango.Synchronization.Remote { foreach (var prop in source.GetType().GetProperties().Where(x => x.PropertyType.IsPrimitive || x.PropertyType == typeof(String) || x.PropertyType == typeof(DateTime))) { + if (destination.GetType().GetProperty(prop.Name) == null) + { + LogManager.Log(String.Format("Warning: property {0} not found on destination entity {1}!", prop.Name, destination.GetType().Name)); + continue; + } + if (prop.PropertyType == typeof(Int64)) { destination.GetType().GetProperty(prop.Name).SetValue(destination, Convert.ToInt32((Int64)prop.GetValue(source))); @@ -179,25 +192,25 @@ namespace Tango.Synchronization.Remote var slaveProp = typeof(Slave).GetProperty("GUID"); var masterProp = typeof(Master).GetProperty("GUID"); + List<Slave> compared = new List<Slave>(); + foreach (var masterRow in masterCollection) { - CompareEntities(masterRow, slaveCollection.SingleOrDefault(x => slaveProp.GetValue(x).ToString() == masterProp.GetValue(masterRow).ToString()), masterSet, slaveSet); + Slave slaveRow = slaveCollection.SingleOrDefault(x => slaveProp.GetValue(x).ToString() == masterProp.GetValue(masterRow).ToString()); + CompareEntities(masterRow, slaveRow, masterSet, slaveSet); + + if (slaveRow != null) + { + compared.Add(slaveRow); + } } - foreach (var slaveRow in slaveCollection) + foreach (var slaveRow in slaveCollection.Where(x => !compared.Contains(x))) { CompareEntities(masterCollection.SingleOrDefault(x => masterProp.GetValue(x).ToString() == slaveProp.GetValue(slaveRow).ToString()), slaveRow, masterSet, slaveSet); } } - //private Destination TransferEntity<Source, Destination>(Source entity, List<Destination> destinationSet) where Source : class where Destination : class - //{ - // var cloned = Activator.CreateInstance<Destination>(); - // CopyEntity(entity, cloned); - // destinationSet.Add(cloned); - // return cloned; - //} - private void OverrideTable(remote.SYNC_CONFIGURATION config) { LogManager.Log("Generating table override difference for " + config.TABLE_NAME + "..."); @@ -230,11 +243,19 @@ namespace Tango.Synchronization.Remote if (masterDate > slaveDate) { - diff = new Diff(DiffAction.UpdateRowInSlave, "Update row in slave table " + typeof(Master).Name, () => CopyEntity(master, slave), null); + diff = new Diff(DiffAction.UpdateRowInSlave, "Update row in slave table " + typeof(Master).Name, () => + { + LogManager.Log("Updating row in slave table " + typeof(Master).Name); + CopyEntity(master, slave); + }, null); } else if (slaveDate > masterDate) { - diff = new Diff(DiffAction.UpdateRowInMaster, "Update row in master table " + typeof(Master).Name, () => CopyEntity(slave, master), null); + diff = new Diff(DiffAction.UpdateRowInMaster, "Update row in master table " + typeof(Master).Name, () => + { + LogManager.Log("Updating row in master table " + typeof(Master).Name); + CopyEntity(slave, master); + }, null); } if (diff != null) @@ -249,7 +270,7 @@ namespace Tango.Synchronization.Remote { _diffs.Add(new Diff(DiffAction.AddRowToSlave, "Add row to slave table " + typeof(Master).Name, () => { - + LogManager.Log("Adding row to slave table " + typeof(Master).Name); Slave newRow = slaveSet.Create(); CopyEntity(master, newRow); slaveSet.Add(newRow); @@ -263,7 +284,7 @@ namespace Tango.Synchronization.Remote { _diffs.Add(new Diff(DiffAction.AddRowToMaster, "Add row to master table " + typeof(Master).Name, () => { - + LogManager.Log("Adding row to master table " + typeof(Master).Name); Master newRow = masterSet.Create(); CopyEntity(slave, newRow); masterSet.Add(newRow); diff --git a/Software/Visual_Studio/Tango.Synchronization/Remote/SyncConfiguration.cs b/Software/Visual_Studio/Tango.Synchronization/Remote/SyncConfiguration.cs deleted file mode 100644 index 7e5a60f07..000000000 --- a/Software/Visual_Studio/Tango.Synchronization/Remote/SyncConfiguration.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.Synchronization.Remote -{ - public enum SyncConfiguration - { - OverwriteLocal, - Synchronize, - } -} |
