package org.openntf.domino.big.impl;
import static org.openntf.domino.big.NoteCoordinate.Utils.getReplidFromLong;
import javolution.util.FastMap;
import org.openntf.domino.Database;
import org.openntf.domino.DbDirectory;
import org.openntf.domino.Document;
import org.openntf.domino.Session;
import org.openntf.domino.utils.Factory;
import org.openntf.domino.utils.Factory.SessionType;
public class DbCache {
private final FastMap<Long, Database> dbMap_ = new FastMap<Long, Database>(); //note: not Thread-safe yet.
private String defaultServerName_ = "";
public DbCache() {
}
public DbCache(final String defaultServer) {
defaultServerName_ = defaultServer;
}
public void setDefaultServer(final String defaultServer) {
defaultServerName_ = defaultServer;
}
public Database getDatabase(final long dbid) {
return getDatabase(dbid, getDefaultServer());
}
public Database getDatabase(final long dbid, final String server) {
return getDatabase(dbid, server, Factory.getSession(SessionType.CURRENT));
}
public Database getDatabase(final long dbid, final String server, final Session session) {
Database result = dbMap_.get(dbid);
if (result == null) {
String replid = getReplidFromLong(dbid);
DbDirectory dir = session.getDbDirectory(server);
result = dir.openDatabaseByReplicaID(replid);
dbMap_.put(dbid, result);
}
return result;
}
@SuppressWarnings("null")
public Document getDocument(final NoteCoordinate nc) {
Document result = null;
long id = nc.getDbid();
Database db = getDatabase(id);
if (db == null) {
System.out.println("DEBUG: Unable to find database with id " + id + " ("
+ org.openntf.domino.big.NoteCoordinate.Utils.getReplidFromLong(id) + ")");
}
result = db.getDocumentByUNID(nc.getUNID(), true);
return result;
}
public Document getDocument(final NoteCoordinate nc, final String server) {
Document result = null;
long id = nc.getDbid();
Database db = getDatabase(id, server);
result = db.getDocumentByUNID(nc.getUNID(), true);
return result;
}
public String getDefaultServer() {
return defaultServerName_;
}
}