/// <summary> /// Allows the user of this interface to force an update to an object. /// Also the object itself can raise an request to be updated (saved). /// </summary> public bool RestoreObjectState(IPersistentEx persistent) { TracerHelper.Trace("[" + ActualPersistentId(persistent) + "] invoked by :" + ReflectionHelper.GetFullCallingMethodName(3)); lock (this) { string persistentName = ActualPersistentId(persistent); SystemMonitor.CheckThrow(_verificationObjects.ContainsKey(persistentName) == false || _verificationObjects[persistentName] == persistent); if (_restoredObjects.ContainsKey(persistentName) == false /*|| _restoredObjects[persistentName].Values.Count == 0*/) {// Object restoration infromation not found. return(false); } PersistentData dataCopy = _restoredObjects[persistentName].Clone(); bool result = persistent.OnRestoreState(this, dataCopy); if (result) {// Object restored successfully, remove pending restoration information. _restoredObjects.Remove(persistentName); } return(result); } }
/// <summary> /// Allows the user of this interface to force an update to an object. /// Also the object itself can raise an request to be updated (saved). /// </summary> public bool SaveObjectState(IPersistentEx persistent) { TracerHelper.Trace("[" + ActualPersistentId(persistent) + "] invoked by: " + ReflectionHelper.GetFullCallingMethodName(2)); lock (this) { RegisterObject(persistent); PersistentData data = _pendingSaveObjects[ActualPersistentId(persistent)]; if (persistent.OnSaveState(this, data) == false) { return(false); } // Only if the receiver has confirmed the saving operation, replace the current data. _pendingSaveObjects[ActualPersistentId(persistent)] = data; } return(true); }
public void RegisterObject(IPersistentEx persistent) { lock (this) { if (persistent.PersistencyIsInitialzed == false) { TracerHelper.Trace("[" + ActualPersistentId(persistent) + "] invoked by: " + ReflectionHelper.GetFullCallingMethodName(2)); persistent.InitializePersistency(this); if (_pendingSaveObjects.ContainsKey(ActualPersistentId(persistent)) == false) { _pendingSaveObjects.Add(ActualPersistentId(persistent), new PersistentData()); } SystemMonitor.CheckThrow(_verificationObjects.ContainsKey(ActualPersistentId(persistent)) == false); _verificationObjects.Add(ActualPersistentId(persistent), persistent); } System.Diagnostics.Debug.Assert(_verificationObjects.ContainsKey(ActualPersistentId(persistent))); } }
string ActualPersistentId(IPersistentEx consistent) { return consistent.GetType().Name + "." + consistent.PersistencyId; }
/// <summary> /// Allows the user of this interface to force an update to an object. /// Also the object itself can raise an request to be updated (saved). /// </summary> public bool SaveObjectState(IPersistentEx persistent) { TracerHelper.Trace("[" + ActualPersistentId(persistent) + "] invoked by: " + ReflectionHelper.GetFullCallingMethodName(2)); lock (this) { RegisterObject(persistent); PersistentData data = _pendingSaveObjects[ActualPersistentId(persistent)]; if (persistent.OnSaveState(this, data) == false) { return false; } // Only if the receiver has confirmed the saving operation, replace the current data. _pendingSaveObjects[ActualPersistentId(persistent)] = data; } return true; }
/// <summary> /// Allows the user of this interface to force an update to an object. /// Also the object itself can raise an request to be updated (saved). /// </summary> public bool RestoreObjectState(IPersistentEx persistent) { TracerHelper.Trace("[" + ActualPersistentId(persistent) + "] invoked by :" + ReflectionHelper.GetFullCallingMethodName(3)); lock (this) { string persistentName = ActualPersistentId(persistent); SystemMonitor.CheckThrow(_verificationObjects.ContainsKey(persistentName) == false || _verificationObjects[persistentName] == persistent); if (_restoredObjects.ContainsKey(persistentName) == false /*|| _restoredObjects[persistentName].Values.Count == 0*/) {// Object restoration infromation not found. return false; } PersistentData dataCopy = _restoredObjects[persistentName].Clone(); bool result = persistent.OnRestoreState(this, dataCopy); if (result) {// Object restored successfully, remove pending restoration information. _restoredObjects.Remove(persistentName); } return result; } }
string ActualPersistentId(IPersistentEx consistent) { return(consistent.GetType().Name + "." + consistent.PersistencyId); }