138 lines
4.9 KiB
C#
138 lines
4.9 KiB
C#
|
//-----------------------------------------------------------------------------
|
||
|
// 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()
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
}
|