/** * @param waveletName the waveletName. * @return the wavelet participants. */ public Set<ParticipantId> getWaveletParticipants(WaveletName waveletName) { PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { return ImmutableSet.copyOf(waveletInfo.explicitParticipants); } }
/** * @param waveletName the waveletName. * @return the implicit wavelet participants. An implicit participant is not a * "strict" participant on the wavelet, but rather only opened the * wave and listens on updates. For example, anyone can open a shared * wave without becoming explicit participant. */ public Set<ParticipantId> getImplicitWaveletParticipants(WaveletName waveletName) { PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { return ImmutableSet.copyOf(waveletInfo.explicitParticipants); } }
/** * Notifies that the participant was added from the wavelet. * * @param waveletName the wavelet name. * @param participant the participant. */ public void notifyAddedExplicitWaveletParticipant(WaveletName waveletName, ParticipantId participant) { PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { waveletInfo.explicitParticipants.add(participant); } }
/** * Notifies that the participant was removed from the wavelet. * * @param waveletName the wavelet name. * @param participant the participant. */ public void notifyRemovedExplicitWaveletParticipant(WaveletName waveletName, ParticipantId participant) { PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { waveletInfo.explicitParticipants.remove(participant); } }
/** * Notifies that an implicit participant opened the wave. * * @param waveletName the wavelet name. * @param participant the participant. */ public void notifyAddedImplcitParticipant(WaveletName waveletName, ParticipantId participant) { PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { if (!waveletInfo.explicitParticipants.contains(participant)) { waveletInfo.implicitParticipants.add(participant); } } }
/** * Returns the current wavelet version. */ public HashedVersion getCurrentWaveletVersion(WaveletName waveletName) { PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { return waveletInfo.getCurrentVersion(); } }
/** * Synchronizes the wavelet version and ensures that the deltas are * contiguous. * * @param waveletName the wavelet name. * @param newDeltas the new deltas. */ public void syncWaveletVersion(WaveletName waveletName, DeltaSequence newDeltas) { HashedVersion expectedVersion; PerWavelet waveletInfo = getWavelet(waveletName); synchronized (waveletInfo) { expectedVersion = waveletInfo.getCurrentVersion(); Preconditions.checkState(expectedVersion.getVersion() == newDeltas.getStartVersion(), "Expected deltas starting at version %s, got %s", expectedVersion, newDeltas.getStartVersion()); waveletInfo.setCurrentVersion(newDeltas.getEndVersion()); } }