Commit Graph

685 Commits

Author SHA1 Message Date
Oliver Gierke
ae03feab42 DATACMNS-460 - Repository metadata now supports array return types for query methods.
Added array checks to AbstractRepositoryMetadata.getReturnedDomainClass() to detect array component types. QueryMethod now considers methods returning arrays to be collection query methods.
2014-03-05 08:29:35 +01:00
Oliver Gierke
1805aad718 DATACMNS-387 - Introduce Slice abstraction.
Introduced a Slice interface which is effectively a Page without the total page information. This will allow store modules to implement slice-by-slice access without having to calculate a total number of elements.

Extracted content and Pageable related functionality into a common Chunk class which serves as base class for the two concrete implementations SliceImpl and PageImpl. Deprecated hasNextPage() etc. on Page in favor of the generic hasNext() methods.

QueryMethod now exposes an isSliceQuery() to indicate a query method will need sliced execution.
2014-03-04 14:25:08 +01:00
Oliver Gierke
28dac21931 DATACMNS-456 - Added unit test for attribute to XML attribute name conversion. 2014-03-03 10:50:48 +01:00
Oliver Gierke
73d23dfedb DATACMNS-458 - Added PersistentEntities value object.
Introduced simple value object to hide a set of MappingContexts and be able to access PersistentEntities from them.
2014-03-02 08:39:32 +01:00
Oliver Gierke
4969b9094a DATACMNS-457 - MappingContext now provides information about managed types.
Added MappingContext.getManagedTypes() as well as ….hasPersistentEntity(Class) to access all types currently managed by the MappingContext and find out whether a type is managed by the context.
2014-03-01 12:37:23 +01:00
Oliver Gierke
2a8f4ddf93 DATACMNS-456 - Introduced getAttribute(String) on RepositoryConfigurationSupport.
RepositoryConfigurationSupport now has a getAttribute(String) method to lookup String attributes on XML elements and annotations. The XML implementation converts the given attribute name in a lower-case, dashed representation for the lookup.

RepositoryConfigurationExtensionSupport now ha a generic postProcess(…) method to allow implementations that only need to work with String attributes unify their customizations into that single method.
2014-03-01 12:18:44 +01:00
Oliver Gierke
6408e16faf DATACMNS-452 - Added some helper types to simplify the implementations in store modules.
Added AnnotatedTypeScanner to easily scan for annotated types within a set of base packages. Picks up interfaces by default which had to be customized when using ClassPathScanningCanidateComponentProvider.

Added DirectFieldAccessFallbackBeanWrapper that will use direct field access for beans in case no accessor method can be found. This allows to easily implement bean property values through accessors first but using the field directly if the accessors aren't available.

Introduced AnnotationDetectionMethodCallback to easily find methods equipped with a given annotation.
2014-02-27 08:36:00 +01:00
Fabian Buch
43d731f5ed DATACMNS-453 - Fix NPE in isPageableRepository() for Repositories without a findAll() method.
Added additional null check to isPagingRepository() to handle repository definitions that do not have a findAll method.

Original pull request: #69.
2014-02-26 15:13:34 +01:00
Oliver Gierke
3131ffbc5f DATACMNS-451 - Added custom CollectionFactory.
Added a Spring Data specific CollectionFactory that augments Spring's CollectionFactory with support for special collection types like EnumSet and EnumMap. For all other types we delegate to the wrapped class.
2014-02-26 05:12:23 +01:00
Spring Buildmaster
b41e337569 DATACMNS-443 - Prepare next development iteration. 2014-02-25 07:46:38 +01:00
Spring Buildmaster
a9fb7070c8 DATACMNS-443 - Release version 1.7.0.RELEASE. 2014-02-24 04:46:40 -08:00
Oliver Gierke
91e693b9da DATACMNS-443 - Prepare 1.7.0.RELEASE. 2014-02-24 13:10:02 +01:00
Oliver Gierke
ab37869a1a DATACMNS-446 - Added toString() methods to TypeInformation types. 2014-02-23 13:51:41 +01:00
Thomas Darimont
71169ca160 DATACMNS-445 - Documentation overhaul.
Updated links and vendor-information in readme. Updated author information. Fixed some typos, added ids to sections updated examples and descriptions. Added and referenced description of repository populator namespace element.

