27
27
import java .util .List ;
28
28
import java .util .Map ;
29
29
import java .util .Map .Entry ;
30
+ import java .util .Optional ;
30
31
import java .util .Set ;
31
32
import java .util .function .Function ;
32
33
import java .util .stream .Collectors ;
@@ -610,8 +611,8 @@ public <T> Mono<T> findById(Object id, Class<T> entityClass) {
610
611
*/
611
612
public <T > Mono <T > findById (Object id , Class <T > entityClass , String collectionName ) {
612
613
613
- MongoPersistentEntity <?> persistentEntity = mappingContext .getPersistentEntity (entityClass );
614
- MongoPersistentProperty idProperty = persistentEntity == null ? null : persistentEntity .getIdProperty ();
614
+ Optional <? extends MongoPersistentEntity <?> > persistentEntity = mappingContext .getPersistentEntity (entityClass );
615
+ MongoPersistentProperty idProperty = persistentEntity . isPresent () ? persistentEntity .get (). getIdProperty (). orElse ( null ) : null ;
615
616
616
617
String idKey = idProperty == null ? ID_FIELD : idProperty .getName ();
617
618
@@ -859,11 +860,7 @@ protected <T> Flux<T> doInsertAll(Collection<? extends T> listToSave, MongoWrite
859
860
final Map <String , List <T >> elementsByCollection = new HashMap <String , List <T >>();
860
861
861
862
listToSave .forEach (element -> {
862
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (element .getClass ());
863
-
864
- if (entity == null ) {
865
- throw new InvalidDataAccessApiUsageException ("No PersistentEntity information found for " + element .getClass ());
866
- }
863
+ MongoPersistentEntity <?> entity = mappingContext .getRequiredPersistentEntity (element .getClass ());
867
864
868
865
String collection = entity .getCollection ();
869
866
List <T > collectionElements = elementsByCollection .get (collection );
@@ -965,14 +962,14 @@ private <T> Mono<T> doSaveVersioned(T objectToSave, MongoPersistentEntity<?> ent
965
962
ConvertingPropertyAccessor convertingAccessor = new ConvertingPropertyAccessor (
966
963
entity .getPropertyAccessor (objectToSave ), mongoConverter .getConversionService ());
967
964
968
- MongoPersistentProperty idProperty = entity .getIdProperty ();
969
- MongoPersistentProperty versionProperty = entity .getVersionProperty ();
965
+ MongoPersistentProperty idProperty = entity .getIdProperty (). orElseThrow (() -> new IllegalArgumentException ( "No id property present!" )) ;
966
+ MongoPersistentProperty versionProperty = entity .getVersionProperty (). orElseThrow (() -> new IllegalArgumentException ( "No version property present!" )); ;
970
967
971
- Object version = convertingAccessor .getProperty (versionProperty );
972
- Number versionNumber = convertingAccessor .getProperty (versionProperty , Number .class );
968
+ Optional < Object > version = convertingAccessor .getProperty (versionProperty );
969
+ Optional < Number > versionNumber = convertingAccessor .getProperty (versionProperty , Number .class );
973
970
974
971
// Fresh instance -> initialize version property
975
- if (version == null ) {
972
+ if (! version . isPresent () ) {
976
973
return doInsert (collectionName , objectToSave , mongoConverter );
977
974
}
978
975
@@ -983,7 +980,7 @@ private <T> Mono<T> doSaveVersioned(T objectToSave, MongoPersistentEntity<?> ent
983
980
Query query = new Query (Criteria .where (idProperty .getName ()).is (id ).and (versionProperty .getName ()).is (version ));
984
981
985
982
// Bump version number
986
- convertingAccessor .setProperty (versionProperty , versionNumber .longValue () + 1 );
983
+ convertingAccessor .setProperty (versionProperty , Optional . of ( versionNumber .orElse ( 0 ). longValue () + 1 ) );
987
984
988
985
ReactiveMongoTemplate .this .maybeEmitEvent (new BeforeConvertEvent <T >(objectToSave , collectionName ));
989
986
@@ -1229,7 +1226,7 @@ protected Mono<UpdateResult> doUpdate(final String collectionName, final Query q
1229
1226
private void increaseVersionForUpdateIfNecessary (MongoPersistentEntity <?> persistentEntity , Update update ) {
1230
1227
1231
1228
if (persistentEntity != null && persistentEntity .hasVersionProperty ()) {
1232
- String versionFieldName = persistentEntity .getVersionProperty ().getFieldName ();
1229
+ String versionFieldName = persistentEntity .getVersionProperty ().get (). getFieldName ();
1233
1230
if (!update .modifies (versionFieldName )) {
1234
1231
update .inc (versionFieldName , 1L );
1235
1232
}
@@ -1242,7 +1239,7 @@ private boolean dbObjectContainsVersionProperty(Document document, MongoPersiste
1242
1239
return false ;
1243
1240
}
1244
1241
1245
- return document .containsKey (persistentEntity .getVersionProperty ().getFieldName ());
1242
+ return document .containsKey (persistentEntity .getVersionProperty ().get (). getFieldName ());
1246
1243
}
1247
1244
1248
1245
/* (non-Javadoc)
@@ -1304,14 +1301,14 @@ private Entry<String, Object> extractIdPropertyAndValue(Object object) {
1304
1301
return Collections .singletonMap (ID_FIELD , ((Document ) object ).get (ID_FIELD )).entrySet ().iterator ().next ();
1305
1302
}
1306
1303
1307
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (objectType );
1308
- MongoPersistentProperty idProp = entity == null ? null : entity .getIdProperty ();
1304
+ Optional <? extends MongoPersistentEntity <?> > entity = mappingContext .getPersistentEntity (objectType );
1305
+ MongoPersistentProperty idProp = entity . isPresent () ? entity .get (). getIdProperty (). orElse ( null ) : null ;
1309
1306
1310
1307
if (idProp == null ) {
1311
1308
throw new MappingException ("No id property found for object of type " + objectType );
1312
1309
}
1313
1310
1314
- Object idValue = entity .getPropertyAccessor (object ).getProperty (idProp );
1311
+ Object idValue = entity .get (). getPropertyAccessor (object ).getProperty (idProp );
1315
1312
return Collections .singletonMap (idProp .getFieldName (), idValue ).entrySet ().iterator ().next ();
1316
1313
}
1317
1314
@@ -1352,18 +1349,18 @@ private Query getIdInQueryFor(Collection<?> objects) {
1352
1349
1353
1350
private void assertUpdateableIdIfNotSet (Object entity ) {
1354
1351
1355
- MongoPersistentEntity <?> persistentEntity = mappingContext .getPersistentEntity (entity .getClass ());
1356
- MongoPersistentProperty idProperty = persistentEntity == null ? null : persistentEntity . getIdProperty ();
1352
+ Optional <? extends MongoPersistentEntity <?> > persistentEntity = mappingContext .getPersistentEntity (entity .getClass ());
1353
+ Optional < MongoPersistentProperty > idProperty = persistentEntity . isPresent () ? persistentEntity . get (). getIdProperty () : Optional . empty ();
1357
1354
1358
- if (idProperty == null ) {
1355
+ if (! idProperty . isPresent () ) {
1359
1356
return ;
1360
1357
}
1361
1358
1362
- Object idValue = persistentEntity .getPropertyAccessor (entity ).getProperty (idProperty );
1359
+ Optional < Object > idValue = persistentEntity .get (). getPropertyAccessor (entity ).getProperty (idProperty . get () );
1363
1360
1364
- if (idValue == null && !MongoSimpleTypes .AUTOGENERATED_ID_TYPES .contains (idProperty .getType ())) {
1361
+ if (! idValue . isPresent () && !MongoSimpleTypes .AUTOGENERATED_ID_TYPES .contains (idProperty . get () .getType ())) {
1365
1362
throw new InvalidDataAccessApiUsageException (
1366
- String .format ("Cannot autogenerate id of type %s for entity of type %s!" , idProperty .getType ().getName (),
1363
+ String .format ("Cannot autogenerate id of type %s for entity of type %s!" , idProperty .get (). getType ().getName (),
1367
1364
entity .getClass ().getName ()));
1368
1365
}
1369
1366
}
@@ -1535,7 +1532,7 @@ protected Mono<MongoCollection<Document>> doCreateCollection(final String collec
1535
1532
*/
1536
1533
protected <T > Mono <T > doFindOne (String collectionName , Document query , Document fields , Class <T > entityClass ) {
1537
1534
1538
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (entityClass );
1535
+ Optional <? extends MongoPersistentEntity <?> > entity = mappingContext .getPersistentEntity (entityClass );
1539
1536
Document mappedQuery = queryMapper .getMappedObject (query , entity );
1540
1537
Document mappedFields = fields == null ? null : queryMapper .getMappedObject (fields , entity );
1541
1538
@@ -1585,7 +1582,7 @@ protected <T> Flux<T> doFind(String collectionName, Document query, Document fie
1585
1582
protected <S , T > Flux <T > doFind (String collectionName , Document query , Document fields , Class <S > entityClass ,
1586
1583
FindPublisherPreparer preparer , DocumentCallback <T > objectCallback ) {
1587
1584
1588
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (entityClass );
1585
+ Optional <? extends MongoPersistentEntity <?> > entity = mappingContext .getPersistentEntity (entityClass );
1589
1586
1590
1587
Document mappedFields = queryMapper .getMappedFields (fields , entity );
1591
1588
Document mappedQuery = queryMapper .getMappedObject (query , entity );
@@ -1638,7 +1635,7 @@ protected <T> Mono<T> doFindAndRemove(String collectionName, Document query, Doc
1638
1635
serializeToJsonSafely (query ), fields , sort , entityClass , collectionName ));
1639
1636
}
1640
1637
1641
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (entityClass );
1638
+ Optional <? extends MongoPersistentEntity <?> > entity = mappingContext .getPersistentEntity (entityClass );
1642
1639
1643
1640
return executeFindOneInternal (new FindAndRemoveCallback (queryMapper .getMappedObject (query , entity ), fields , sort ),
1644
1641
new ReadDocumentCallback <T >(this .mongoConverter , entityClass , collectionName ), collectionName );
@@ -1654,11 +1651,11 @@ protected <T> Mono<T> doFindAndModify(String collectionName, Document query, Doc
1654
1651
optionsToUse = options ;
1655
1652
}
1656
1653
1657
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (entityClass );
1654
+ Optional <? extends MongoPersistentEntity <?> > entity = mappingContext .getPersistentEntity (entityClass );
1658
1655
1659
1656
return Mono .defer (() -> {
1660
1657
1661
- increaseVersionForUpdateIfNecessary (entity , update );
1658
+ increaseVersionForUpdateIfNecessary (entity . get () , update );
1662
1659
1663
1660
Document mappedQuery = queryMapper .getMappedObject (query , entity );
1664
1661
Document mappedUpdate = updateMapper .getMappedObject (update .getUpdateObject (), entity );
@@ -1706,14 +1703,14 @@ private void populateIdIfNecessary(Object savedObject, Object id) {
1706
1703
}
1707
1704
1708
1705
ConversionService conversionService = mongoConverter .getConversionService ();
1709
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (savedObject .getClass ());
1706
+ MongoPersistentEntity <?> entity = mappingContext .getRequiredPersistentEntity (savedObject .getClass ());
1710
1707
PersistentPropertyAccessor accessor = entity .getPropertyAccessor (savedObject );
1711
1708
1712
1709
if (accessor .getProperty (idProp ) != null ) {
1713
1710
return ;
1714
1711
}
1715
1712
1716
- new ConvertingPropertyAccessor (accessor , conversionService ).setProperty (idProp , id );
1713
+ new ConvertingPropertyAccessor (accessor , conversionService ).setProperty (idProp , Optional . ofNullable ( id ) );
1717
1714
}
1718
1715
1719
1716
private MongoCollection <Document > getAndPrepareCollection (MongoDatabase db , String collectionName ) {
@@ -1901,12 +1898,12 @@ private static RuntimeException potentiallyConvertRuntimeException(RuntimeExcept
1901
1898
}
1902
1899
1903
1900
private MongoPersistentEntity <?> getPersistentEntity (Class <?> type ) {
1904
- return type == null ? null : mappingContext .getPersistentEntity (type );
1901
+ return type == null ? null : mappingContext .getPersistentEntity (type ). orElse ( null ) ;
1905
1902
}
1906
1903
1907
1904
private MongoPersistentProperty getIdPropertyFor (Class <?> type ) {
1908
- MongoPersistentEntity <?> persistentEntity = mappingContext .getPersistentEntity (type );
1909
- return persistentEntity == null ? null : persistentEntity .getIdProperty ();
1905
+ Optional <? extends MongoPersistentEntity <?> > persistentEntity = mappingContext .getPersistentEntity (type );
1906
+ return persistentEntity . isPresent () ? persistentEntity .get (). getIdProperty (). orElse ( null ) : null ;
1910
1907
}
1911
1908
1912
1909
private <T > String determineEntityCollectionName (T obj ) {
@@ -1925,13 +1922,7 @@ String determineCollectionName(Class<?> entityClass) {
1925
1922
"No class parameter provided, entity collection can't be determined!" );
1926
1923
}
1927
1924
1928
- MongoPersistentEntity <?> entity = mappingContext .getPersistentEntity (entityClass );
1929
-
1930
- if (entity == null ) {
1931
- throw new InvalidDataAccessApiUsageException (
1932
- "No Persistent Entity information found for the class " + entityClass .getName ());
1933
- }
1934
-
1925
+ MongoPersistentEntity <?> entity = mappingContext .getRequiredPersistentEntity (entityClass );
1935
1926
return entity .getCollection ();
1936
1927
}
1937
1928
@@ -1986,7 +1977,7 @@ private void initializeVersionProperty(Object entity) {
1986
1977
if (mongoPersistentEntity != null && mongoPersistentEntity .hasVersionProperty ()) {
1987
1978
ConvertingPropertyAccessor accessor = new ConvertingPropertyAccessor (
1988
1979
mongoPersistentEntity .getPropertyAccessor (entity ), mongoConverter .getConversionService ());
1989
- accessor .setProperty (mongoPersistentEntity .getVersionProperty (), 0 );
1980
+ accessor .setProperty (mongoPersistentEntity .getVersionProperty (). get (), Optional . of ( 0 ) );
1990
1981
}
1991
1982
}
1992
1983
@@ -2290,7 +2281,7 @@ public <T> FindPublisher<T> prepare(FindPublisher<T> findPublisher) {
2290
2281
2291
2282
try {
2292
2283
if (query .getSkip () > 0 ) {
2293
- findPublisherToUse = findPublisherToUse .skip (query .getSkip ());
2284
+ findPublisherToUse = findPublisherToUse .skip (( int ) query .getSkip ());
2294
2285
}
2295
2286
if (query .getLimit () > 0 ) {
2296
2287
findPublisherToUse = findPublisherToUse .limit (query .getLimit ());
@@ -2346,9 +2337,9 @@ private static List<? extends Document> toDocuments(final Collection<? extends D
2346
2337
static class NoOpDbRefResolver implements DbRefResolver {
2347
2338
2348
2339
@ Override
2349
- public Object resolveDbRef (MongoPersistentProperty property , DBRef dbref , DbRefResolverCallback callback ,
2340
+ public Optional < Object > resolveDbRef (MongoPersistentProperty property , DBRef dbref , DbRefResolverCallback callback ,
2350
2341
DbRefProxyHandler proxyHandler ) {
2351
- return null ;
2342
+ return Optional . empty () ;
2352
2343
}
2353
2344
2354
2345
@ Override
0 commit comments