You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:54:55 UTC
[sling-org-apache-sling-models-api] 15/34: SLING-4155,
consider default injection strategy also for injector-specific
annotations
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 <kw...@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" <co...@sling.apache.org>.