Commit Graph

338 Commits

Author SHA1 Message Date
Oliver Gierke
ec81344489 DATACMNS-695 - Fixed potential NullPointerException in AbstractMappingContext.getPersistentPropertyPath(…).
When traversing nested property paths, AbstractMappingContext.getPersistentPropertyPath(…) previously used the raw actual property type. If the property path contains a reference to a generically typed property, this causes the deeper paths not being resolved correctly.

We now explicitly use the TypeInformation of the property to retain generics information while traversing the path.
2015-05-13 18:34:15 +02:00
Oliver Gierke
638822e6f7 DATACMNS-692 - Fixed web parameter range handling for Pageables.
In case the PageableHandlerMethodArgumentResolver was configured to use one-indexed parameters, it wasn't defaulting the lower bounds for the page number. This caused indexes out of the allowed bound submitted causing an invalid index handed tor PageRequest. We now apply better range shifting before the bounds are applied.
2015-05-13 18:01:09 +02:00
Tomasz Wysocki
3f08187a9f DATACMNS-693 - AbstractMappingContext now uses Spring's BeanUtils to lookup PropertyDescriptors.
Instead of manually using Introspector.getBeanInfo(…) we now use Spring's BeanUtils.getPropertyDescriptors(…) to benefit from some caching of descriptor instances as well as advanced support for fluent setters, default methods etc.

Original pull request: #122.
2015-05-13 13:28:38 +02:00
Oliver Gierke
8bb937ac35 DATACMNS-677 - AnnotationBasedPersistentProperty now caches absence of annotations on accessor-only properties.
AnnotationBasedPersistentProperty now also caches the absence of properties that are expressed through accessors only. Previously the absence of a field caused us to skip the registration of the absence in the cache.
2015-04-07 08:46:01 +02:00
Oliver Gierke
f4a74265c5 DATACMNS-642 - Avoid setter lookup in BeanWrapper for if field access is used.
We now delay the lookup of the setter method until we discover we really  need to use property access.
2015-02-04 17:13:38 +01:00
Oliver Gierke
67697f64d6 DATACMNS-640 - Fixed potential NullPointerException in PageableHandlerMethodArgumentResolver.
We now double check the fallback Pageable for being null before trying to lookup the Sort to fall back.
2015-02-04 10:32:34 +01:00
Oliver Gierke
394d82ca8a DATACMNS-563 - Added explicit unit test for one-indexed parameters on PagedResourcesAssembler. 2015-01-30 14:46:11 +01:00
Oliver Gierke
0ea37b250c DATACMNS-632 - Prepare 1.8.5.RELEASE (Dijkstra SR5). 2015-01-27 14:38:52 +01:00
Oliver Gierke
ccd9cb09e4 DATACMNS-632 - Updated changelog. 2015-01-27 14:35:07 +01:00
Oliver Gierke
77f17b8c22 DATACMNS-637 - Performance improvements.
MappingContextTypeInformationMapper now caches detected type aliases.

PreferredConstructor.isEnclosingClassParameter(…) now eagerly returns if the parameter itself is not an enclosing one and thus avoids a collection lookup and equals check. Moved equals check for the type to the very end of the equals check to increase the chances that other inequality guards kick in earlier.

AbstractMappingContext now leaves the non-null-check for getPersistentEntity(…) to the factory method of ClassTypeInformation.

We now pre-calculate the hash codes for TypeInformation implementations as far as possible as the instances are used as cache keys quite a lot. The same applies to AbstractPersistentProperty.

BasicPersistentEntity now uses an ArrayList we sort during the verify() phase to mimic the previous behavior wich was implemented using a TreeSet as ArrayLists are way more performant when iterating over all elements which doWithProperties(…) is doing which is used quite a lot.

BeanWrapper now avoids the getter lookup if field access is used.

SimpleTypeHolder now uses a CopyOnWriteArrySet to leniently add types detected to be simple to the set of simple types to avoid ongoing checks against the inheritance hierarchy.
2015-01-25 17:46:00 +01:00
Oliver Gierke
3c0157dc1a DATACMNS-563 - Added unit tests to verify enabling one-indexed parameters are considered correctly when resolving Pageables. 2015-01-20 20:20:03 +01:00
Oliver Gierke
f359e936d7 DATACMNS-634 - Polishing.
Simplified type traversal in Repositories.getRepositoryFactoryInfoFor(…) and unit tests.

Original pull request: #110.
2015-01-20 17:55:25 +01:00
Thomas Eizinger
297688c9a9 DATACMNS-634 - Repositories now als returns repositories for super types of a domain class.
In case the repository lookup for a given domain type fails we traverse the given types super-types and try to detect a repository for those.

Original pull request: #110.
2015-01-20 17:55:16 +01:00
Oliver Gierke
dacf34e796 DATACMNS-621 - Polishing.
Simplified implementation of Path conversion. Inlined helper domain types to not to pollute the packages with types that are only used within that very one test class.

