This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.models.api-1.2.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-models-api.git
commit 788414497f5d5683f44cc21512a90aaff76ca28d Author: Konrad Windszus <k...@apache.org> AuthorDate: Thu Nov 20 10:18:08 2014 +0000 SLING-4155, consider default injection strategy also for injector-specific annotations by that deprecate isOptional on all injector-specific annotations and introduce the new injectionStrategy attribute as a replacement. git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/models/api@1640710 13f79535-47bb-0310-9956-ffa450edef68 --- .../injectorspecific/ChildResource.java | 10 ++++++++++ .../{package-info.java => InjectionStrategy.java} | 7 +++++-- .../annotations/injectorspecific/OSGiService.java | 10 ++++++++++ .../injectorspecific/RequestAttribute.java | 10 ++++++++++ .../annotations/injectorspecific/ResourcePath.java | 10 ++++++++++ .../injectorspecific/ScriptVariable.java | 10 ++++++++++ .../models/annotations/injectorspecific/Self.java | 10 ++++++++++ .../annotations/injectorspecific/SlingObject.java | 22 ++++++++++++++++------ .../injectorspecific/ValueMapValue.java | 10 ++++++++++ .../annotations/injectorspecific/package-info.java | 4 ++-- .../AbstractInjectAnnotationProcessor.java | 3 +++ ...ava => AbstractInjectAnnotationProcessor2.java} | 15 +++++++++++++-- .../InjectAnnotationProcessor.java | 5 +++++ ...cessor.java => InjectAnnotationProcessor2.java} | 14 +++++++++----- .../InjectAnnotationProcessorFactory.java | 3 ++- ...java => InjectAnnotationProcessorFactory2.java} | 7 +++---- .../StaticInjectAnnotationProcessorFactory.java | 2 +- .../models/spi/injectorspecific/package-info.java | 2 +- 18 files changed, 130 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ChildResource.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ChildResource.java index 26f32ce..25881bd 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ChildResource.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ChildResource.java @@ -46,10 +46,20 @@ public @interface ChildResource { * If set to true, the model can be instantiated even if there is no child resource * with that name available. * Default = false. + * @deprecated Use {@link injectionStrategy} instead. */ + @Deprecated public boolean optional() default false; /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; + + /** * If set, then the child resource can be obtained via a projection of the given * property of the adaptable. */ diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/InjectionStrategy.java similarity index 92% copy from src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java copy to src/main/java/org/apache/sling/models/annotations/injectorspecific/InjectionStrategy.java index 52eee68..1ffe717 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/InjectionStrategy.java @@ -14,7 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@Version("1.0.2") package org.apache.sling.models.annotations.injectorspecific; -import aQute.bnd.annotation.Version; \ No newline at end of file +public enum InjectionStrategy { + DEFAULT, + OPTIONAL, + REQUIRED +} diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/OSGiService.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/OSGiService.java index a4363c9..fa487c0 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/OSGiService.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/OSGiService.java @@ -47,6 +47,16 @@ public @interface OSGiService { /** * If set to true, the model can be instantiated even if there is no OSGi service implementation available. Default * = false. + * @deprecated Use {@link InjectionStrategy} instead. */ + @Deprecated public boolean optional() default false; + + /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; } diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/RequestAttribute.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/RequestAttribute.java index 07626d4..99fb06d 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/RequestAttribute.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/RequestAttribute.java @@ -48,6 +48,16 @@ public @interface RequestAttribute { * If set to true, the model can be instantiated even if there is no request attribute * with the given name found. * Default = false. + * @deprecated Use {@link InjectionStrategy} instead. */ + @Deprecated public boolean optional() default false; + + /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectonStrategy() default InjectionStrategy.DEFAULT; } diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java index 23953ed..7a8d96c 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java @@ -52,7 +52,17 @@ public @interface ResourcePath { * If set to true, the model can be instantiated even if there is no request attribute * with the given name found. * Default = false. + * @deprecated Use {@link InjectionStrategy} instead. */ + @Deprecated public boolean optional() default false; + /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; + } diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ScriptVariable.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ScriptVariable.java index d25c0e3..dd7a80f 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ScriptVariable.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ScriptVariable.java @@ -47,6 +47,16 @@ public @interface ScriptVariable { * If set to true, the model can be instantiated even if there is no * scripting value with the specified name. * Default = false. + * @deprecated Use {@link InjectionStrategy} instead. */ + @Deprecated public boolean optional() default false; + + /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; } diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/Self.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/Self.java index b452a76..66aa661 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/Self.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/Self.java @@ -40,7 +40,17 @@ public @interface Self { /** * If set to true, the model can be instantiated even if there is no object that can be adapted from the adaptable itself. * Default = false. + * @deprecated Use {@link injectionStrategy} instead */ + @Deprecated public boolean optional() default false; + + /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; } diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/SlingObject.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/SlingObject.java index 07a7c7c..d92e872 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/SlingObject.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/SlingObject.java @@ -84,11 +84,21 @@ import org.apache.sling.models.spi.injectorspecific.InjectAnnotation; @Source("sling-object") public @interface SlingObject { - /** - * If set to true, the model can be instantiated even if there is no request attribute - * with the given name found. - * Default = false. - */ - boolean optional() default false; + /** + * If set to true, the model can be instantiated even if there is no request attribute + * with the given name found. + * Default = false. + * @deprecated Use {@link injectionStrategy} instead + */ + @Deprecated + boolean optional() default false; + + /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + public InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; } diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ValueMapValue.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ValueMapValue.java index 4511d59..e606f7a 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/ValueMapValue.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/ValueMapValue.java @@ -47,10 +47,20 @@ public @interface ValueMapValue { * If set to true, the model can be instantiated even if that value is missing. * Only considered if default is not set, because any default value implicitly * sets optional to true + * @deprecated Use {@link injectionStrategy} instead */ + @Deprecated boolean optional() default false; /** + * if set to REQUIRED injection is mandatory, if set to OPTIONAL injection is optional, in case of DEFAULT + * the standard annotations ({@link org.apache.sling.models.annotations.Optional}, {@link org.apache.sling.models.annotations.Required}) are used. + * If even those are not available the default injection strategy defined on the {@link org.apache.sling.models.annotations.Model} applies. + * Default value = DEFAULT. + */ + InjectionStrategy injectionStrategy() default InjectionStrategy.DEFAULT; + + /** * If set, then the child resource can be obtained via a projection of the given * property of the adaptable. */ diff --git a/src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java b/src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java index 52eee68..0a3ed08 100644 --- a/src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java +++ b/src/main/java/org/apache/sling/models/annotations/injectorspecific/package-info.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@Version("1.0.2") +@Version("1.1.0") package org.apache.sling.models.annotations.injectorspecific; -import aQute.bnd.annotation.Version; \ No newline at end of file +import aQute.bnd.annotation.Version; diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor.java index 692a53b..efa0056 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor.java @@ -16,9 +16,12 @@ */ package org.apache.sling.models.spi.injectorspecific; + /** * Default implementation of {@link InjectAnnotationProcessor}. + * @deprecated Use {@link AbstractInjectAnnotationProcessor2} instead */ +@Deprecated public class AbstractInjectAnnotationProcessor implements InjectAnnotationProcessor { public String getName() { diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor2.java similarity index 68% copy from src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java copy to src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor2.java index 6c61a09..0f1ec8c 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/AbstractInjectAnnotationProcessor2.java @@ -14,7 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@Version("1.1.0") package org.apache.sling.models.spi.injectorspecific; -import aQute.bnd.annotation.Version; \ No newline at end of file +import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy; + +/** + * Default implementation of {@link InjectAnnotationProcessor2}. + * + */ +public class AbstractInjectAnnotationProcessor2 extends AbstractInjectAnnotationProcessor implements InjectAnnotationProcessor2 { + + public InjectionStrategy getInjectionStrategy() { + return InjectionStrategy.DEFAULT; + } + +} diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java index e2d05c4..9f652aa 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java @@ -18,7 +18,9 @@ package org.apache.sling.models.spi.injectorspecific; /** * Processor for injector-specific annotations. + * @deprecated Use {@link InjectAnntoationProcessor2} instead */ +@Deprecated public interface InjectAnnotationProcessor { /** @@ -56,7 +58,10 @@ public interface InjectAnnotationProcessor { * * @return the value to be used for the default or null, in * which case the standard annotation should be used. + * @deprecated use {@link InjectAnntoationProcessor2.getInjectionStrategy} instead */ Boolean isOptional(); + + } diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor2.java similarity index 80% copy from src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java copy to src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor2.java index e2d05c4..b3d11fb 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessor2.java @@ -16,10 +16,13 @@ */ package org.apache.sling.models.spi.injectorspecific; +import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy; + /** * Processor for injector-specific annotations. */ -public interface InjectAnnotationProcessor { +@SuppressWarnings("deprecation") +public interface InjectAnnotationProcessor2 extends InjectAnnotationProcessor{ /** * Tries to get the name value from the annotation. @@ -50,13 +53,14 @@ public interface InjectAnnotationProcessor { * @return the value to be used if nothing can be injected */ Object getDefault(); - + + /** * Tries to get the information whether the injection is optional. * - * @return the value to be used for the default or null, in - * which case the standard annotation should be used. + * @return {@code REQUIRED} if injection is mandatory, {@code OPTIONAL} if injection is optional or {@code DEFAULT} in + * which case the standard annotation/injection strategy should be used. */ - Boolean isOptional(); + InjectionStrategy getInjectionStrategy(); } diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java index 831e593..919a0b1 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java @@ -21,6 +21,7 @@ import java.lang.reflect.AnnotatedElement; /** * Factory for {@link InjectAnnotationProcessor} that is evaluated at runtime for each * sling model adaption and may depend on the adaptable. + * Use {@link StaticInjectAnnotationProcessorFactory} preferably */ public interface InjectAnnotationProcessorFactory { @@ -30,7 +31,7 @@ public interface InjectAnnotationProcessorFactory { * @param element the field or method which is annotated * @return a ModelAnnotationProcessor in case there is a known * injector-specific annotation on the given element found otherwise - * null + * null. This method should return a {@link InjectAnnotationProcessor2} preferably. */ InjectAnnotationProcessor createAnnotationProcessor(Object adaptable, AnnotatedElement element); diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory2.java similarity index 84% copy from src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java copy to src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory2.java index 831e593..2b6f83a 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/InjectAnnotationProcessorFactory2.java @@ -19,11 +19,11 @@ package org.apache.sling.models.spi.injectorspecific; import java.lang.reflect.AnnotatedElement; /** - * Factory for {@link InjectAnnotationProcessor} that is evaluated at runtime for each + * Factory for {@link InjectAnnotationProcessor2} that is evaluated at runtime for each * sling model adaption and may depend on the adaptable. */ -public interface InjectAnnotationProcessorFactory { +public interface InjectAnnotationProcessorFactory2 { /** * * @param adaptable the object from which this model is adapted @@ -32,6 +32,5 @@ public interface InjectAnnotationProcessorFactory { * injector-specific annotation on the given element found otherwise * null */ - InjectAnnotationProcessor createAnnotationProcessor(Object adaptable, AnnotatedElement element); - + InjectAnnotationProcessor2 createAnnotationProcessor(Object adaptable, AnnotatedElement element); } diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/StaticInjectAnnotationProcessorFactory.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/StaticInjectAnnotationProcessorFactory.java index a3eff7d..9080839 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/StaticInjectAnnotationProcessorFactory.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/StaticInjectAnnotationProcessorFactory.java @@ -32,6 +32,6 @@ public interface StaticInjectAnnotationProcessorFactory { * injector-specific annotation on the given element found otherwise * null */ - InjectAnnotationProcessor createAnnotationProcessor(AnnotatedElement element); + InjectAnnotationProcessor2 createAnnotationProcessor(AnnotatedElement element); } diff --git a/src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java b/src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java index 6c61a09..1a59018 100644 --- a/src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java +++ b/src/main/java/org/apache/sling/models/spi/injectorspecific/package-info.java @@ -17,4 +17,4 @@ @Version("1.1.0") package org.apache.sling.models.spi.injectorspecific; -import aQute.bnd.annotation.Version; \ No newline at end of file +import aQute.bnd.annotation.Version; -- To stop receiving notification emails like this one, please contact "commits@sling.apache.org" <commits@sling.apache.org>.