Original pull request: #65.
2014-02-21 13:39:22 +01:00
Oliver Gierke
4cee676608 DATACMNS-444 - DefaultPersistentPropertyPath now skips null converted names.
If a Converter handed into DefaultPersistentPropertyPath.toDotPath(…) returns null or an empty string for a mapped property name, that value is skipped during path construction.
2014-02-19 18:10:02 +01:00
Oliver Gierke
f089acb17e DATACMNS-442 - Improved documentation to mention @NoRepositoryBean. 2014-02-19 14:47:12 +01:00
Oliver Gierke
611c6194f4 DATACMNS-442 - Added test case to show that id resolution succeeds for intermediate repositories.
Adapted test case failing on Spring 4 due to eager RepositoryMetadata resolution.
2014-02-19 14:01:30 +01:00
Thomas Darimont
f047cce7c3 DATACMNS-441 - Fixed potential NullPointerException in query method detection on Java 8 compiled code.
We now skip bridge methods for query method processing in order to circumvent the changed behavior of Class#getMethods() in Java 8 (when the code was compiled with target byte code level 1.8). On Java 8 this results in bridge methods being found and inspected for query method annotations. Since we currently cannot analyze generic return types of bridge methods this results in NullPointerExceptions being thrown at a later stage in AbstractRepositoryMetadata#getReturnedDomainClass(…).

Original pull request: #64.
Related issue: DATAJPA-465.
2014-02-19 09:30:58 +01:00
Oliver Gierke
931a697ec5 DATACMNS-440 - Fixed map value type resolving for Map value types.
Previously the map value type resolving algorithm checked the value type to be of type Map again to shortcut the resolution. We now weakened this to an assignment check and eagerly resolve the generic type if its bound on exactly that level already. If no concrete type argument can be found, we fall back to the general generics resolution mechanism.
2014-02-13 12:06:26 +01:00
Oliver Gierke
20846809e1 DATACMNS-439 - AnnotationRepositoryConfigSource now evaluates REGEX and ASPECTJ filters.
We now leniently detect AspectJ and regular expression filters in an @Filter annotation in @Enable…Repositories annotations.
2014-02-12 12:18:24 +01:00
Oliver Gierke
d1faa7187d DATACMNS-432 - Fix regression in Repositories.
The changes in 899cf25 causes Repositories not finding any repository instances in case the lookup of beans by type for RepositoryFactoryInformation if the initialization causes as cyclic reference. Even worse, we might run into cases in which the attempt to access the beans by type causes transitive object creation which results in a successful lookup on a second attempt.

This is effectively caused by the catch-block in DefaultListableBeanFactory.getBeansOfType(…) which registers the suppressed exception as the method is used for lookup the beans for injection points with Lists and Maps.

We now explicitly look for bean names first and access the bean by name afterwards, which guarantees the exception to be thrown if it occurs. This will reveal the underlying issue and let user potentially deal with it. It's generally recommended to refer to Repositories in a very lazy fashion (using Provider<T>, ObjectFactory<T> or @Lazy on the injection point as of Spring 4) to avoid creating circular dependencies through by-type-lookups.
2014-02-12 10:24:37 +01:00
Oliver Gierke
1e3640e0ee DATACMNS-436 - Order.equals(…) / hashCode() / toString() now consider ignore case flag.
Extended equals(…), hashCode() and toString() methods t consider the ignore case flag held in an Order instance.
2014-02-06 18:13:54 +01:00
Thomas Darimont
899cf25330 DATACMNS-432 - Make Repositories effectively immutable.
We now eagerly populate the repository factory information in Repositories to provide a read only view on the discovered repository information. Previously lookup operations could also change some maps that held information about the until then discovered repository meta data which could lead to ConcurrentModifcationExceptions in multi-threaded environments. Since we don't allow any modification after construction this won't happen anymore.

We also cache the computed RepositoryMetadata in RepositoryFactoryBeanSupport.