Original pull request: #111.
2015-01-20 16:36:22 +01:00
Christoph Strobl
0ce87189ce DATACMNS-621 - QSort now treats nested paths correctly.
We now inspect intermediate path elements to build sort order accordingly.

Original pull request: #111.
2015-01-20 16:27:12 +01:00
Oliver Gierke
332790009b DATACMNS-608 - Updated changelog. 2015-01-20 07:12:28 +01:00
Oliver Gierke
62d3bc168f DATACMNS-585 - Updated changelog. 2015-01-20 07:11:51 +01:00
Oliver Gierke
68a20ebc6e DATACMNS-572 - Updated changelog. 2015-01-20 07:11:13 +01:00
Oliver Gierke
b9916ab8b7 DATACMNS-616 - Fixed field value lookup for private fields in AnnotationDetectionFieldCallback.
We now make the field detected by the callback accessible so that the value lookup doesn't fail for private fields. Added a few more unit tests to verify behavior.
2014-12-17 17:25:28 +01:00
Oliver Gierke
49a00cb5ec DATACMNS-615 - PageImpl now rejects a total less than the amount of items given.
PageImpl now makes sure that the total given to the constructor is never less than then number of items given to make sure we do not mask broken count calculation by creating an actually invalid instance.

Related ticket: DATAMONGO-1120.
2014-12-16 12:41:58 +01:00
Oliver Gierke
6f4b26bf56 DATACMNS-611 - Improved cache lookups in RepositoryInterfaceAwareBeanPostProcessor.
Refactored predictBeanType(…) to only look up the predicted cached type once.

Related pull request: #108.
2014-12-08 17:55:19 +01:00
Oliver Gierke
71f1592200 DATACMNS-601 - Fixes for most of the SonarQube warnings. 2014-11-26 09:15:34 +01:00
Oliver Gierke
0f448d509c DATACMNS-594 - Fixed creation of type variable map to extend into detected bounds.
The initial setup of the type variable map now unfolds the detected types in the map to make sure we detect all type variables present in the current scope.

Added caching of component and map value TypeInformation instances to avoid repeated creation.
2014-11-14 16:35:23 +01:00
Oliver Gierke
ca377dc075 DATACMNS-590 - Fixed calculation of nested generics in ParentTypeAwareTypeInformation.
So far, the lookup of the type variable map was preferring the type variable maps detected on parent types in nested structures. This caused the concrete type variables in nested types not being considered correctly which caused the type resolution to fall back to the generic bounds.

We now accumulate the type variable maps to avoid having to lookup a certain map in the nesting hierarchy. The core fix is in ParentTypeAwareTypeInformation's constructor and mergeMaps(…) respectively. Simplified the handling of type variable maps and made proper use of generics throughout the class hierarchy.
2014-11-12 14:31:30 +01:00
Thomas Darimont
e02cecd6d0 DATACMNS-583 - DomainClassConverter returns input if given types are the same.
DomainClassConverter now returns input when the source type is identical to the target type. Previously we erroneously tried to convert the sourceType to the idType of the targetType's backing repository. As a side effect we also avoid performing some unnecessary converter hops.

Original pull request: #101.
2014-10-29 09:41:28 +01:00
Thomas Darimont
47e2c84bbc DATACMNS-577 - Improved JavaDoc on QueryDslPredicateExecutor.
Clarified return values if predicates don't match or return multiple results (for the findOne(…) method). Copied summary to the @return tag.

Original pull request: #96.
2014-10-08 06:49:16 +02:00
Thomas Darimont
494221064e DATACMNS-530 - Improve JavaDoc for RepositoryConfigurationSourceSupport.
Removed misleading JavaDoc.

Original pull request: #97.
2014-10-07 15:02:16 +02:00
Oliver Gierke
c3ad453eef DATACMNS-568 - Prepare 1.8.4.RELEASE (Dijkstra SR4). 2014-08-27 11:35:54 +02:00
Oliver Gierke
f1c668c5ca DATACMNS-568 - Updated changelog. 2014-08-27 11:28:04 +02:00
Oliver Gierke
0cd215e9b1 DATACMNS-561 - Updated changelog. 2014-08-27 07:11:22 +02:00
Thomas Darimont
8650b6943c DATACMNS-566 - Allow sorting by QueryDsl operator expressions.
Previously we only allowed to sort by QueryDsl path expressions. With this change we now also support ordering by operator expressions, e.g. yearMonth() on a date property.

