@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 HashedVersion getLastCommittedVersion() throws WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); return waveletState.getLastPersistedVersion(); } 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 void requestHistory(HashedVersion startVersion, HashedVersion endVersion, Receiver<ByteStringMessage<ProtocolAppliedWaveletDelta>> receiver) throws AccessControlException, WaveletStateException { acquireReadLock(); try { checkStateOk(); checkVersionIsDeltaBoundary(startVersion, "start version"); checkVersionIsDeltaBoundary(endVersion, "end version"); waveletState.getAppliedDeltaHistory(startVersion, endVersion, receiver); } 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(); } }
@Override public void requestTransformedHistory(HashedVersion startVersion, HashedVersion endVersion, Receiver<TransformedWaveletDelta> receiver) throws AccessControlException, WaveletStateException { awaitLoad(); acquireReadLock(); try { checkStateOk(); checkVersionIsDeltaBoundary(startVersion, "start version"); checkVersionIsDeltaBoundary(endVersion, "end version"); waveletState.getTransformedDeltaHistory(startVersion, endVersion, receiver); } finally { releaseReadLock(); } }