Original pull request: #63.
2014-02-06 18:06:31 +01:00
Martin Baumgartner
d381b694fe DATACMNS-433 - Added Is prefix to Like keywords.
Like expressions are now also recognized if they're prefixed with Is. So both "IsLike" and "Like" are recognized as well as "NotLike" and "IsNotLike".
2014-02-06 16:37:39 +01:00
Oliver Gierke
fa80df2fa0 DATACMNS-425 - Upgrade to Spring Data Build snapshots. 2014-02-03 14:31:11 +01:00
Spring Buildmaster
1a94ffa796 DATACMNS-425 - Prepare next development iteration. 2014-01-29 04:24:57 -08:00
Spring Buildmaster
e00763bc44 DATACMNS-425 - Release version 1.7.0.RC1. 2014-01-29 04:24:55 -08:00
Oliver Gierke
8fa19aa01e DATACMNS-425 - Prepare 1.7.0.RC1 release.
Upgraded to Spring Data Build parent 1.3.0.RC1 and Spring HATEOAS 0.9.0.RELEASE. Switched to milestone repositories. Updated changelog and adapted notice.txt.
2014-01-28 13:24:18 +01:00
Oliver Gierke
8f0979e963 DATACMNS-431 - Code cleanups. 2014-01-28 13:14:35 +01:00
Oliver Gierke
30a63f5546 DATACMNS-418 - Added test case to show how to use custom element assembler. 2014-01-27 08:42:50 +01:00
Oliver Gierke
a16375bb17 DATACMNS-418 - PagedResourcesAssembler now exposes method to append template parameters.
PagedResourcesAssembler.appendPaginationParameterTemplates adds the currently missing pagination template variables to the given link.
2014-01-23 15:50:10 +01:00
Oliver Gierke
f1d49c6f37 DATACMNS-429 - Improved JavaDoc for PageRequest and Sort.
Added a few missing parameter documentations in terms of semantics and nullability.
2014-01-23 12:23:13 +01:00
Oliver Gierke
26c4f2dd87 DATACMNS-430 - Using Jackson version property from build parent.
Removed custom dependency from Spring 4 profile as it's already included in the parent pom.
2014-01-22 17:52:53 +01:00
Oliver Gierke
6822f39e3b DATACMNS-422 - Remove workaround in test cases after recent fix for generic component types.
Build should be fine on Spring 4 now.
2014-01-22 17:46:37 +01:00
Oliver Gierke
0ce214cd56 DATACMNS-418 - Use TemplateVariables value type for pagination templates.
Changed Hateoas(Pageable|Sort)HandlerMethodArgumentResolver to use newly introduced TypeVariables abstraction to avoid having to deal with string representations manually.

The registered TemplateVariables carry a "pagination.….description" key to be resolved against a MessageSource.
2014-01-21 14:31:46 +01:00
Oliver Gierke
0f38612dab DATACMNS-426 - RepositoryMetadata now has an isPagingRepository().
Moved getCrudMethods() to RepositoryMetadata to be able to add a isPagingRepository() to the interface as well. Changed DefaultCrudMethods to work with a RepositoryMetadata instead of RepositoryInformation.

