From 0334a2dd78f94bd84825b128c9e6e591527662ac Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 16 Dec 2011 14:11:08 +0100 Subject: [PATCH] DATACMNS-113 - Introduced annotations to resolve custom conversion disambiguities. Introduced @ReadingConverter and @WritingConverter to allow to resolve disambiguates that might arise when implementing custom Converters. Suppose we implemented a Converter and the store is able to handle both String and Class as native types. In this case there's no way to determine whether the converter shall actually be used to convert String properties into Class instances when writing or to create Class instances from Strings when reading. Thus the @ReadingConverter comes in handy in this case to tell the infrastructure to consider the converter for reading only. --- .../data/convert/ReadingConverter.java | 38 +++++++++++++++++++ .../data/convert/WritingConverter.java | 38 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 spring-data-commons-core/src/main/java/org/springframework/data/convert/ReadingConverter.java create mode 100644 spring-data-commons-core/src/main/java/org/springframework/data/convert/WritingConverter.java diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/convert/ReadingConverter.java b/spring-data-commons-core/src/main/java/org/springframework/data/convert/ReadingConverter.java new file mode 100644 index 000000000..4d4bb265d --- /dev/null +++ b/spring-data-commons-core/src/main/java/org/springframework/data/convert/ReadingConverter.java @@ -0,0 +1,38 @@ +/* + * Copyright 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.convert; + +import static java.lang.annotation.ElementType.*; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.convert.converter.Converter; + +/** + * Annotation to clarify intended usage of a {@link Converter} as reading converter in case the conversion types leave + * room for disambiguation. + * + * @author Oliver Gierke + */ +@Target(TYPE) +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface ReadingConverter { + +} diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/convert/WritingConverter.java b/spring-data-commons-core/src/main/java/org/springframework/data/convert/WritingConverter.java new file mode 100644 index 000000000..0364e517c --- /dev/null +++ b/spring-data-commons-core/src/main/java/org/springframework/data/convert/WritingConverter.java @@ -0,0 +1,38 @@ +/* + * Copyright 2011 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.convert; + +import static java.lang.annotation.ElementType.*; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.convert.converter.Converter; + +/** + * Annotation to clarify intended usage of a {@link Converter} as writing converter in case the conversion types leave + * room for disambiguation. + * + * @author Oliver Gierke + */ +@Target(TYPE) +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface WritingConverter { + +}