@Override public DeltasAccess open(WaveletName waveletName) { Map<WaveletId, MemoryDeltaCollection> waveData = getOrCreateWaveData(waveletName.waveId); MemoryDeltaCollection collection = waveData.get(waveletName.waveletId); if (collection == null) { collection = new MemoryDeltaCollection(waveletName); waveData.put(waveletName.waveletId, collection); } return collection; }
@Override public HashedVersion getAppliedAtVersion(long version) throws InvalidProtocolBufferException { WaveletDeltaRecord delta = getDelta(version); return (delta != null) ? delta.getAppliedAtVersion() : null; }
@Override public ImmutableSet<WaveletId> lookup(WaveId waveId) { Map<WaveletId, MemoryDeltaCollection> waveData = data.get(waveId); if (waveData == null) { return ImmutableSet.of(); } else { ImmutableSet.Builder<WaveletId> builder = ImmutableSet.builder(); for (MemoryDeltaCollection collection : waveData.values()) { if (!collection.isEmpty()) { builder.add(collection.getWaveletName().waveletId); } } return builder.build(); } }
@Override public ExceptionalIterator<WaveId, PersistenceException> getWaveIdIterator() { ImmutableSet.Builder<WaveId> builder = ImmutableSet.builder(); // Filter out empty waves for (Map.Entry<WaveId, Map<WaveletId, MemoryDeltaCollection>> e : data.entrySet()) { if (!e.getValue().isEmpty()) { for (MemoryDeltaCollection collection : e.getValue().values()) { if (!collection.isEmpty()) { builder.add(e.getKey()); break; } } } } return ExceptionalIterator.FromIterator.create(builder.build().iterator()); } }
@Override public TransformedWaveletDelta getTransformedDelta(long version) { WaveletDeltaRecord delta = getDelta(version); return (delta != null) ? delta.getTransformedDelta() : null; }
@Override public ByteStringMessage<ProtocolAppliedWaveletDelta> getAppliedDelta(long version) { WaveletDeltaRecord delta = getDelta(version); return (delta != null) ? delta.getAppliedDelta() : null; }
@Override public HashedVersion getResultingVersion(long version) { WaveletDeltaRecord delta = getDelta(version); return (delta != null) ? delta.getTransformedDelta().getResultingVersion() : null; }