This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 4279d4b  Context API refactoring.
4279d4b is described below

commit 4279d4b4bcea89340ef6c099413e63a2c55e1d51
Author: JamesBognar <[email protected]>
AuthorDate: Sun Aug 22 13:23:24 2021 -0400

    Context API refactoring.
---
 .../org/apache/juneau/rest/annotation/Rest.java    |  2 +-
 .../juneau/rest/annotation/RestAnnotation.java     | 56 +++++++++++++++++-----
 2 files changed, 45 insertions(+), 13 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index c0b6f00..d44de09 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -43,7 +43,7 @@ import org.apache.juneau.rest.vars.*;
 @Target(TYPE)
 @Retention(RUNTIME)
 @Inherited
-@ContextApply(RestAnnotation.Apply.class)
+@ContextApply({RestAnnotation.RestContextApply.class,RestAnnotation.RestOperationContextApply.class})
 public @interface Rest {
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index 285c957..554c653 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -1022,29 +1022,26 @@ public class RestAnnotation {
        }
 
        /**
-        * Applies {@link Rest} annotations to a {@link 
ContextPropertiesBuilder}.
+        * Applies {@link Rest} annotations to a {@link RestContextBuilder}.
         */
-       public static class Apply extends 
AnnotationApplier<Rest,ContextPropertiesBuilder> {
+       public static class RestContextApply extends 
AnnotationApplier<Rest,RestContextBuilder> {
 
                /**
                 * Constructor.
                 *
                 * @param vr The resolver for resolving values in annotations.
                 */
-               public Apply(VarResolverSession vr) {
-                       super(Rest.class, ContextPropertiesBuilder.class, vr);
+               public RestContextApply(VarResolverSession vr) {
+                       super(Rest.class, RestContextBuilder.class, vr);
                }
 
                @Override
-               public void apply(AnnotationInfo<Rest> ai, 
ContextPropertiesBuilder b) {
+               public void apply(AnnotationInfo<Rest> ai, RestContextBuilder 
b) {
                        Rest a = ai.getAnnotation();
                        ClassInfo c = ai.getClassOn();
 
-                       b.set(REST_serializers, 
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class), 
a.serializers()));
-                       b.set(REST_parsers, 
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class), 
a.parsers()));
                        b.setIf(a.partSerializer() != 
HttpPartSerializer.Null.class, REST_partSerializer, a.partSerializer());
                        b.setIf(a.partParser() != HttpPartParser.Null.class, 
REST_partParser, a.partParser());
-                       b.prependTo(REST_encoders, a.encoders());
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.appendTo(REST_defaultRequestAttributes, x));
@@ -1053,8 +1050,6 @@ public class RestAnnotation {
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
                        b.prependTo(REST_responseProcessors, 
a.responseProcessors());
-                       b.prependTo(REST_converters, a.converters());
-                       b.prependTo(REST_guards, reverse(a.guards()));
                        b.prependTo(REST_children, a.children());
                        b.prependTo(REST_restOperationArgs, 
a.restOperationArgs());
                        b.setIf(a.contextClass() != RestContext.Null.class, 
REST_contextClass, a.contextClass());
@@ -1079,10 +1074,47 @@ public class RestAnnotation {
                        b.setIfNotEmpty(REST_allowedMethodHeaders, 
string(a.allowedMethodHeaders()));
                        b.setIfNotEmpty(REST_allowedMethodParams, 
string(a.allowedMethodParams()));
                        b.setIfNotEmpty(REST_renderResponseStackTraces, 
bool(a.renderResponseStackTraces()));
-                       b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
-                       b.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
                        b.setIfNotEmpty(REST_debug, string(a.debug()));
                        b.setIfNotEmpty(REST_debugOn, string(a.debugOn()));
+               }
+
+               private String trimLeadingSlash(String value) {
+                       if (startsWith(value, '/'))
+                               return value.substring(1);
+                       return value;
+               }
+       }
+
+       /**
+        * Applies {@link Rest} annotations to a {@link 
RestOperationContextBuilder}.
+        */
+       public static class RestOperationContextApply extends 
AnnotationApplier<Rest,RestOperationContextBuilder> {
+
+               /**
+                * Constructor.
+                *
+                * @param vr The resolver for resolving values in annotations.
+                */
+               public RestOperationContextApply(VarResolverSession vr) {
+                       super(Rest.class, RestOperationContextBuilder.class, 
vr);
+               }
+
+               @Override
+               public void apply(AnnotationInfo<Rest> ai, 
RestOperationContextBuilder b) {
+                       Rest a = ai.getAnnotation();
+
+                       b.set(REST_serializers, 
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class), 
a.serializers()));
+                       b.set(REST_parsers, 
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class), 
a.parsers()));
+                       b.setIf(a.partSerializer() != 
HttpPartSerializer.Null.class, REST_partSerializer, a.partSerializer());
+                       b.setIf(a.partParser() != HttpPartParser.Null.class, 
REST_partParser, a.partParser());
+                       b.prependTo(REST_encoders, a.encoders());
+                       b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
+                       b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
+                       b.prependTo(REST_converters, a.converters());
+                       b.prependTo(REST_guards, reverse(a.guards()));
+                       b.setIfNotEmpty(REST_path, 
trimLeadingSlash(string(a.path())));
+                       b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
+                       b.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
                        cdStream(a.rolesDeclared()).forEach(x -> 
b.addTo(REST_rolesDeclared, x));
                        b.addToIfNotEmpty(REST_roleGuard, 
string(a.roleGuard()));
                }

Reply via email to