Examples of WaveletDelta


Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

      if (ops.isEmpty()) {
        // No ops to generate delta for
        continue;
      }
      WaveletDelta delta = new WaveletDelta(author, snapshotVersion, ops);
      deltas.add(delta);
    }
    return deltas;
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

  }

  public void testOperationsOfDifferentSizes() throws Exception {
    String docId = "b+somedoc";
    DocOp docOp1 = new DocOpBuilder().characters("hi").build();
    WaveletDelta delta1 = createDelta(docId, docOp1, localVersion0);

    WaveServerTestUtil.applyDeltaToWavelet(localWavelet, delta1, 0L);
    try {
      DocOp docOp2 = new DocOpBuilder().characters("bye").build();
      WaveletDelta delta2 = createDelta(docId, docOp2, localWavelet.getCurrentVersion());

      WaveServerTestUtil.applyDeltaToWavelet(localWavelet, delta2, 0L);
      fail("Composition of \"hi\" and \"bye\" did not throw OperationException");
    } catch (OperationException expected) {
      // Correct
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

  /**
   * Returns a {@link WaveletDelta} for the list of operations performed by
   * the author set in the constants.
   */
  private WaveletDelta createDelta(String docId, DocOp docOp, HashedVersion version) {
    return new WaveletDelta(author, version, Arrays.asList(new WaveletBlipOperation(
        docId, new BlipContentOperation(CONTEXT, docOp))));
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

    }
    assertEquals(with.accessSnapshot().getParticipants(), participants);
  }

  private static WaveletDelta addParticipantDelta(WaveletContainerImpl target) {
    return new WaveletDelta(author, target.getCurrentVersion(), addParticipantOps);
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

  private static ProtocolWaveletDelta addParticipantProtoDelta(WaveletContainerImpl target) {
    return serialize(addParticipantDelta(target));
  }

  private static WaveletDelta removeParticipantDelta(WaveletContainerImpl target) {
    return new WaveletDelta(author, target.getCurrentVersion(), removeParticipantOps);
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

  private static ProtocolWaveletDelta removeParticipantProtoDelta(WaveletContainerImpl target) {
    return serialize(removeParticipantDelta(target));
  }

  private static WaveletDelta doubleRemoveParticipantDelta(WaveletContainerImpl target) {
    return new WaveletDelta(author, target.getCurrentVersion(),
        doubleRemoveParticipantOps);
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

        CoreWaveletOperationSerializer.serialize(op), OP_CONTEXT));

    List<WaveletOperation> ops = ImmutableList.of(op, op, op);
    ParticipantId author = new ParticipantId("kalman@google.com");
    HashedVersion hashedVersion = HashedVersion.unsigned(0);
    WaveletDelta delta = new WaveletDelta(author, hashedVersion, ops);
    ProtocolWaveletDelta serialized = CoreWaveletOperationSerializer.serialize(delta);
    WaveletDelta deserialized = CoreWaveletOperationSerializer.deserialize(serialized);
    assertEquals(hashedVersion.getVersion(), serialized.getHashedVersion().getVersion());
    assertTrue(Arrays.equals(hashedVersion.getHistoryHash(),
        serialized.getHashedVersion().getHistoryHash().toByteArray()));
    assertDeepEquals(delta, deserialized);
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

    ProtocolWaveletDelta protocolDelta =
        ByteStringMessage.parseProtocolWaveletDelta(signedDelta.getDelta()).getMessage();

    Preconditions.checkArgument(protocolDelta.getOperationCount() > 0, "empty delta");

    WaveletDelta transformed = maybeTransformSubmittedDelta(
        CoreWaveletOperationSerializer.deserialize(protocolDelta));

    // TODO(ljvderijk): a Clock needs to be injected here (Issue 104)
    long applicationTimestamp = System.currentTimeMillis();

    HashedVersion currentVersion = getCurrentVersion();

    // This is always false right now because the current algorithm doesn't transform ops away.
    if (transformed.size() == 0) {
      Preconditions.checkState(currentVersion.getVersion() != 0,
          "currentVersion can not be 0 if delta was transformed");
      Preconditions.checkState(
          transformed.getTargetVersion().getVersion() <= currentVersion.getVersion());
      // The delta was transformed away. That's OK but we don't call either
      // applyWaveletOperations(), because that will throw IllegalArgumentException, or
      // commitAppliedDelta(), because empty deltas cannot be part of the delta history.
      TransformedWaveletDelta emptyDelta = new TransformedWaveletDelta(transformed.getAuthor(),
          transformed.getTargetVersion(), applicationTimestamp, transformed);
      return new WaveletDeltaRecord(transformed.getTargetVersion(), null, emptyDelta);
    }

    if (!transformed.getTargetVersion().equals(currentVersion)) {
      Preconditions.checkState(
          transformed.getTargetVersion().getVersion() < currentVersion.getVersion());
      // The delta was a duplicate of an existing server delta.
      // We duplicate-eliminate it (don't apply it to the wavelet state and don't store it in
      // the delta history) and return the server delta which it was a duplicate of
      // (so delta submission becomes idempotent).
      ByteStringMessage<ProtocolAppliedWaveletDelta> existingDeltaBytes =
          lookupAppliedDelta(transformed.getTargetVersion());
      TransformedWaveletDelta dupDelta = lookupTransformedDelta(transformed.getTargetVersion());
      LOG.info("Duplicate delta " + dupDelta + " for wavelet " + getWaveletName());
      // TODO(anorth): Replace these comparisons with methods on delta classes.
      Preconditions.checkState(dupDelta.getAuthor().equals(transformed.getAuthor()),
          "Duplicate delta detected but mismatched author, expected %s found %s",
          transformed.getAuthor(), dupDelta.getAuthor());
      Preconditions.checkState(Iterables.elementsEqual(dupDelta, transformed),
          "Duplicate delta detected but mismatched ops, expected %s found %s",
          transformed, dupDelta);

      return new WaveletDeltaRecord(transformed.getTargetVersion(), existingDeltaBytes, dupDelta);
    }

    // Build the applied delta to commit
    ByteStringMessage<ProtocolAppliedWaveletDelta> appliedDelta =
        AppliedDeltaUtil.buildAppliedDelta(signedDelta, transformed.getTargetVersion(),
            transformed.size(), applicationTimestamp);

    return applyDelta(appliedDelta, transformed);
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

      // If the client delta transforms to nothing before we've traversed all
      // the server deltas, return the version at which the delta was
      // obliterated (rather than the current version) to ensure that delta
      // submission is idempotent.
      if (clientOps.isEmpty()) {
        return new WaveletDelta(clientAuthor, targetVersion, clientOps);
      }
      ParticipantId serverAuthor = serverDelta.getAuthor();
      if (clientAuthor.equals(serverAuthor) && clientOps.equals(serverDelta)) {
        // This is a duplicate of the server delta.
        return new WaveletDelta(clientAuthor, targetVersion, clientOps);
      }
      clientOps = transformOps(clientOps, serverDelta);
      targetVersion = serverDelta.getResultingVersion();
    }
    Preconditions.checkState(targetVersion.equals(currentVersion));
    return new WaveletDelta(clientAuthor, targetVersion, clientOps);
  }
View Full Code Here

Examples of org.waveprotocol.wave.model.operation.wave.WaveletDelta

    WaveletOperationContext context =
        new WaveletOperationContext(author, Constants.NO_TIMESTAMP, 1);
    for (int i = 0; i < numOps; ++i) {
      ops.add(randomOp(context));
    }
    return new WaveletDelta(author, targetVersion, ops);
  }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.