private void DoStore(IStorable storable, IAuditMetadata auditMeta) { AuditOperation operation = AuditOperation.UPDATE; // ensure db id StorableDocument doc = (StorableDocument)storable; long dbId = doc.DbId is long?(long)doc.DbId : -1; if (dbId == -1) { dbId = ++lastDbId; storable.SetData("dbId", dbId); } IDictionary <string, object> document = new Dictionary <string, object>(); if (documents.ContainsKey(dbId)) { documents[dbId].Document.ToList().ForEach(kvp => document[kvp.Key] = kvp.Value); } else { operation = AuditOperation.INSERT; } doc.Document.ToList().ForEach(kvp => document[kvp.Key] = kvp.Value); doc = new StorableDocument(doc.Categories, null); doc.Document = document; documents[dbId] = doc; AuditRecord audit = NewAuditRecord(auditMeta); audit.InstanceDbId = dbId; audit.Operation = operation; audit.Instance = doc; auditRecords[audit.DbId] = audit; }
private void DoDelete(ICollection <object> idsToDelete, IAuditMetadata auditMeta) { foreach (object id in idsToDelete) { DoDelete(id, auditMeta); } }
private void DoStore(ICollection <IStorable> docsToStore, IAuditMetadata auditMeta) { foreach (IStorable storable in docsToStore) { DoStore(storable, auditMeta); } }
private IAuditMetadata StoreAuditMetadata(IAuditMetadata auditMeta) { if (auditMeta == null) { auditMeta = NewAuditMetadata(); } auditMetadatas[auditMeta.DbId] = (AuditMetadata)auditMeta; return(auditMeta); }
private AuditRecord NewAuditRecord(IAuditMetadata auditMeta) { AuditRecord audit = new AuditRecord(); audit.DbId = ++lastAuditRecordDbId; audit.MetadataDbId = auditMeta.DbId; audit.UTCTimestamp = auditMeta.UTCTimestamp; return(audit); }
private void DoDelete(object dbId, IAuditMetadata auditMeta) { documents.Remove((long)dbId); AuditRecord audit = NewAuditRecord(auditMeta); audit.InstanceDbId = dbId; audit.Operation = AuditOperation.DELETE; auditRecords[audit.DbId] = audit; }
public override IValue interpret(Context context) { List <object> toDelete = null; if (deletables != null) { toDelete = new List <object>(); deletables.ForEach((exp) => CollectDeletables(context, exp, toDelete)); } List <IStorable> toStore = null; if (storables != null) { toStore = new List <IStorable>(); storables.ForEach((exp) => CollectStorables(context, exp, toStore)); } if (deletables != null || storables != null) { IAuditMetadata withMeta = null; if (metadata != null) { IValue value = metadata.interpret(context); if (value is DocumentValue) { DocumentValue doc = (DocumentValue)value; withMeta = DataStore.Instance.NewAuditMetadata(); foreach (String name in doc.GetMemberNames()) { value = doc.GetMemberValue(context, name, false); withMeta[name] = value.GetStorableData(); } } } DataStore.Instance.DeleteAndStore(toDelete, toStore, withMeta); } if (andThen != null) { andThen.interpret(context); } return(null); }
public void DeleteAndStore(ICollection <object> idsToDelete, ICollection <IStorable> docsToStore, IAuditMetadata auditMeta) { auditMeta = StoreAuditMetadata(auditMeta); if (idsToDelete != null) { DoDelete(idsToDelete, auditMeta); } if (docsToStore != null) { DoStore(docsToStore, auditMeta); } ; }