DefaultRepositoryInformation now completely delegates to the ResourceMetadata given and not extend it to avoid initialization order issues.
2014-01-21 14:31:37 +01:00
Oliver Gierke
059d398480 DATACMNS-425 - Use new repository URLs and add repo for build plugins.
Removed test dependency as it's already declared in Spring Data Build parent POM.
2014-01-20 12:38:03 +01:00
Oliver Gierke
3fb4469bea DATACMNS-418 - Adapt to latest changes in Spring HATEOAS. 2014-01-19 19:31:30 +01:00
Oliver Gierke
f8e9f7f8ce DATACMNS-423 - Deprecated Jackson 1 repository initializers. 2014-01-19 15:43:49 +01:00
Oliver Gierke
1f172725f0 DATACMNS-422 - Mitigate semantic changes in Spring 4.0's GenericTypeResolver.
In case of an unresolvable generic parameter in TypeDiscoverer's getTypeArgument(…) we check for a generic super type for the given bound and fall back to Object in case we find a parameterized type.
2014-01-19 15:37:44 +01:00
Oliver Gierke
3fc927ceb8 DATACMNS-421 - Removed obsolete version declarations for Spring dependencies. 2014-01-19 15:37:44 +01:00
Oliver Gierke
a5eedad48f DATACMNS-420 - Introduced RepositoryConfigurationDelegate.
RepositoryConfigurationDelegate allows to easily trigger repository BeanDefinitions to be registered independently of the client API (XML or annotation configuration support). Refactored the existing configuration base classes to use the newly introduced class. Removed defaulting of infrastructure components needed for Spring 3.1 compatibility.
2014-01-18 12:35:21 +01:00
Oliver Gierke
e646fc9f16 DATACMNS-418 - Improvements to template variables in HandlerMethodArgumentResolvers.
The Hateoas(Pageable|Sort)HandlerMethodArgumentResolver now receive a UriComponents instance to inspect for existing query parameters. They then refrain from adding template variables for already present parameters. Slightly modified the way the sort parameters is appended to the pagination properties (although semantically equivalent).
2014-01-17 12:45:10 +01:00
Oliver Gierke
72a8d072a3 DATACMNS-419 - PagedResourceAssemblerArgumentResolver now works with templated URIs.
We now handle an IllegalArgumentException being thrown in case we deal with a templated request mapping. We simply skip the attempt to eagerly resolve the base URI for the request and rely on the assembler being capable of resolving it itself or the user effectively providing a Link instances to one of the toResource(…) overloads.
2014-01-16 14:34:14 +01:00
Oliver Gierke
92a22182f1 DATACMNS-418 - PagedResourcesAssembler now adds self links to PagedResources.
PagedResourcesAssembler now adds a LinkTemplate to every PagedResources instance created and pulls the template variable information from the registered resolvers for Pageable and Sort.

Extended PageableResourceAssemblerArgumentResolver to create a special MethodParameterAwarePagedResourcesAssembler so that the assembler will take qualifier information into account when being injected into controller methods.

Upgraded to Spring HATEOAS 0.9.0.BUILD-SNAPSHOT to be able to benefit from new methods added to MethodParameters as well as the LinkTemplate class. Updated Sonargraph architecture definition to allow the web layer to access logging.
2014-01-16 14:31:55 +01:00
Oliver Gierke
9db6ccaa4b DATACMNS-412 - Fixed potential classloader leak.
Turned the static cache of RepositoryInformations in RepositoryFactorySupport into a non-static one to avoid the instance from potentially surviving redeployments in web app scenarios.
2014-01-14 17:44:23 +01:00
Oliver Gierke
a89d1ce8ff DATACMNS-417 - Added contribution guidelines.
Linked to the actual contribution guidelines maintained in the Spring Data Build project.
2014-01-14 13:39:53 +01:00
Oliver Gierke
5906ae04da DATACMNS-415 - Further performance improvements for repository config.
We now also set a resource pattern on the ClassPathScanningCandidateComponentProvider to limit the scanning for custom implementations even more and thus avoid reading a lot of unnecessary class files.
2014-01-13 18:31:31 +01:00
Oliver Gierke
df1373aa81 DATACMNS-416 - Added means to enforce eager instantiation of CDI repositories.
The CDI extension now eagerly instantiates repository beans that are annotated with the newly introduced @Eager annotation. This is necessary to prevent the initialization procedure from interfering with potentially already executed business logic.

To achieve this CdiRepositoryExtensionSupport provides a new method registerBean(…) that has to be called by store implementations. The extension will then keep track of beans that require eager initialization and trigger it when the container has finished validation.
2014-01-13 11:53:32 +01:00
Oliver Gierke
bf3437f39c DATACMNS-415 - Performance improvements in configuration subsystem.
Changed the design of RepositoryBeanDefinitionBuilder to receive stable dependencies in the constructor and the moving parts as method arguments. This enables us to reuse the builder instance for the creation of all repository bean definitions. Most importantly that means we can use a single CachingMetadataReaderFactory instance which will avoid reading files again when looking for custom implementation classes.

Adapted clients for XML configuration and JavaConfig accordingly.
2014-01-12 23:13:32 +01:00