protected ReadableWaveletData accessSnapshot() { return waveletState.getSnapshot(); } }
@Override public ParticipantId getCreator() { ReadableWaveletData snapshot = waveletState.getSnapshot(); return snapshot != null ? snapshot.getCreator() : null; }
protected void notifyOfDeltas(ImmutableList<WaveletDeltaRecord> deltas, ImmutableSet<String> domainsToNotify) { Preconditions.checkState(writeLock.isHeldByCurrentThread(), "must hold write lock"); Preconditions.checkArgument(!deltas.isEmpty(), "empty deltas"); HashedVersion endVersion = deltas.get(deltas.size() - 1).getResultingVersion(); HashedVersion currentVersion = getCurrentVersion(); Preconditions.checkArgument(endVersion.equals(currentVersion), "cannot notify of deltas ending in %s != current version %s", endVersion, currentVersion); notifiee.waveletUpdate(waveletState.getSnapshot(), deltas, domainsToNotify); }
@Override public <T> T applyFunction(Function<ReadableWaveletData, T> function) throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return function.apply(waveletState.getSnapshot()); } finally { releaseReadLock(); } }
@Override public boolean hasParticipant(ParticipantId participant) throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); ReadableWaveletData snapshot = waveletState.getSnapshot(); return snapshot != null && snapshot.getParticipants().contains(participant); } finally { releaseReadLock(); } }
@Override public boolean isEmpty() throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return waveletState.getSnapshot() == null; } finally { releaseReadLock(); } }
@Override public ObservableWaveletData copyWaveletData() throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return WaveletDataUtil.copyWavelet(waveletState.getSnapshot()); } finally { releaseReadLock(); } }
@Override public boolean checkAccessPermission(ParticipantId participantId) throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); // ParticipantId will be null if the user isn't logged in. A user who isn't logged in should // have access to public waves once they've been implemented. // If the wavelet is empty, everyone has access (to write the first delta). // TODO(soren): determine if off-domain participants should be denied access if empty ReadableWaveletData snapshot = waveletState.getSnapshot(); return WaveletDataUtil.checkAccessPermission(snapshot, participantId, sharedDomainParticipantId); } finally { releaseReadLock(); } }
@Override public CommittedWaveletSnapshot getSnapshot() throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return new CommittedWaveletSnapshot(waveletState.getSnapshot(), waveletState.getLastPersistedVersion()); } finally { releaseReadLock(); } }
public void testEmptyStateIsEmpty() { assertNull(target.getSnapshot()); assertEquals(V0, target.getCurrentVersion()); assertEquals(V0, target.getHashedVersion(0)); assertNull(target.getTransformedDelta(V0)); assertNull(target.getAppliedDelta(V0)); }
public void testEmptyStateIsEmpty() { assertNull(target.getSnapshot()); assertEquals(V0, target.getCurrentVersion()); assertEquals(V0, target.getHashedVersion(0)); assertNull(target.getTransformedDelta(V0)); assertNull(target.getAppliedDelta(V0)); }
public void testSnapshotMetadataReflectsDeltas() throws Exception { HashedVersion v2 = d1.getResultingVersion(); appendDeltas(d1); assertEquals(v2, target.getCurrentVersion()); ReadableWaveletData snapshot = target.getSnapshot(); assertEquals(AUTHOR, snapshot.getCreator()); assertEquals(v2, snapshot.getHashedVersion()); assertEquals(TS, snapshot.getCreationTime()); assertEquals(TS, snapshot.getLastModifiedTime()); assertEquals(2, snapshot.getVersion()); HashedVersion v4 = d2.getResultingVersion(); appendDeltas(d2); assertEquals(v4, target.getCurrentVersion()); snapshot = target.getSnapshot(); assertEquals(v4, snapshot.getHashedVersion()); assertEquals(4, snapshot.getVersion()); // Last-modified-time doesn't change due to unworthiness. }
public void testSnapshotMetadataReflectsDeltas() throws Exception { HashedVersion v2 = d1.getResultingVersion(); appendDeltas(d1); assertEquals(v2, target.getCurrentVersion()); ReadableWaveletData snapshot = target.getSnapshot(); assertEquals(AUTHOR, snapshot.getCreator()); assertEquals(v2, snapshot.getHashedVersion()); assertEquals(TS, snapshot.getCreationTime()); assertEquals(TS, snapshot.getLastModifiedTime()); assertEquals(2, snapshot.getVersion()); HashedVersion v4 = d2.getResultingVersion(); appendDeltas(d2); assertEquals(v4, target.getCurrentVersion()); snapshot = target.getSnapshot(); assertEquals(v4, snapshot.getHashedVersion()); assertEquals(4, snapshot.getVersion()); // Last-modified-time doesn't change due to unworthiness. }