/** * Appends the given deltas to the deltas already stored. Updates the latest snapshot and latest * version as well. This method will make a copy of the snapshot. * * @param updatedSnapshot the snapshot after deltas have been applied * @param newDeltas the deltas that have been applied since the last call to appendDeltas. */ public void appendDeltas(ReadableWaveletData updatedSnapshot, DeltaSequence newDeltas) { HashedVersion newEndVersion = newDeltas.getEndVersion(); Preconditions.checkArgument( !newDeltas.isEmpty(), "There were no new deltas passed to appendDeltas"); Preconditions.checkArgument( updatedSnapshot.getVersion() == newEndVersion.getVersion(), String.format( "Version of snapshot %s doesn't match the HashedVersion %s", updatedSnapshot.getVersion(), newEndVersion)); Preconditions.checkArgument( areContiguousToCurrentVersion(newDeltas), String.format( "Deltas are not contiguous to the current version(%s) %s", getVersionAfterDeltas(), deltas)); WaveletName updatedWaveletName = WaveletDataUtil.waveletNameOf(updatedSnapshot); Preconditions.checkArgument( updatedWaveletName.equals(waveletName), String.format( "Updated wavelet doesn't have the same name as with which this class has been " + "instantiated. %s != %s", updatedWaveletName, waveletName)); // TODO(ljvderijk): This should actually be applying the deltas, however // they do not contain a timestamp at this time. snapshotAfterDeltas = WaveletDataUtil.copyWavelet(updatedSnapshot); deltas = DeltaSequence.join(deltas, newDeltas); }
/** * Constructs a {@link WaveletAndDeltas} from the given {@link WaveletData} and {@link * WaveletDelta}s. * * @param preDeltasSnapshot the state of the wavelet before the deltas have been applied. * @param postDeltasSnapshot the state of the wavelet after the deltas have been applied. * @param deltas deltas in the order they have been applied to the wavelet. */ private WaveletAndDeltas( ObservableWaveletData preDeltasSnapshot, ObservableWaveletData postDeltasSnapshot, DeltaSequence deltas) { this.snapshotBeforeDeltas = preDeltasSnapshot; this.deltas = deltas; this.snapshotAfterDeltas = postDeltasSnapshot; this.waveletName = WaveletDataUtil.waveletNameOf(preDeltasSnapshot); }