+ @Override
+ public Collection<Sone> getRemoteSones() {
+ lock.readLock().lock();
+ try {
+ return from(getSones()).filter(not(LOCAL_SONE_FILTER)).toSet();
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public void storeSone(Sone sone) {
+ lock.writeLock().lock();
+ try {
+ sones.put(sone.getId(), sone);
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public SoneBuilder newSoneBuilder() {
+ return new DefaultSoneBuilder(this) {
+ @Override
+ public Sone build(Optional<SoneCreated> soneCreated) throws IllegalStateException {
+ Sone sone = super.build(soneCreated);
+ lock.writeLock().lock();
+ try {
+ sones.put(sone.getId(), sone);
+ } finally {
+ lock.writeLock().unlock();
+ }
+ return sone;
+ }
+ };
+ }
+