public void Publish() { foreach (object persistenceParticipant in persistenceParticipants) { System.Activities.Persistence.PersistenceParticipant legacyPersistenceParticipant = persistenceParticipant as System.Activities.Persistence.PersistenceParticipant; if (legacyPersistenceParticipant != null) { legacyPersistenceParticipant.PublishValues(readWriteView); } else { (persistenceParticipant as IPersistenceParticipant)?.PublishValues(readWriteView); } } }
protected void Abort() { foreach (object persistenceParticipant in persistenceParticipants) { System.Activities.Persistence.PersistenceParticipant legacyPersistenceParticipant = persistenceParticipant as System.Activities.Persistence.PersistenceParticipant; if (legacyPersistenceParticipant != null && legacyPersistenceParticipant.IsIOParticipant()) { (legacyPersistenceParticipant as System.Activities.Persistence.PersistenceIOParticipant).Abort(); } else { (persistenceParticipant as IPersistenceIOParticipant)?.Abort(); } } }
public void Map() { List <Tuple <object, IDictionary <XName, object> > > pendingValues = null; foreach (object persistenceParticipant in persistenceParticipants) { IDictionary <XName, object> mappedValues = null; System.Activities.Persistence.PersistenceParticipant legacyPersistenceParticipant = persistenceParticipant as System.Activities.Persistence.PersistenceParticipant; if (legacyPersistenceParticipant != null) { mappedValues = legacyPersistenceParticipant.MapValues(readWriteView, writeOnlyView); } else { mappedValues = (persistenceParticipant as IPersistenceParticipant)?.MapValues(readWriteView, writeOnlyView); } if (mappedValues != null) { if (pendingValues == null) { pendingValues = new List <Tuple <object, IDictionary <XName, object> > >(); } pendingValues.Add(new Tuple <object, IDictionary <XName, object> >(persistenceParticipant, mappedValues)); } } if (pendingValues != null) { foreach (Tuple <object, IDictionary <XName, object> > writeOnlyValues in pendingValues) { foreach (KeyValuePair <XName, object> value in writeOnlyValues.Item2) { try { instanceValues.Add(value.Key, new InstanceValue(value.Value, InstanceValueOptions.WriteOnly | InstanceValueOptions.Optional)); } catch (ArgumentException exception) { throw new InvalidOperationException($"Name collision on key '{value.Key}' during map in extension '{writeOnlyValues.Item1.GetType().GetFriendlyName()}'.", exception); } } } writeOnlyView.ResetCaches(); } }
public void Collect() { foreach (object persistenceParticipant in persistenceParticipants) { IDictionary <XName, object> readWriteValues = null; IDictionary <XName, object> writeOnlyValues = null; System.Activities.Persistence.PersistenceParticipant legacyPersistenceParticipant = persistenceParticipant as System.Activities.Persistence.PersistenceParticipant; if (legacyPersistenceParticipant != null) { legacyPersistenceParticipant.CollectValues(out readWriteValues, out writeOnlyValues); } else { (persistenceParticipant as IPersistenceParticipant)?.CollectValues(out readWriteValues, out writeOnlyValues); } if (readWriteValues != null) { foreach (KeyValuePair <XName, object> value in readWriteValues) { try { instanceValues.Add(value.Key, new InstanceValue(value.Value)); } catch (ArgumentException exception) { throw new InvalidOperationException($"Name collision on key '{value.Key}' during collect in extension '{persistenceParticipant.GetType().GetFriendlyName()}'.", exception); } } } if (persistWriteOnlyValues && writeOnlyValues != null) { foreach (KeyValuePair <XName, object> value in writeOnlyValues) { try { instanceValues.Add(value.Key, new InstanceValue(value.Value, InstanceValueOptions.WriteOnly | InstanceValueOptions.Optional)); } catch (ArgumentException exception) { throw new InvalidOperationException($"Name collision on key '{value.Key}' during collect in extension '{persistenceParticipant.GetType().GetFriendlyName()}'.", exception); } } } } }
// TODO Handle timeout correctly, ie. decrement remaining time in each for loop. public async Task OnLoadAsync(TimeSpan timeout) { try { foreach (object persistenceParticipant in persistenceParticipants) { System.Activities.Persistence.PersistenceParticipant legacyPersistenceParticipant = persistenceParticipant as System.Activities.Persistence.PersistenceParticipant; if (legacyPersistenceParticipant != null && legacyPersistenceParticipant.IsIOParticipant()) { await(legacyPersistenceParticipant as System.Activities.Persistence.PersistenceIOParticipant).OnLoadAsync(readWriteView, timeout); } else { await((persistenceParticipant as IPersistenceIOParticipant)?.OnLoadAsync(readWriteView, timeout) ?? TaskConstants.Completed); } } } catch { Abort(); // TODO Original pipeline seems to drop this to the floor, but the reference source is insufficient. throw; } }
public static void PublishValues(this System.Activities.Persistence.PersistenceParticipant persistenceParticipant, IDictionary <XName, object> readWriteValues) { publishValues(persistenceParticipant, readWriteValues); }
public static IDictionary <XName, object> MapValues(this System.Activities.Persistence.PersistenceParticipant persistenceParticipant, IDictionary <XName, object> readWriteValues, IDictionary <XName, object> writeOnlyValues) => mapValues(persistenceParticipant, readWriteValues, writeOnlyValues);
public static void CollectValues(this System.Activities.Persistence.PersistenceParticipant persistenceParticipant, out IDictionary <XName, object> readWriteValues, out IDictionary <XName, object> writeOnlyValues) { collectValues(persistenceParticipant, out readWriteValues, out writeOnlyValues); }
public static bool IsIOParticipant(this System.Activities.Persistence.PersistenceParticipant persistenceParticipant) => isIOParticipant(persistenceParticipant);