private bool TryGetSlaveEntry(SynchronizationEntry masterEntry, out SynchronizationEntry slaveEntry) { if (!_map.ContainsKey(_master, masterEntry.Status)) { slaveEntry = null; return(false); } var slaveStatus = _map.GetMappedValue(_master, masterEntry.Status); slaveEntry = new SynchronizationEntry(masterEntry.Id, slaveStatus, masterEntry.Properties) { Ordinal = masterEntry.Ordinal, TimeStamp = masterEntry.TimeStamp }; return(true); }
private Dictionary <string, string> MapProperties(ISynchronizationAgent agent, Dictionary <string, string> properties) { var mappedProperties = new Dictionary <string, string>(); foreach (var keyValue in properties) { if (_propertyMap.ContainsKey(agent, keyValue.Key)) { mappedProperties.Add(_propertyMap.GetMappedValue(agent, keyValue.Key), keyValue.Value); } } return(mappedProperties); }
public void Synchronize() { var masterEntries = _master.GetAll(); var slaveEntries = _slave.GetAll(); var idsForDeletion = slaveEntries.Select(e => e.Id).Except( masterEntries.Where(me => _map.ContainsKey(_master, me.Status)).Select(e => e.Id)); foreach (var id in idsForDeletion) { var entry = slaveEntries.Where(e => e.Id == id).Single(); _slave.Delete(entry); } var idsForCreation = masterEntries.Select(e => e.Id).Except(slaveEntries.Select(e => e.Id)); foreach (var id in idsForCreation) { try { var entry = masterEntries.Where(e => e.Id == id).Single(); SynchronizationEntry slaveEntry; if (TryGetSlaveEntry(entry, out slaveEntry)) { _slave.Create(slaveEntry); } } catch (InvalidOperationException e) { throw new InvalidOperationException("Id='" + id + "'", e); } } }