package com.mongodb.internal.connection;
import com.mongodb.AuthenticationMechanism;
import com.mongodb.MongoCredential;
import java.util.ArrayList;
import java.util.List;
public class MongoCredentialWithCache {
private final MongoCredential credential;
private final Cache cache;
public static List<MongoCredentialWithCache> wrapCredentialList(final List<MongoCredential> credentialList) {
ArrayList<MongoCredentialWithCache> credentialListWithCache = new ArrayList<MongoCredentialWithCache>();
for (MongoCredential credential : credentialList) {
credentialListWithCache.add(new MongoCredentialWithCache(credential));
}
return credentialListWithCache;
}
public MongoCredentialWithCache(final MongoCredential credential) {
this(credential, null);
}
public MongoCredentialWithCache(final MongoCredential credential, final Cache cache) {
this.credential = credential;
this.cache = cache != null ? cache : new Cache();
}
public MongoCredentialWithCache withMechanism(final AuthenticationMechanism mechanism) {
return new MongoCredentialWithCache(credential.withMechanism(mechanism), cache);
}
public AuthenticationMechanism getAuthenticationMechanism() {
return credential.getAuthenticationMechanism();
}
public MongoCredential getCredential() {
return credential;
}
@SuppressWarnings("unchecked")
public <T> T getFromCache(final Object key, final Class<T> clazz) {
return clazz.cast(cache.get(key));
}
public void putInCache(final Object key, final Object value) {
cache.set(key, value);
}
static class Cache {
private Object cacheKey;
private Object cacheValue;
synchronized Object get(final Object key) {
if (cacheKey != null && cacheKey.equals(key)) {
return cacheValue;
}
return null;
}
synchronized void set(final Object key, final Object value) {
cacheKey = key;
cacheValue = value;
}
}
}