Package org.waveprotocol.wave.model.operation.wave

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


    Set<ParticipantId> remainingparticipants =
        Sets.newHashSet(waveletInfo.getWaveletParticipants(waveletName));
    // Participants added during the course of newDeltas.
    Set<ParticipantId> newParticipants = Sets.newHashSet();
    for (int i = 0; i < newDeltas.size(); i++) {
      TransformedWaveletDelta delta = newDeltas.get(i);
      // Participants added or removed in this delta get the whole delta.
      for (WaveletOperation op : delta) {
        if (op instanceof AddParticipant) {
          ParticipantId p = ((AddParticipant) op).getParticipantId();
          remainingparticipants.add(p);
View Full Code Here


  public static ObservableWaveletData buildWaveletFromDeltas(WaveletName waveletName,
      Iterator<TransformedWaveletDelta> deltas) throws OperationException {
    Preconditions.checkArgument(deltas.hasNext(), "empty deltas");
    ObservableWaveletData wavelet = buildWaveletFromFirstDelta(waveletName, deltas.next());
    while (deltas.hasNext()) {
      TransformedWaveletDelta delta = deltas.next();
      applyWaveletDelta(delta, wavelet);
    }
    return wavelet;
  }
View Full Code Here

      }
    }
    WaveletOperationContext context =
        new WaveletOperationContext(author, applicationTimestamp, 1, resultingVersion);
    ops.add(deserialize(delta.getOperation(count - 1), context));
    return new TransformedWaveletDelta(author, resultingVersion, applicationTimestamp, ops);
  }
View Full Code Here

      } else {
        context = new WaveletOperationContext(author, applicationTimestamp, 1);
      }
      operations.add(CoreWaveletOperationSerializer.deserialize(delta.getOperation(i), context));
    }
    return new TransformedWaveletDelta(author, resultingVersion, applicationTimestamp, operations.build());
  }
View Full Code Here

   * @throws IllegalArgumentException if any of the deltas' end version disagrees
   *         with the next delta's version.
   */
  private void checkDeltaVersions() {
    for (int i = 0; i < deltas.size(); i++) {
      TransformedWaveletDelta delta = deltas.get(i);
      long deltaEndVersion = delta.getResultingVersion().getVersion();
      if (i + 1 < deltas.size()) {
        long nextVersion = deltas.get(i + 1).getAppliedAtVersion();
        Preconditions.checkArgument(deltaEndVersion == nextVersion,
            "Delta %s / %s ends at version %s, next begins at %s",
            i + 1, deltas.size(), deltaEndVersion, nextVersion);
View Full Code Here

   * @throws IllegalArgumentException if any of the deltas' end version disagrees
   *         with the next delta's version.
   */
  private void checkDeltaVersions() {
    for (int i = 0; i < deltas.size(); i++) {
      TransformedWaveletDelta delta = deltas.get(i);
      long deltaEndVersion = delta.getResultingVersion().getVersion();
      if (i + 1 < deltas.size()) {
        long nextVersion = deltas.get(i + 1).getAppliedAtVersion();
        Preconditions.checkArgument(deltaEndVersion == nextVersion,
            "Delta %s / %s ends at version %s, next begins at %s",
            i + 1, deltas.size(), deltaEndVersion, nextVersion);
View Full Code Here

  /**
   * Creates a container message mimicking a resync message for a wavelet at
   * version zero.
   */
  private List<TransformedWaveletDelta> createVersionZeroResync(WaveletName wavelet) {
    return Collections.singletonList(new TransformedWaveletDelta((ParticipantId) null,
        hashFactory.createVersionZero(wavelet), 0L, Collections.<WaveletOperation> emptyList()));
  }
View Full Code Here

                                   + delta.getTargetVersion() + ", server: "
                                   + deltaHistory.getCurrentVersion());
    }
    WaveletDelta result = delta;
    while (result.getTargetVersion().getVersion() < deltaHistory.getCurrentVersion()) {
      TransformedWaveletDelta serverDelta =
          deltaHistory.getDeltaStartingAt(result.getTargetVersion().getVersion());
      if (serverDelta == null) {
        // Note that this will trigger if the available history changes out from
        // under us. This should not happen as the caller of this method should
        // control changes to the underlying set via locks, e.g. writeLock in
        // the WS's WaveletContext.
        throw new IllegalStateException("No delta at version: " + result.getTargetVersion());
      }
      DeltaPair pair = new DeltaPair(result, serverDelta).transform();
      result = new WaveletDelta(delta.getAuthor(), serverDelta.getResultingVersion(),
          pair.getClient());
    }
    return result;
  }
View Full Code Here

  public ReOpenInfo reopen(List<HashedVersion> clientKnownSignatures) {
    List<TransformedWaveletDelta> deltas = CollectionUtils.newArrayList();
    // Find the most recent delta.
    for (int i = clientKnownSignatures.size() - 1; i >= 0; i--) {
      if (deltaHistory.hasSignature(clientKnownSignatures.get(i))) {
        TransformedWaveletDelta old =
            deltaHistory.getDeltaStartingAt(clientKnownSignatures.get(i).getVersion());
        while (old != null) {
          deltas.add(old);
          old = deltaHistory.getDeltaStartingAt(old.getResultingVersion().getVersion());
        }
        return new ReOpenInfo(clientKnownSignatures.get(i), deltas);
      }
    }
    return null;
View Full Code Here

      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);
View Full Code Here

TOP

Related Classes of org.waveprotocol.wave.model.operation.wave.TransformedWaveletDelta

Copyright © 2018 www.massapicom. 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.