public void BundleTypeHandling() { Bundle b = new Bundle(); Assert.IsTrue(b.GetBundleType() == BundleType.Unspecified); b.SetBundleType(BundleType.Message); Assert.AreEqual(BundleType.Message, b.GetBundleType()); Assert.AreEqual(1,b.Tags.Count()); b.SetBundleType(BundleType.Document); Assert.AreEqual(BundleType.Document, b.GetBundleType()); Assert.AreEqual(1, b.Tags.Count()); b.SetBundleType(BundleType.Unspecified); Assert.AreEqual(0, b.Tags.Count()); }
public Bundle Mailbox(Bundle bundle, Binary body) { // todo: this is not DSTU-1 conformant. if(bundle == null || body == null) throw new SparkException("Mailbox requires a Bundle body payload"); // For the connectathon, this *must* be a document bundle if (bundle.GetBundleType() != BundleType.Document) throw new SparkException("Mailbox endpoint currently only accepts Document feeds"); Bundle result = new Bundle("Transaction result from posting of Document " + bundle.Id, DateTimeOffset.Now); // Build a binary with the original body content (=the unparsed Document) var binaryEntry = new ResourceEntry<Binary>(new Uri("cid:" + Guid.NewGuid()), DateTimeOffset.Now, body); binaryEntry.SelfLink = new Uri("cid:" + Guid.NewGuid()); // Build a new DocumentReference based on the 1 composition in the bundle, referring to the binary var compositions = bundle.Entries.OfType<ResourceEntry<Composition>>(); if (compositions.Count() != 1) throw new SparkException("Document feed should contain exactly 1 Composition resource"); var composition = compositions.First().Resource; var reference = ConnectathonDocumentScenario.DocumentToDocumentReference(composition, bundle, body, binaryEntry.SelfLink); // Start by copying the original entries to the transaction, minus the Composition List<BundleEntry> entriesToInclude = new List<BundleEntry>(); //TODO: Only include stuff referenced by DocumentReference //if(reference.Subject != null) entriesToInclude.AddRange(bundle.Entries.ById(new Uri(reference.Subject.Reference))); //if (reference.Author != null) entriesToInclude.AddRange( // reference.Author.Select(auth => bundle.Entries.ById(auth.Id)).Where(be => be != null)); //reference.Subject = composition.Subject; //reference.Author = new List<ResourceReference>(composition.Author); //reference.Custodian = composition.Custodian; foreach (var entry in bundle.Entries.Where(be => !(be is ResourceEntry<Composition>))) result.Entries.Add(entry); // Now add the newly constructed DocumentReference and the Binary result.Entries.Add(new ResourceEntry<DocumentReference>(new Uri("cid:" + Guid.NewGuid()), DateTimeOffset.Now, reference)); result.Entries.Add(binaryEntry); // Process the constructed bundle as a Transaction and return the result return Transaction(result); }