Skip to content

Commit 7a3aff1

Browse files
committed
DATAMONGO-1165 - Polishing.
Renamed MongoOperations executeAsStream(…) to stream(…). Make use of Spring Data Commons StreamUtils in AbstractMongoQuery's StreamExecution. Moved test case from PersonRepositoryIntegrationTests to AbstractPersonRepositoryIntegrationTests to make sure they're executed for all sub-types. Original pull request: #274.
1 parent d4f1ef8 commit 7a3aff1

File tree

6 files changed

+31
-45
lines changed

6 files changed

+31
-45
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoOperations.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public interface MongoOperations {
179179
* @return
180180
* @since 1.7
181181
*/
182-
<T> CloseableIterator<T> executeAsStream(Query query, Class<T> entityType);
182+
<T> CloseableIterator<T> stream(Query query, Class<T> entityType);
183183

184184
/**
185185
* Create an uncapped collection with a name based on the provided entity class.

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,8 @@
9595
import org.springframework.data.mongodb.core.query.NearQuery;
9696
import org.springframework.data.mongodb.core.query.Query;
9797
import org.springframework.data.mongodb.core.query.Update;
98-
import org.springframework.data.util.CloseableIterator;
99-
import org.springframework.data.mongodb.util.CloseableIterator;
10098
import org.springframework.data.mongodb.util.MongoClientVersion;
99+
import org.springframework.data.util.CloseableIterator;
101100
import org.springframework.jca.cci.core.ConnectionCallback;
102101
import org.springframework.util.Assert;
103102
import org.springframework.util.CollectionUtils;
@@ -318,11 +317,12 @@ public MongoConverter getConverter() {
318317
return this.mongoConverter;
319318
}
320319

321-
/* (non-Javadoc)
320+
/*
321+
* (non-Javadoc)
322322
* @see org.springframework.data.mongodb.core.MongoOperations#executeAsStream(org.springframework.data.mongodb.core.query.Query, java.lang.Class)
323323
*/
324324
@Override
325-
public <T> CloseableIterator<T> executeAsStream(final Query query, final Class<T> entityType) {
325+
public <T> CloseableIterator<T> stream(final Query query, final Class<T> entityType) {
326326

327327
return execute(entityType, new CollectionCallback<CloseableIterator<T>>() {
328328

@@ -340,7 +340,6 @@ public CloseableIterator<T> doInCollection(DBCollection collection) throws Mongo
340340
return new CloseableIterableCusorAdapter<T>(cursor, exceptionTranslator, readCallback);
341341
}
342342
});
343-
344343
}
345344

346345
public String getCollectionName(Class<?> entityClass) {

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717

1818
import java.util.Collections;
1919
import java.util.List;
20-
import java.util.Spliterator;
21-
import java.util.Spliterators;
22-
import java.util.stream.StreamSupport;
2320

2421
import org.springframework.data.domain.PageImpl;
2522
import org.springframework.data.domain.Pageable;
@@ -36,7 +33,7 @@
3633
import org.springframework.data.repository.query.ParameterAccessor;
3734
import org.springframework.data.repository.query.RepositoryQuery;
3835
import org.springframework.data.util.CloseableIterator;
39-
import org.springframework.data.util.CloseableIteratorDisposingRunnable;
36+
import org.springframework.data.util.StreamUtils;
4037
import org.springframework.data.util.TypeInformation;
4138
import org.springframework.util.Assert;
4239

@@ -116,6 +113,7 @@ private Query applyQueryMetaAttributesWhenPresent(Query query) {
116113
if (method.hasQueryMetaAttributes()) {
117114
query.setMeta(method.getQueryMetaAttributes());
118115
}
116+
119117
return query;
120118
}
121119

@@ -425,19 +423,17 @@ private Object deleteAndConvertResult(Query query, MongoEntityMetadata<?> metada
425423
*/
426424
final class StreamExecution extends Execution {
427425

428-
/* (non-Javadoc)
426+
/*
427+
* (non-Javadoc)
429428
* @see org.springframework.data.mongodb.repository.query.AbstractMongoQuery.Execution#execute(org.springframework.data.mongodb.core.query.Query)
430429
*/
431430
@Override
431+
@SuppressWarnings("unchecked")
432432
Object execute(Query query) {
433433

434434
Class<?> entityType = getQueryMethod().getEntityInformation().getJavaType();
435435

436-
@SuppressWarnings("unchecked")
437-
CloseableIterator<Object> result = (CloseableIterator<Object>) operations.executeAsStream(query, entityType);
438-
Spliterator<Object> spliterator = Spliterators.spliteratorUnknownSize(result, Spliterator.NONNULL);
439-
440-
return StreamSupport.stream(spliterator, false).onClose(new CloseableIteratorDisposingRunnable(result));
436+
return StreamUtils.createStreamFromIterator((CloseableIterator<Object>) operations.stream(query, entityType));
441437
}
442438
}
443439
}

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.Arrays;
2424
import java.util.HashSet;
2525
import java.util.List;
26+
import java.util.stream.Collectors;
27+
import java.util.stream.Stream;
2628

2729
import org.hamcrest.Matchers;
2830
import org.junit.Before;
@@ -65,7 +67,7 @@ public abstract class AbstractPersonRepositoryIntegrationTests {
6567

6668
@Autowired MongoOperations operations;
6769

68-
protected Person dave, oliver, carter, boyd, stefan, leroi, alicia;
70+
Person dave, oliver, carter, boyd, stefan, leroi, alicia;
6971
QPerson person;
7072

7173
List<Person> all;
@@ -1148,4 +1150,19 @@ public void shouldSupportSortingWithQSort() throws Exception {
11481150
assertThat(result, is(Matchers.<Person> iterableWithSize(persons.size())));
11491151
assertThat(result.iterator().next().getFirstname(), is("Siggi 2"));
11501152
}
1153+
1154+
/**
1155+
* @see DATAMONGO-1165
1156+
*/
1157+
@Test
1158+
public void shouldAllowReturningJava8StreamInCustomQuery() throws Exception {
1159+
1160+
Stream<Person> result = repository.findByCustomQueryWithStreamingCursorByFirstnames(Arrays.asList("Dave"));
1161+
1162+
try {
1163+
assertThat(result.collect(Collectors.<Person> toList()), hasItems(dave));
1164+
} finally {
1165+
result.close();
1166+
}
1167+
}
11511168
}

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,6 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query
325325
/**
326326
* @see DATAMONGO-1165
327327
*/
328-
@Query("{firstname:{$in:?0}}")
328+
@Query("{ firstname : { $in : ?0 }}")
329329
Stream<Person> findByCustomQueryWithStreamingCursorByFirstnames(List<String> firstnames);
330330
}

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepositoryIntegrationTests.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,6 @@
1515
*/
1616
package org.springframework.data.mongodb.repository;
1717

18-
import static org.hamcrest.Matchers.*;
19-
import static org.junit.Assert.*;
20-
21-
import java.util.Arrays;
22-
import java.util.List;
23-
import java.util.stream.Collectors;
24-
import java.util.stream.Stream;
25-
26-
import org.junit.Test;
2718
import org.springframework.test.context.ContextConfiguration;
2819

2920
/**
@@ -33,21 +24,4 @@
3324
* @author Thomas Darimont
3425
*/
3526
@ContextConfiguration
36-
public class PersonRepositoryIntegrationTests extends AbstractPersonRepositoryIntegrationTests {
37-
38-
/**
39-
* @see DATAMONGO-1165
40-
*/
41-
@Test
42-
public void shouldAllowReturningJava8StreamInCustomQuery() throws Exception {
43-
44-
Stream<Person> result = repository.findByCustomQueryWithStreamingCursorByFirstnames(Arrays.asList("Dave"));
45-
46-
try {
47-
List<Person> readPersons = result.collect(Collectors.<Person> toList());
48-
assertThat(readPersons, hasItems(dave));
49-
} finally {
50-
result.close();
51-
}
52-
}
53-
}
27+
public class PersonRepositoryIntegrationTests extends AbstractPersonRepositoryIntegrationTests {}

0 commit comments

Comments
 (0)