Use lambdas for tasks requiring a manager lookup.

This commit is contained in:
akwizgran
2019-05-14 11:16:37 +01:00
parent 0b30a0786e
commit 2c4188caf5

View File

@@ -29,6 +29,7 @@ import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe; import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject; import javax.inject.Inject;
@@ -132,13 +133,10 @@ class KeyManagerImpl implements KeyManager, Service, EventListener {
public void activateKeys(Transaction txn, Map<TransportId, KeySetId> keys) public void activateKeys(Transaction txn, Map<TransportId, KeySetId> keys)
throws DbException { throws DbException {
for (Entry<TransportId, KeySetId> e : keys.entrySet()) { for (Entry<TransportId, KeySetId> e : keys.entrySet()) {
TransportId t = e.getKey(); withManager(e.getKey(), m -> {
TransportKeyManager m = managers.get(t);
if (m == null) {
if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t);
} else {
m.activateKeys(txn, e.getValue()); m.activateKeys(txn, e.getValue());
} return null;
});
} }
} }
@@ -157,37 +155,25 @@ class KeyManagerImpl implements KeyManager, Service, EventListener {
@Override @Override
public StreamContext getStreamContext(ContactId c, TransportId t) public StreamContext getStreamContext(ContactId c, TransportId t)
throws DbException { throws DbException {
TransportKeyManager m = managers.get(t); return withManager(t, m ->
if (m == null) { db.transactionWithNullableResult(false, txn ->
if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); m.getStreamContext(txn, c)));
return null;
}
return db.transactionWithNullableResult(false, txn ->
m.getStreamContext(txn, c));
} }
@Override @Override
public StreamContext getStreamContext(PendingContactId p, TransportId t) public StreamContext getStreamContext(PendingContactId p, TransportId t)
throws DbException { throws DbException {
TransportKeyManager m = managers.get(t); return withManager(t, m ->
if (m == null) { db.transactionWithNullableResult(false, txn ->
if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); m.getStreamContext(txn, p)));
return null;
}
return db.transactionWithNullableResult(false, txn ->
m.getStreamContext(txn, p));
} }
@Override @Override
public StreamContext getStreamContext(TransportId t, byte[] tag) public StreamContext getStreamContext(TransportId t, byte[] tag)
throws DbException { throws DbException {
TransportKeyManager m = managers.get(t); return withManager(t, m ->
if (m == null) { db.transactionWithNullableResult(false, txn ->
if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); m.getStreamContext(txn, tag)));
return null;
}
return db.transactionWithNullableResult(false, txn ->
m.getStreamContext(txn, tag));
} }
@Override @Override
@@ -202,4 +188,20 @@ class KeyManagerImpl implements KeyManager, Service, EventListener {
for (TransportKeyManager m : managers.values()) m.removeContact(c); for (TransportKeyManager m : managers.values()) m.removeContact(c);
}); });
} }
@Nullable
private <T> T withManager(TransportId t, ManagerTask<T> task)
throws DbException {
TransportKeyManager m = managers.get(t);
if (m == null) {
if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t);
return null;
}
return task.run(m);
}
private interface ManagerTask<T> {
@Nullable
T run(TransportKeyManager m) throws DbException;
}
} }