/modules-storage/prov-storage-mongodb/src/main/java/org/openprovenance/prov/storage/mongodb/MongoNonDocumentResourceStorage.java

http://github.com/lucmoreau/ProvToolbox · Java · 114 lines · 82 code · 29 blank · 3 comment · 0 complexity · e1a63c69981177ab55441c43e5a009e6 MD5 · raw file

  1. package org.openprovenance.prov.storage.mongodb;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.mongodb.*;
  4. import org.apache.commons.io.IOUtils;
  5. import org.apache.log4j.Logger;
  6. import org.bson.types.ObjectId;
  7. import org.openprovenance.prov.storage.api.NonDocumentResourceStorage;
  8. import java.io.*;
  9. /* Documentation
  10. https://howtodoinjava.com/mongodb/java-mongodb-getsave-image-using-gridfs-apis/
  11. */
  12. public class MongoNonDocumentResourceStorage implements NonDocumentResourceStorage, Constants {
  13. private static Logger logger = Logger.getLogger(MongoNonDocumentResourceStorage.class);
  14. private final DB db;
  15. public MongoNonDocumentResourceStorage(String dbname) {
  16. MongoClient mongoClient = new MongoClient("localhost", 27017);
  17. DB db = mongoClient.getDB(dbname);
  18. this.db=db;
  19. db.createCollection(COLLECTION_FILES, null);
  20. }
  21. public MongoNonDocumentResourceStorage(DB db) {
  22. this.db=db;
  23. }
  24. @Override
  25. public String newStore(String suggestedExtension, String mimeType) throws IOException {
  26. DBCollection collection = db.getCollection(COLLECTION_FILES);
  27. BasicDBObject document = new BasicDBObject();
  28. document.put(KEY_EXTENSION,suggestedExtension);
  29. document.put(KEY_MIME_TYPE,mimeType);
  30. WriteResult result=collection.insert(document);
  31. ObjectId id = (ObjectId)document.get( "_id" );
  32. return id.toHexString();
  33. }
  34. @Override
  35. public void copyInputStreamToStore(InputStream inputStream, String id) throws IOException {
  36. logger.debug("copyInputStreamToStore: " + id);
  37. ByteArrayOutputStream baos=new ByteArrayOutputStream();
  38. IOUtils.copy(inputStream,baos);
  39. copyStringToStore(baos.toString(),id);
  40. }
  41. public DBObject findDocumentById(DBCollection collection, String id) {
  42. logger.debug("findDocumentById: " + id);
  43. BasicDBObject query = new BasicDBObject();
  44. query.put("_id", new ObjectId(id));
  45. DBObject dbObj = collection.findOne(query);
  46. return dbObj;
  47. }
  48. @Override
  49. public void copyStringToStore(CharSequence str, String id) throws IOException {
  50. logger.debug("copyStringToStore: " + id);
  51. DBCollection collection = db.getCollection(COLLECTION_FILES);
  52. BasicDBObject query = new BasicDBObject();
  53. query.put("_id",new ObjectId(id));
  54. BasicDBObject newDocument = new BasicDBObject();
  55. newDocument.put(KEY_CONTENTS,str);
  56. BasicDBObject updateObject = new BasicDBObject();
  57. updateObject.put("$set", newDocument);
  58. collection.update(query, updateObject);
  59. }
  60. @Override
  61. public void serializeObjectToStore(ObjectMapper om, Object o, String id) throws IOException {
  62. throw new UnsupportedOperationException("yet!");
  63. }
  64. @Override
  65. public void copyStoreToOutputStream(String id, OutputStream outputStream) throws IOException {
  66. DBCollection collection = db.getCollection(COLLECTION_FILES);
  67. BasicDBObject query = new BasicDBObject();
  68. query.put("_id",new ObjectId(id));
  69. DBCursor result=collection.find(query);
  70. String contents=(String) result.next().get(KEY_CONTENTS);
  71. new PrintStream(outputStream).print(contents);
  72. }
  73. @Override
  74. public <T> T deserializeObjectFromStore(ObjectMapper om, String id, Class<T> clazz) throws IOException {
  75. throw new UnsupportedOperationException("yet!");
  76. }
  77. @Override
  78. public boolean delete(String storageId) {
  79. DBCollection collection = db.getCollection(COLLECTION_FILES);
  80. BasicDBObject query = new BasicDBObject();
  81. query.put("_id",new ObjectId(storageId));
  82. WriteResult res=collection.remove(query);
  83. return res!=null;
  84. }
  85. }