package org.gcube.application.geoportal.service.engine.mongo; import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import org.bson.types.ObjectId; import org.gcube.application.geoportal.model.fault.ConfigurationException; import org.gcube.application.geoportal.service.engine.ImplementationProvider; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class MongoManager { protected MongoClient client=null; public MongoManager() throws ConfigurationException { client=ImplementationProvider.get().getMongoClientProvider().getObject(); log.info("Got Mongo Client at "+client.getConnectPoint()); // NOT AUTHORIZED // log.debug("Existing databases "+client.getDatabaseNames()); } // private abstract MongoDatabase getDatabase() { // return client.getDatabase("gna-db"); // } // TODO check if existing DB protected abstract MongoDatabase getDatabase(); //*********** PROJECTS // NB BsonId protected ObjectId insert(Document proj, String collectionName) { MongoDatabase database=getDatabase(); MongoCollection collection = database.getCollection(collectionName); collection.insertOne(Document.parse(proj.toJson())); return proj.getObjectId("_id"); } public void delete(ObjectId id, String collectionName) { MongoDatabase database=getDatabase(); MongoCollection collection = database.getCollection(collectionName); collection.deleteOne(eq("_id",id)); } public Document getById(ObjectId id,String collectionName) { MongoDatabase database=getDatabase(); MongoCollection coll=database.getCollection(collectionName); return coll.find(new Document("_id",id)).first(); } public FindIterable iterate(Document filter,String collectionName) { MongoDatabase database=getDatabase(); MongoCollection coll=database.getCollection(collectionName); if(filter==null) return coll.find(); else return coll.find(filter); } public FindIterable iterateForClass(Document filter,String collectionName,Class clazz) { MongoDatabase database=getDatabase(); MongoCollection coll=database.getCollection(collectionName); if(filter==null) return coll.find(clazz); else return coll.find(filter,clazz); } public void update(Document toUpdate,String collectionName) { MongoDatabase database=getDatabase(); MongoCollection coll=database.getCollection(collectionName); coll.findOneAndReplace(eq("_id",toUpdate.getObjectId("_id")), toUpdate); } //********** PROFILES }