1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
//-----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.Activities.Persistence
{
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Runtime;
using System.Xml.Linq;
public abstract class PersistenceParticipant : IPersistencePipelineModule
{
bool isSaveTransactionRequired;
bool isLoadTransactionRequired;
bool isIOParticipant;
protected PersistenceParticipant()
{
}
internal PersistenceParticipant(bool isSaveTransactionRequired, bool isLoadTransactionRequired)
{
this.isIOParticipant = true;
this.isSaveTransactionRequired = isSaveTransactionRequired;
this.isLoadTransactionRequired = isLoadTransactionRequired;
}
[SuppressMessage(FxCop.Category.Design, FxCop.Rule.AvoidOutParameters,
Justification = "arch approved design. requires the two out dictionaries to avoid complex structures")]
protected virtual void CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues)
{
readWriteValues = null;
writeOnlyValues = null;
}
// Passed-in dictionaries are read-only.
protected virtual IDictionary<XName, object> MapValues(IDictionary<XName, object> readWriteValues, IDictionary<XName, object> writeOnlyValues)
{
return null;
}
// Passed-in dictionary is read-only.
protected virtual void PublishValues(IDictionary<XName, object> readWriteValues)
{
}
void IPersistencePipelineModule.CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues)
{
CollectValues(out readWriteValues, out writeOnlyValues);
}
IDictionary<XName, object> IPersistencePipelineModule.MapValues(IDictionary<XName, object> readWriteValues, IDictionary<XName, object> writeOnlyValues)
{
return MapValues(readWriteValues, writeOnlyValues);
}
void IPersistencePipelineModule.PublishValues(IDictionary<XName, object> readWriteValues)
{
PublishValues(readWriteValues);
}
bool IPersistencePipelineModule.IsIOParticipant
{
get
{
return this.isIOParticipant;
}
}
bool IPersistencePipelineModule.IsSaveTransactionRequired
{
get
{
return this.isSaveTransactionRequired;
}
}
bool IPersistencePipelineModule.IsLoadTransactionRequired
{
get
{
return this.isLoadTransactionRequired;
}
}
IAsyncResult IPersistencePipelineModule.BeginOnSave(IDictionary<XName, object> readWriteValues, IDictionary<XName, object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, object state)
{
return InternalBeginOnSave(readWriteValues, writeOnlyValues, timeout, callback, state);
}
void IPersistencePipelineModule.EndOnSave(IAsyncResult result)
{
InternalEndOnSave(result);
}
IAsyncResult IPersistencePipelineModule.BeginOnLoad(IDictionary<XName, object> readWriteValues, TimeSpan timeout, AsyncCallback callback, object state)
{
return InternalBeginOnLoad(readWriteValues, timeout, callback, state);
}
void IPersistencePipelineModule.EndOnLoad(IAsyncResult result)
{
InternalEndOnLoad(result);
}
void IPersistencePipelineModule.Abort()
{
InternalAbort();
}
internal virtual IAsyncResult InternalBeginOnSave(IDictionary<XName, object> readWriteValues, IDictionary<XName, object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, object state)
{
throw Fx.AssertAndThrow("BeginOnSave should not be called on PersistenceParticipant.");
}
internal virtual void InternalEndOnSave(IAsyncResult result)
{
Fx.Assert("EndOnSave should not be called on PersistenceParticipant.");
}
internal virtual IAsyncResult InternalBeginOnLoad(IDictionary<XName, object> readWriteValues, TimeSpan timeout, AsyncCallback callback, object state)
{
throw Fx.AssertAndThrow("BeginOnLoad should not be called on PersistenceParticipant.");
}
internal virtual void InternalEndOnLoad(IAsyncResult result)
{
Fx.Assert("EndOnLoad should not be called on PersistenceParticipant.");
}
internal virtual void InternalAbort()
{
}
}
}
|