// Path: bionetdb-lib/src/main/java/org/opencb/bionetdb/lib/utils/RocksDbManager.java
// public class RocksDbManager {
// 
//     private int maxOpenFiles = -1;
// 
//     public RocksDbManager() {
//         this(1000);
//     }
// 
//     public RocksDbManager(int maxOpenFiles) {
//         this.maxOpenFiles = maxOpenFiles;
//     }
// 
//     public RocksDB getDBConnection(String dbLocation, boolean forceCreate) {
//         boolean indexingNeeded = forceCreate || !Files.exists(Paths.get(dbLocation));
// 
//         // A static method that loads the RocksDB C++ library.
//         RocksDB.loadLibrary();
// 
//         // The OptionsFilter class contains a set of configurable DB options that determines the behavior of a database.
//         Options options = new Options().setCreateIfMissing(true);
//         if (maxOpenFiles > 0) {
//             options.setMaxOpenFiles(maxOpenFiles);
//         }
// 
//         RocksDB db;
//         try {
//             // A factory method that returns a RocksDB instance
//             if (indexingNeeded) {
//                 db = RocksDB.open(options, dbLocation);
//             } else {
//                 db = RocksDB.openReadOnly(options, dbLocation);
//             }
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             db = null;
//         }
// 
//         return db;
//     }
// 
//     public boolean putString(String key, String value, RocksDB db) {
//         try {
//             // Add string value into the database
//             db.put(key.getBytes(), value.getBytes());
//             return true;
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return false;
//         }
//     }
// 
//     public boolean putLong(String key, Long value, RocksDB db) {
//         try {
//             // Add boolean value into the database
//             db.put(key.getBytes(), Longs.toByteArray(value));
//             return true;
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return false;
//         }
//     }
// 
//     public boolean putBoolean(String key, Boolean value, RocksDB db) {
//         try {
//             // Add boolean value into the database
//             db.put(key.getBytes(), new byte[]{(byte) (value ? 1 : 0)});
//             return true;
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return false;
//         }
//     }
// 
//     public String getString(String key, RocksDB db) {
//         try {
//             // Get string value from the database
//             byte[] value = db.get(key.getBytes());
//             if (value == null) {
//                 return null;
//             }
//             return new String(value);
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     public Long getLong(String key, RocksDB db) {
//         try {
//             // Get string value from the database
//             byte[] value = db.get(key.getBytes());
//             if (value == null) {
//                 return null;
//             }
//             return Longs.fromByteArray(value);
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
// 
//     public Boolean getBoolean(String key, RocksDB db) {
//         try {
//             // Get boolean value from the database
//             byte[] value = db.get(key.getBytes());
//             if (value == null) {
//                 return null;
//             }
//             return (value[0] == 1 ? true : false);
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     public void close(RocksDB db) {
//         db.close();
//     }
// }


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import org.apache.commons.lang3.StringUtils;
import org.opencb.bionetdb.lib.utils.RocksDbManager;
import org.rocksdb.RocksDB;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.file.Paths;
package org.opencb.bionetdb.lib.utils.cache;



public abstract class Cache<T> {
    protected String objFilename;
    protected String xrefObjFilename;

    protected RocksDB objRocksDb;
    protected RocksDB xrefObjRocksDb;
// Path: bionetdb-lib/src/main/java/org/opencb/bionetdb/lib/utils/RocksDbManager.java
// public class RocksDbManager {
// 
//     private int maxOpenFiles = -1;
// 
//     public RocksDbManager() {
//         this(1000);
//     }
// 
//     public RocksDbManager(int maxOpenFiles) {
//         this.maxOpenFiles = maxOpenFiles;
//     }
// 
//     public RocksDB getDBConnection(String dbLocation, boolean forceCreate) {
//         boolean indexingNeeded = forceCreate || !Files.exists(Paths.get(dbLocation));
// 
//         // A static method that loads the RocksDB C++ library.
//         RocksDB.loadLibrary();
// 
//         // The OptionsFilter class contains a set of configurable DB options that determines the behavior of a database.
//         Options options = new Options().setCreateIfMissing(true);
//         if (maxOpenFiles > 0) {
//             options.setMaxOpenFiles(maxOpenFiles);
//         }
// 
//         RocksDB db;
//         try {
//             // A factory method that returns a RocksDB instance
//             if (indexingNeeded) {
//                 db = RocksDB.open(options, dbLocation);
//             } else {
//                 db = RocksDB.openReadOnly(options, dbLocation);
//             }
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             db = null;
//         }
// 
//         return db;
//     }
// 
//     public boolean putString(String key, String value, RocksDB db) {
//         try {
//             // Add string value into the database
//             db.put(key.getBytes(), value.getBytes());
//             return true;
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return false;
//         }
//     }
// 
//     public boolean putLong(String key, Long value, RocksDB db) {
//         try {
//             // Add boolean value into the database
//             db.put(key.getBytes(), Longs.toByteArray(value));
//             return true;
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return false;
//         }
//     }
// 
//     public boolean putBoolean(String key, Boolean value, RocksDB db) {
//         try {
//             // Add boolean value into the database
//             db.put(key.getBytes(), new byte[]{(byte) (value ? 1 : 0)});
//             return true;
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return false;
//         }
//     }
// 
//     public String getString(String key, RocksDB db) {
//         try {
//             // Get string value from the database
//             byte[] value = db.get(key.getBytes());
//             if (value == null) {
//                 return null;
//             }
//             return new String(value);
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     public Long getLong(String key, RocksDB db) {
//         try {
//             // Get string value from the database
//             byte[] value = db.get(key.getBytes());
//             if (value == null) {
//                 return null;
//             }
//             return Longs.fromByteArray(value);
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
// 
//     public Boolean getBoolean(String key, RocksDB db) {
//         try {
//             // Get boolean value from the database
//             byte[] value = db.get(key.getBytes());
//             if (value == null) {
//                 return null;
//             }
//             return (value[0] == 1 ? true : false);
//         } catch (RocksDBException e) {
//             // Do some error handling
//             e.printStackTrace();
//             return null;
//         }
//     }
// 
//     public void close(RocksDB db) {
//         db.close();
//     }
// }


// Path: bionetdb-lib/src/main/java/org/opencb/bionetdb/lib/utils/cache/Cache.java
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import org.apache.commons.lang3.StringUtils;
import org.opencb.bionetdb.lib.utils.RocksDbManager;
import org.rocksdb.RocksDB;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.file.Paths;

package org.opencb.bionetdb.lib.utils.cache;



public abstract class Cache<T> {
    protected String objFilename;
    protected String xrefObjFilename;

    protected RocksDB objRocksDb;
    protected RocksDB xrefObjRocksDb;
    protected RocksDbManager rocksDbManager;