Original pull request: #94.
2014-08-26 13:56:55 +02:00
Oliver Gierke
6daf7e2752 DATACMNS-562 - AbstractPersistentProperty doesn't consider maps and collections entities anymore.
The type detection for entity candidates of PersistentProperty instances now consistently handles collection types even if they're used als collection or map values.
2014-08-19 17:54:09 +02:00
Oliver Gierke
33698a7649 DATACMNS-556 - Make annotation validation in AnnotationBasedPersistentProperty more lenient.
Annotations used on both fields and accessors are now only rejected if they're Spring Data annotations (i.e. from the org.springframework.data namespace) and the configurations of these annotations differ.
2014-08-10 13:30:38 +02:00
Oliver Gierke
e62391f825 DATACMNS-558 - Some code cleanups according to the Sonar report. 2014-08-10 12:53:24 +02:00
Oliver Gierke
e27984e84c DATACMNS-549 - Prepare 1.8.2.RELEASE (Dijkstra SR2). 2014-07-28 10:21:56 +02:00
Oliver Gierke
98943833f8 DATACMNS-549 - Updated changelog. 2014-07-28 10:19:38 +02:00
Oliver Gierke
91e80f420a DATACMNS-536 - Updated changelog. 2014-07-25 06:12:25 +02:00
Oliver Gierke
f003461256 DATACMNS-547 - @TypeAlias is now @Persistent.
For @TypeAlias annotated types being picked up using entity scanning, the annotation is now @Persistent.

Related tickets: DATAMONGO-992.
2014-07-24 14:14:36 +02:00
Oliver Gierke
81751aa0f0 DATACMNS-546 - PropertyPath has better exception messages now.
PropertyPath now exposes the complete property named the resolution failed for in case it can't resolve a source String. It will expose the part of the Path from the deepest successful resolution result.

Changed the resolution algorithm to use a List instead of a Stack and a fresh instance of the former so that the nested recursion steps keep track of the correct resolution depths.
2014-07-21 18:11:00 +02:00
Oliver Gierke
31d36781f6 DATACMNS-544 - Indicate repository configuration has been active.
RepositoryConfigurationDelegate now registers the store-specific RepositoryConfigurationExtension as lazy-init BeanDefinition so that other parties can detect that definition.
2014-07-18 20:03:31 +02:00
Oliver Gierke
af32b38a2a DATACMNS-543 - Avoid duplicate repository bean registration in XML namespace.
We're now firing the component registration event manually in RepositoryBeanDefinitionParser as ParserContext.registerBeanComponent(…) registers the given BeanComponentDefinition with the registry. As we do that manually before this previously resulted in the BeanDefinition overriding the very same one and container warnings in turn.
2014-07-18 12:22:24 +02:00
Thomas Darimont
196d8ae883 DATACMNS-538 - Updated section on pagination in reference documentation.
Reworked section that contained outdated parameter names and examples.

Original pull request: #91.
2014-07-17 21:49:53 +02:00
Christoph Strobl
aa83c03542 DATACMNS-527 - Remove links to forum.spring.io.
Linked to spring-data tag on StackOverflow.

Original pull request: #90.
2014-07-09 20:45:12 +02:00
Oliver Gierke
bee15dd5b2 DATACMNS-527 - Prepare 1.8.1.RELEASE (Dijkstra SR1). 2014-06-30 14:37:45 +02:00
Oliver Gierke
e21b6d46ac DATACMNS-527 - Updated changelog. 2014-06-30 14:37:45 +02:00
Oliver Gierke
700943bd82 DATACMNS-522 - Updated changelog. 2014-06-30 10:46:21 +02:00
Thomas Darimont
f1ff280790 DATACMNS-518 - Avoid potential infinite loops in PreferredConstructor.
We now synchronize the (seldom) writes to the isPropertyParameterCache HashMap in PreferredConstructor via a ReadWriteLock. We could as well have used a ConcurrentHashMap here without the need for manual locking but this would potentially waste memory for a mostly read-only data structure. We also anticipate potential multiple writes for the same property.

Original pull request: #86.
2014-06-26 14:08:37 +02:00
Oliver Gierke
218a820c95 DATACMNS-520 - Fixed @Param validation in Parameters.
Parameters erroneously rejected @Param annotated query method parameters that were preceded by a non-bindable type (like Pageable or Sort) as it checked for a 0 index of the parameter. We now manually keep an index in the check itself and have removed the Parameter.isFirst() method as it's not used anywhere else.
2014-06-12 16:00:05 +02:00
Oliver Gierke
558b9865ba DATACMNS-513 - PagedResourcesAssemblerArgumentResolver now correctly resolves mappings for sub-class invocations.
We're now using the newly introduced method on ControllerLinkBuilderFactory that takes both a type and a method to forward the method the invocation is happening on independently from the method being invoked.
2014-06-05 17:16:06 +02:00
Thomas Darimont
9ddf20f2e9 DATACMNS-514 - Fixed typo in RepositoryPopulator examples.
The property "location" should actually be "locations" since this attribute is read by org.springframework.data.repository.config.ResourceReaderRepositoryPopulatorBeanDefinitionParser.doParse(Element, BeanDefinitionBuilder).
2014-06-04 11:32:39 +02:00