本文整理汇总了C#中Couchbase.Lite.Internal.RevisionInternal.SetProperties方法的典型用法代码示例。如果您正苦于以下问题:C# RevisionInternal.SetProperties方法的具体用法?C# RevisionInternal.SetProperties怎么用?C# RevisionInternal.SetProperties使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Couchbase.Lite.Internal.RevisionInternal
的用法示例。
在下文中一共展示了RevisionInternal.SetProperties方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TestForceInsertEmptyHistory
public void TestForceInsertEmptyHistory()
{
var rev = new RevisionInternal("FakeDocId", "1-abcd".AsRevID(), false);
var revProperties = new Dictionary<string, object>();
revProperties.SetDocRevID(rev.DocID, rev.RevID);
revProperties["message"] = "hi";
rev.SetProperties(revProperties);
IList<RevisionID> revHistory = null;
database.ForceInsert(rev, revHistory, null);
}
示例2: TestForceInsertEmptyHistory
public void TestForceInsertEmptyHistory()
{
var rev = new RevisionInternal("FakeDocId", "1-abcd", false);
var revProperties = new Dictionary<string, object>();
revProperties.Put("_id", rev.GetDocId());
revProperties.Put("_rev", rev.GetRevId());
revProperties["message"] = "hi";
rev.SetProperties(revProperties);
IList<string> revHistory = null;
database.ForceInsert(rev, revHistory, null);
}
示例3: TestForceInsertEmptyHistory
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestForceInsertEmptyHistory()
{
IList<string> revHistory = null;
RevisionInternal rev = new RevisionInternal("FakeDocId", "1-tango", false, database
);
IDictionary<string, object> revProperties = new Dictionary<string, object>();
revProperties.Put("_id", rev.GetDocId());
revProperties.Put("_rev", rev.GetRevId());
revProperties.Put("message", "hi");
rev.SetProperties(revProperties);
database.ForceInsert(rev, revHistory, null);
}
示例4: ExpandStoredJSONIntoRevisionWithAttachments
public void ExpandStoredJSONIntoRevisionWithAttachments(byte[] json, RevisionInternal
rev, EnumSet<Database.TDContentOptions> contentOptions)
{
IDictionary<string, object> extra = ExtraPropertiesForRevision(rev, contentOptions
);
if (json != null)
{
rev.SetJson(AppendDictToJSON(json, extra));
}
else
{
rev.SetProperties(extra);
}
}
示例5: SetupRevisionBodyTransformationFunction
private void SetupRevisionBodyTransformationFunction()
{
var xformer = TransformationFunction;
if (xformer != null)
{
RevisionBodyTransformationFunction = (rev) =>
{
var properties = rev.GetProperties();
var xformedProperties = xformer(properties);
if (xformedProperties == null)
{
return null;
}
if (xformedProperties != properties) {
Debug.Assert (xformedProperties != null);
Debug.Assert (xformedProperties ["_id"].Equals (properties ["_id"]));
Debug.Assert (xformedProperties ["_rev"].Equals (properties ["_rev"]));
var nuRev = new RevisionInternal (rev.GetProperties ());
nuRev.SetProperties (xformedProperties);
return nuRev;
}
return rev;
};
}
}
示例6: UpdateAttachment
/// <summary>Updates or deletes an attachment, creating a new document revision in the process.
/// </summary>
/// <remarks>
/// Updates or deletes an attachment, creating a new document revision in the process.
/// Used by the PUT / DELETE methods called on attachment URLs.
/// </remarks>
/// <exclude></exclude>
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
internal RevisionInternal UpdateAttachment(string filename, BlobStoreWriter body, string contentType, AttachmentEncoding encoding, string docID, string oldRevID)
{
if(StringEx.IsNullOrWhiteSpace(filename) || (body != null && contentType == null) ||
(oldRevID != null && docID == null) || (body != null && docID == null)) {
throw new CouchbaseLiteException(StatusCode.BadAttachment);
}
var oldRev = new RevisionInternal(docID, oldRevID, false);
if (oldRevID != null) {
// Load existing revision if this is a replacement:
try {
oldRev = LoadRevisionBody(oldRev);
} catch (CouchbaseLiteException e) {
if (e.Code == StatusCode.NotFound && GetDocument(docID, null, false) != null) {
throw new CouchbaseLiteException(StatusCode.Conflict);
}
throw;
}
} else {
// If this creates a new doc, it needs a body:
oldRev.SetBody(new Body(new Dictionary<string, object>()));
}
// Update the _attachments dictionary:
var attachments = oldRev.GetProperties().Get("_attachments").AsDictionary<string, object>();
if (attachments == null) {
attachments = new Dictionary<string, object>();
}
if (body != null) {
var key = body.GetBlobKey();
string digest = key.Base64Digest();
RememberAttachmentWriter(body);
string encodingName = (encoding == AttachmentEncoding.GZIP) ? "gzip" : null;
attachments[filename] = new NonNullDictionary<string, object> {
{ "digest", digest },
{ "length", body.GetLength() },
{ "follows", true },
{ "content_type", contentType },
{ "encoding", encodingName }
};
} else {
if (oldRevID != null && attachments.Get(filename) == null) {
throw new CouchbaseLiteException(StatusCode.AttachmentNotFound);
}
attachments.Remove(filename);
}
var properties = oldRev.GetProperties();
properties["_attachments"] = attachments;
oldRev.SetProperties(properties);
Status status = new Status();
var newRev = PutRevision(oldRev, oldRevID, false, status);
if (status.IsError) {
throw new CouchbaseLiteException(status.Code);
}
return newRev;
}
示例7: PutDocument
internal RevisionInternal PutDocument(string docId, IDictionary<string, object> properties, string prevRevId, bool allowConflict, Status resultStatus)
{
bool deleting = properties == null || properties.GetCast<bool>("_deleted");
Log.D(TAG, "PUT _id={0}, _rev={1}, _deleted={2}, allowConflict={3}", docId, prevRevId, deleting, allowConflict);
if ((prevRevId != null && docId == null) || (deleting && docId == null)) {
if (resultStatus != null) {
resultStatus.Code = StatusCode.BadId;
return null;
}
}
if (properties != null && properties.Get("_attachments").AsDictionary<string, object>() != null) {
var tmpRev = new RevisionInternal(docId, prevRevId, deleting);
tmpRev.SetProperties(properties);
if (!ProcessAttachmentsForRevision(tmpRev, prevRevId, resultStatus)) {
return null;
}
properties = tmpRev.GetProperties();
}
StoreValidation validationBlock = null;
if (Shared.HasValues("validation", Name)) {
validationBlock = ValidateRevision;
}
var putRev = Storage.PutRevision(docId, prevRevId, properties, deleting, allowConflict, validationBlock, resultStatus);
if (putRev != null) {
Log.D(TAG, "--> created {0}", putRev);
if (!string.IsNullOrEmpty(docId)) {
UnsavedRevisionDocumentCache.Remove(docId);
}
}
return putRev;
}
示例8: PutLocalDocument
/// <summary>
/// Sets the contents of the local <see cref="Couchbase.Lite.Document" /> with the given id. If <param name="properties"/> is null, the
/// <see cref="Couchbase.Lite.Document" /> is deleted.
/// </summary>
/// <param name="id">The id of the local document whos contents to set.</param>
/// <param name="properties">The contents to set for the local document.</param>
/// <exception cref="Couchbase.Lite.CouchbaseLiteException">Thrown if an issue occurs
/// while setting the contents of the local document.</exception>
public void PutLocalDocument(String id, IDictionary<String, Object> properties)
{
// TODO: the iOS implementation wraps this in a transaction, this should do the same.
id = MakeLocalDocumentId(id);
var prevRev = GetLocalDocument(id, null);
if (prevRev == null && properties == null)
{
return;
}
var deleted = false || properties == null;
var rev = new RevisionInternal(id, null, deleted, this);
if (properties != null)
{
rev.SetProperties(properties);
}
var success = false;
if (prevRev == null)
{
success = PutLocalRevision(rev, null) != null;
}
else
{
success = PutLocalRevision(rev, prevRev.GetRevId()) != null;
}
if (!success)
{
throw new CouchbaseLiteException("Unable to put local revision with id " + id);
}
}
示例9: GetLocalDocument
internal RevisionInternal GetLocalDocument(string docID, string revID)
{
// docID already should contain "_local/" prefix
RevisionInternal result = null;
Cursor cursor = null;
try
{
var args = new [] { docID };
cursor = StorageEngine.RawQuery("SELECT revid, json FROM localdocs WHERE docid=?", CommandBehavior.SequentialAccess, args);
if (cursor.MoveToNext())
{
var gotRevID = cursor.GetString(0);
if (revID != null && (!revID.Equals(gotRevID)))
{
return null;
}
var json = cursor.GetBlob(1);
IDictionary<string, object> properties = null;
try
{
properties = Manager.GetObjectMapper().ReadValue<IDictionary<String, Object>>(json);
properties["_id"] = docID;
properties["_rev"] = gotRevID;
result = new RevisionInternal(docID, gotRevID, false, this);
result.SetProperties(properties);
}
catch (Exception e)
{
Log.W(Tag, "Error parsing local doc JSON", e);
return null;
}
}
return result;
}
catch (SQLException e)
{
Log.E(Tag, "Error getting local document", e);
return null;
}
finally
{
if (cursor != null)
{
cursor.Close();
}
}
}
示例10: TestPulledChangesAreExternal
public void TestPulledChangesAreExternal()
{
var changeNotifications = 0;
EventHandler<DatabaseChangeEventArgs> handler = (sender, e) =>
{
changeNotifications++;
Assert.IsTrue(e.IsExternal);
};
database.Changed += handler;
// Insert a dcoument as if it came from a remote source.
var rev = new RevisionInternal("docId", "1-rev", false, database);
var properties = new Dictionary<string, object>();
properties["_id"] = rev.GetDocId();
properties["_rev"] = rev.GetRevId();
rev.SetProperties(properties);
var history = new List<string>();
history.Add(rev.GetRevId());
database.ForceInsert(rev, history, GetReplicationURL());
Assert.AreEqual(1, changeNotifications);
// Analysis disable once DelegateSubtraction
database.Changed -= handler;
}
示例11: TestRevTree
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestRevTree()
{
RevisionInternal rev = new RevisionInternal("MyDocId", "4-foxy", false, database);
IDictionary<string, object> revProperties = new Dictionary<string, object>();
revProperties.Put("_id", rev.GetDocId());
revProperties.Put("_rev", rev.GetRevId());
revProperties.Put("message", "hi");
rev.SetProperties(revProperties);
IList<string> revHistory = new AList<string>();
revHistory.AddItem(rev.GetRevId());
revHistory.AddItem("3-thrice");
revHistory.AddItem("2-too");
revHistory.AddItem("1-won");
database.ForceInsert(rev, revHistory, null);
NUnit.Framework.Assert.AreEqual(1, database.GetDocumentCount());
VerifyHistory(database, rev, revHistory);
RevisionInternal conflict = new RevisionInternal("MyDocId", "5-epsilon", false, database
);
IDictionary<string, object> conflictProperties = new Dictionary<string, object>();
conflictProperties.Put("_id", conflict.GetDocId());
conflictProperties.Put("_rev", conflict.GetRevId());
conflictProperties.Put("message", "yo");
conflict.SetProperties(conflictProperties);
IList<string> conflictHistory = new AList<string>();
conflictHistory.AddItem(conflict.GetRevId());
conflictHistory.AddItem("4-delta");
conflictHistory.AddItem("3-gamma");
conflictHistory.AddItem("2-too");
conflictHistory.AddItem("1-won");
IList wasInConflict = new ArrayList();
Database.ChangeListener listener = new _ChangeListener_84(wasInConflict);
database.AddChangeListener(listener);
database.ForceInsert(conflict, conflictHistory, null);
NUnit.Framework.Assert.IsTrue(wasInConflict.Count > 0);
database.RemoveChangeListener(listener);
NUnit.Framework.Assert.AreEqual(1, database.GetDocumentCount());
VerifyHistory(database, conflict, conflictHistory);
// Add an unrelated document:
RevisionInternal other = new RevisionInternal("AnotherDocID", "1-ichi", false, database
);
IDictionary<string, object> otherProperties = new Dictionary<string, object>();
otherProperties.Put("language", "jp");
other.SetProperties(otherProperties);
IList<string> otherHistory = new AList<string>();
otherHistory.AddItem(other.GetRevId());
database.ForceInsert(other, otherHistory, null);
// Fetch one of those phantom revisions with no body:
RevisionInternal rev2 = database.GetDocumentWithIDAndRev(rev.GetDocId(), "2-too",
EnumSet.NoneOf<Database.TDContentOptions>());
NUnit.Framework.Assert.AreEqual(rev.GetDocId(), rev2.GetDocId());
NUnit.Framework.Assert.AreEqual("2-too", rev2.GetRevId());
//Assert.assertNull(rev2.getContent());
// Make sure no duplicate rows were inserted for the common revisions:
NUnit.Framework.Assert.AreEqual(8, database.GetLastSequenceNumber());
// Make sure the revision with the higher revID wins the conflict:
RevisionInternal current = database.GetDocumentWithIDAndRev(rev.GetDocId(), null,
EnumSet.NoneOf<Database.TDContentOptions>());
NUnit.Framework.Assert.AreEqual(conflict, current);
// Get the _changes feed and verify only the winner is in it:
ChangesOptions options = new ChangesOptions();
RevisionList changes = database.ChangesSince(0, options, null);
RevisionList expectedChanges = new RevisionList();
expectedChanges.AddItem(conflict);
expectedChanges.AddItem(other);
NUnit.Framework.Assert.AreEqual(changes, expectedChanges);
options.SetIncludeConflicts(true);
changes = database.ChangesSince(0, options, null);
expectedChanges = new RevisionList();
expectedChanges.AddItem(rev);
expectedChanges.AddItem(conflict);
expectedChanges.AddItem(other);
NUnit.Framework.Assert.AreEqual(changes, expectedChanges);
}
示例12: TestRevTreeChangeNotifications
/// <summary>
/// Test that the public API works as expected in change notifications after a rev tree
/// insertion.
/// </summary>
/// <remarks>
/// Test that the public API works as expected in change notifications after a rev tree
/// insertion. See https://github.com/couchbase/couchbase-lite-android-core/pull/27
/// </remarks>
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestRevTreeChangeNotifications()
{
string DocumentId = "MyDocId";
// add a document with a single (first) revision
RevisionInternal rev = new RevisionInternal(DocumentId, "1-one", false, database);
IDictionary<string, object> revProperties = new Dictionary<string, object>();
revProperties.Put("_id", rev.GetDocId());
revProperties.Put("_rev", rev.GetRevId());
revProperties.Put("message", "hi");
rev.SetProperties(revProperties);
IList<string> revHistory = Arrays.AsList(rev.GetRevId());
Database.ChangeListener listener = new _ChangeListener_154(this, DocumentId, rev);
database.AddChangeListener(listener);
database.ForceInsert(rev, revHistory, null);
database.RemoveChangeListener(listener);
// add two more revisions to the document
RevisionInternal rev3 = new RevisionInternal(DocumentId, "3-three", false, database
);
IDictionary<string, object> rev3Properties = new Dictionary<string, object>();
rev3Properties.Put("_id", rev3.GetDocId());
rev3Properties.Put("_rev", rev3.GetRevId());
rev3Properties.Put("message", "hi again");
rev3.SetProperties(rev3Properties);
IList<string> rev3History = Arrays.AsList(rev3.GetRevId(), "2-two", rev.GetRevId(
));
listener = new _ChangeListener_182(this, DocumentId, rev3);
database.AddChangeListener(listener);
database.ForceInsert(rev3, rev3History, null);
database.RemoveChangeListener(listener);
// add a conflicting revision, with the same history length as the last revision we
// inserted. Since this new revision's revID has a higher ASCII sort, it should become the
// new winning revision.
RevisionInternal conflictRev = new RevisionInternal(DocumentId, "3-winner", false
, database);
IDictionary<string, object> conflictProperties = new Dictionary<string, object>();
conflictProperties.Put("_id", conflictRev.GetDocId());
conflictProperties.Put("_rev", conflictRev.GetRevId());
conflictProperties.Put("message", "winner");
conflictRev.SetProperties(conflictProperties);
IList<string> conflictRevHistory = Arrays.AsList(conflictRev.GetRevId(), "2-two",
rev.GetRevId());
listener = new _ChangeListener_217(this, DocumentId, conflictRev);
database.AddChangeListener(listener);
database.ForceInsert(conflictRev, conflictRevHistory, null);
database.RemoveChangeListener(listener);
}
示例13: GetLocalDocument
public RevisionInternal GetLocalDocument(string docID, string revID)
{
// docID already should contain "_local/" prefix
RevisionInternal result = null;
Cursor cursor = null;
try
{
string[] args = new string[] { docID };
cursor = database.RawQuery("SELECT revid, json FROM localdocs WHERE docid=?", args
);
if (cursor.MoveToNext())
{
string gotRevID = cursor.GetString(0);
if (revID != null && (!revID.Equals(gotRevID)))
{
return null;
}
byte[] json = cursor.GetBlob(1);
IDictionary<string, object> properties = null;
try
{
properties = Manager.GetObjectMapper().ReadValue<IDictionary>(json);
properties.Put("_id", docID);
properties.Put("_rev", gotRevID);
result = new RevisionInternal(docID, gotRevID, false, this);
result.SetProperties(properties);
}
catch (Exception e)
{
Log.W(Database.Tag, "Error parsing local doc JSON", e);
return null;
}
}
return result;
}
catch (SQLException e)
{
Log.E(Database.Tag, "Error getting local document", e);
return null;
}
finally
{
if (cursor != null)
{
cursor.Close();
}
}
}
示例14: PutLocalDocument
public bool PutLocalDocument(string id, IDictionary<string, object> properties)
{
// TODO: the iOS implementation wraps this in a transaction, this should do the same.
id = MakeLocalDocumentId(id);
RevisionInternal prevRev = GetLocalDocument(id, null);
if (prevRev == null && properties == null)
{
return false;
}
bool deleted = false;
if (properties == null)
{
deleted = true;
}
RevisionInternal rev = new RevisionInternal(id, null, deleted, this);
if (properties != null)
{
rev.SetProperties(properties);
}
if (prevRev == null)
{
return PutLocalRevision(rev, null) != null;
}
else
{
return PutLocalRevision(rev, prevRev.GetRevId()) != null;
}
}
示例15: StubOutAttachmentsIn
public void StubOutAttachmentsIn(RevisionInternal rev, int minRevPos)
{
if (minRevPos <= 1)
{
return;
}
IDictionary<string, object> properties = (IDictionary<string, object>)rev.GetProperties
();
IDictionary<string, object> attachments = null;
if (properties != null)
{
attachments = (IDictionary<string, object>)properties.Get("_attachments");
}
IDictionary<string, object> editedProperties = null;
IDictionary<string, object> editedAttachments = null;
foreach (string name in attachments.Keys)
{
IDictionary<string, object> attachment = (IDictionary<string, object>)attachments
.Get(name);
int revPos = (int)attachment.Get("revpos");
object stub = attachment.Get("stub");
if (revPos > 0 && revPos < minRevPos && (stub == null))
{
// Strip this attachment's body. First make its dictionary mutable:
if (editedProperties == null)
{
editedProperties = new Dictionary<string, object>(properties);
editedAttachments = new Dictionary<string, object>(attachments);
editedProperties.Put("_attachments", editedAttachments);
}
// ...then remove the 'data' and 'follows' key:
IDictionary<string, object> editedAttachment = new Dictionary<string, object>(attachment
);
Sharpen.Collections.Remove(editedAttachment, "data");
Sharpen.Collections.Remove(editedAttachment, "follows");
editedAttachment.Put("stub", true);
editedAttachments.Put(name, editedAttachment);
Log.D(Database.Tag, "Stubbed out attachment" + rev + " " + name + ": revpos" + revPos
+ " " + minRevPos);
}
}
if (editedProperties != null)
{
rev.SetProperties(editedProperties);
}
}