diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java index bac21f6f9..3506ffbec 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ import com.mongodb.gridfs.GridFSFile; * Collection of operations to store and read files from MongoDB GridFS. * * @author Oliver Gierke + * @author Philipp Schneider */ public interface GridFsOperations extends ResourcePatternResolver { @@ -42,27 +43,60 @@ public interface GridFsOperations extends ResourcePatternResolver { */ GridFSFile store(InputStream content, String filename); + /** + * Stores the given content into a file with the given name and content type. + * + * @param content must not be {@literal null}. + * @param filename must not be {@literal null} or empty. + * @param contentType can be {@literal null}. + * @return the {@link GridFSFile} just created + */ + GridFSFile store(InputStream content, String filename, String contentType); + /** * Stores the given content into a file with the given name using the given metadata. The metadata object will be * marshalled before writing. * * @param content must not be {@literal null}. * @param filename must not be {@literal null} or empty. - * @param metadata + * @param metadata can be {@literal null}. * @return the {@link GridFSFile} just created */ GridFSFile store(InputStream content, String filename, Object metadata); + /** + * Stores the given content into a file with the given name and content type using the given metadata. The metadata + * object will be marshalled before writing. + * + * @param content must not be {@literal null}. + * @param filename must not be {@literal null} or empty. + * @param contentType can be {@literal null}. + * @param metadata can be {@literal null} + * @return the {@link GridFSFile} just created + */ + GridFSFile store(InputStream content, String filename, String contentType, Object metadata); + /** * Stores the given content into a file with the given name using the given metadata. * * @param content must not be {@literal null}. * @param filename must not be {@literal null} or empty. - * @param metadata must not be {@literal null}. + * @param metadata can be {@literal null}. * @return the {@link GridFSFile} just created */ GridFSFile store(InputStream content, String filename, DBObject metadata); + /** + * Stores the given content into a file with the given name and content type using the given metadata. + * + * @param content must not be {@literal null}. + * @param filename must not be {@literal null} or empty. + * @param contentType can be {@literal null}. + * @param metadata can be {@literal null}. + * @return the {@link GridFSFile} just created + */ + GridFSFile store(InputStream content, String filename, String contentType, DBObject metadata); + /** * Returns all files matching the given query. Note, that currently {@link Sort} criterias defined at the * {@link Query} will not be regarded as MongoDB does not support ordering for GridFS file access. 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 ac43dc382..95dd6a8c5 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 @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +42,7 @@ import com.mongodb.gridfs.GridFSInputFile; * {@link GridFsOperations} implementation to store content into MongoDB GridFS. * * @author Oliver Gierke + * @author Philipp Schneider */ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver { @@ -87,15 +88,37 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver return store(content, filename, (Object) null); } + /* + * (non-Javadoc) + * @see org.springframework.data.mongodb.gridfs.GridFsOperations#store(java.io.InputStream, java.lang.String, java.lang.String) + */ + public GridFSFile store(InputStream content, String filename, String contentType) { + return store(content, filename, contentType, (Object) null); + } + /* * (non-Javadoc) * @see org.springframework.data.mongodb.gridfs.GridFsOperations#store(java.io.InputStream, java.lang.String, java.lang.Object) */ public GridFSFile store(InputStream content, String filename, Object metadata) { - DBObject dbObject = new BasicDBObject(); - converter.write(metadata, dbObject); - return store(content, filename, dbObject); + return store(content, filename, null, metadata); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.mongodb.gridfs.GridFsOperations#store(java.io.InputStream, java.lang.String, java.lang.String, java.lang.Object) + */ + public GridFSFile store(InputStream content, String filename, String contentType, Object metadata) { + + DBObject dbObject = null; + + if (metadata != null) { + dbObject = new BasicDBObject(); + converter.write(metadata, dbObject); + } + + return store(content, filename, contentType, dbObject); } /* @@ -103,16 +126,30 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver * @see org.springframework.data.mongodb.gridfs.GridFsOperations#store(java.io.InputStream, java.lang.String, com.mongodb.DBObject) */ public GridFSFile store(InputStream content, String filename, DBObject metadata) { + return this.store(content, filename, null, metadata); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.mongodb.gridfs.GridFsOperations#store(java.io.InputStream, java.lang.String, com.mongodb.DBObject) + */ + public GridFSFile store(InputStream content, String filename, String contentType, DBObject metadata) { Assert.notNull(content); Assert.hasText(filename); - Assert.notNull(metadata); GridFSInputFile file = getGridFs().createFile(content); file.setFilename(filename); - file.setMetaData(metadata); - file.save(); + if (metadata != null) { + file.setMetaData(metadata); + } + + if (contentType != null) { + file.setContentType(contentType); + } + + file.save(); return file; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java index 271fdf5b4..cba3ab284 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,6 +41,7 @@ import com.mongodb.gridfs.GridFSFile; * Integration tests for {@link GridFsTemplate}. * * @author Oliver Gierke + * @author Philipp Schneider */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:gridfs/gridfs.xml") @@ -77,6 +78,19 @@ public class GridFsTemplateIIntegrationTests { assertSame(result.get(0), reference); } + /** + * @see DATAMONGO-503 + */ + @Test + public void storesContentType() throws IOException { + + GridFSFile reference = operations.store(resource.getInputStream(), "foo2.xml", "application/xml"); + + List result = operations.find(query(whereContentType().is("application/xml"))); + assertThat(result.size(), is(1)); + assertSame(result.get(0), reference); + } + @Test public void marshalsComplexMetadata() throws IOException {