From 1370653c9325b8eaf25b36f96de26347deaebd1c Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 16 Oct 2019 13:52:17 +0200 Subject: [PATCH] DATAMONGO-2392 - Consistently use GridFS file Id instead of ObjectId. We now consistently use GridFSFile.getId() to allow custom Id usage instead of enforcing the Id to be an ObjectId. Using the native Id allows interaction with files that use a custom Id type. Original pull request: #796. --- .../data/mongodb/gridfs/GridFsTemplate.java | 4 +-- .../GridFsTemplateIntegrationTests.java | 27 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java index f428fad9e..98990d2d9 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java @@ -184,7 +184,7 @@ public class GridFsTemplate extends GridFsOperationsSupport implements GridFsOpe public void delete(Query query) { for (GridFSFile gridFSFile : find(query)) { - getGridFs().delete(((BsonObjectId) gridFSFile.getId()).getValue()); + getGridFs().delete(gridFSFile.getId()); } } @@ -215,7 +215,7 @@ public class GridFsTemplate extends GridFsOperationsSupport implements GridFsOpe Assert.notNull(file, "GridFSFile must not be null!"); - return new GridFsResource(file, getGridFs().openDownloadStream(file.getObjectId())); + return new GridFsResource(file, getGridFs().openDownloadStream(file.getId())); } /* diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java index b56c06889..48ee5f548 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java @@ -26,6 +26,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.UUID; import org.bson.BsonObjectId; import org.bson.Document; @@ -39,6 +40,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import org.springframework.data.mongodb.core.query.Query; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -47,6 +49,8 @@ import org.springframework.util.StreamUtils; import com.mongodb.MongoGridFSException; import com.mongodb.client.gridfs.GridFSFindIterable; import com.mongodb.client.gridfs.model.GridFSFile; +import com.mongodb.gridfs.GridFS; +import com.mongodb.gridfs.GridFSInputFile; /** * Integration tests for {@link GridFsTemplate}. @@ -65,6 +69,7 @@ public class GridFsTemplateIntegrationTests { Resource resource = new ClassPathResource("gridfs/gridfs.xml"); @Autowired GridFsOperations operations; + @Autowired SimpleMongoDbFactory mongoClient; @Before public void setUp() { @@ -76,13 +81,31 @@ public class GridFsTemplateIntegrationTests { ObjectId reference = operations.store(resource.getInputStream(), "foo.xml"); - List files = new ArrayList(); + List files = new ArrayList<>(); GridFSFindIterable result = operations.find(query(where("_id").is(reference))); result.into(files); - assertThat(files.size()).isEqualTo(1); + assertThat(files).hasSize(1); assertThat(((BsonObjectId) files.get(0).getId()).getValue()).isEqualTo(reference); } + @Test // DATAMONGO-2392 + public void storesAndFindsByUUID() throws IOException { + + UUID uuid = UUID.randomUUID(); + + GridFS fs = new GridFS(mongoClient.getLegacyDb()); + GridFSInputFile in = fs.createFile(resource.getInputStream(), "gridfs.xml"); + + in.put("_id", uuid); + in.put("contentType", "application/octet-stream"); + in.save(); + + GridFSFile file = operations.findOne(query(where("_id").is(uuid))); + GridFsResource resource = operations.getResource(file); + + assertThat(resource.exists()).isTrue(); + } + @Test // DATAMONGO-6 public void writesMetadataCorrectly() throws IOException {