public override IList<BlipOperation> ApplyAndReturnReverse(IBlipData target) { var reverseContext = CreateReverseContext(target); // Update metadata var reverseMethod = Update(target, _method); target.Content.Consume(ContentOp); var reverseContentOp = DocOpInverter<IDocOp>.Invert(ContentOp); var reverseOp = new BlipContentOperation(reverseContext, reverseContentOp, reverseMethod); return new ReadOnlyCollection<BlipOperation>(new BlipOperation[] { reverseOp }); }
public void ReverseRestoresContent() { var op = new BlipContentOperation(Context, docOp); var blip = WaveletData.CreateDocument("root", Fred, NoParticipants, EmptyDocument.Empty, new DateTime(), 0L); var reverseOps = op.ApplyAndReturnReverse(blip); foreach (var reverse in reverseOps) { reverse.Apply(blip); } blip.Contributors.Should().BeEmpty(); //blip.Content.Should().Be(""); }
public void Apply() { var op = new BlipContentOperation(Context, docOp); var holderFactory = WaveNET.Core.Model.Wave.Data.WaveletData.WaveletDataFactory.Create(A.Fake<IDocumentFactory>()); var wavelet = WaveletDataFactory<IWaveletData>.Of(holderFactory).Create(); var blip = wavelet.CreateDocument("root", Jane, NoParticipants, EmptyDocument.Empty, new DateTime(), 0L); op.Apply(blip); // editing the document makes the op creator a blip contributor blip.Contributors.Should().Contain(Fred); // the op eventually reached the document //docOp.Should().Be(blip.Content); //// the op eventually reached the document //assertEquals(docOp, ((FakeDocument)blip.getContent()).getConsumed()); //// editing the document makes the op creator a blip contributor //assertEquals(Collections.singleton(fred), blip.getContributors()); }
public static OperationPair<BlipOperation> Transform(BlipOperation clientOperation, BlipOperation serverOperation) { if (clientOperation is BlipContentOperation && serverOperation is BlipContentOperation) { var clientBlipContentOp = (BlipContentOperation) clientOperation; var serverBlipContentOp = (BlipContentOperation) serverOperation; IDocOp clientContentOp = clientBlipContentOp.ContentOp; IDocOp serverContentOp = serverBlipContentOp.ContentOp; OperationPair<IDocOp> transformedDocOps = Transform(clientContentOp, serverContentOp); clientOperation = new BlipContentOperation(clientBlipContentOp.Context, transformedDocOps.ClientOperation); serverOperation = new BlipContentOperation(serverBlipContentOp.Context, transformedDocOps.ServerOperation); } // Apply identity transform by default return new OperationPair<BlipOperation>(clientOperation, serverOperation); }