You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2018/08/01 22:47:27 UTC

[juneau] branch master updated: Refactor BasicRestInfoProvider.

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 8c4b298  Refactor BasicRestInfoProvider.
8c4b298 is described below

commit 8c4b298888a02eb5ec5eecb37b2231b02e197bba
Author: JamesBognar <ja...@apache.org>
AuthorDate: Wed Aug 1 18:47:08 2018 -0400

    Refactor BasicRestInfoProvider.
---
 .../apache/juneau/rest/BasicRestInfoProvider.java  | 51 ++++++++++----------
 .../org/apache/juneau/rest/RestMethodParam.java    |  9 ----
 .../org/apache/juneau/rest/RestParamDefaults.java  | 56 +++-------------------
 3 files changed, 30 insertions(+), 86 deletions(-)

diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
index efabb97..fd69397 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
@@ -407,7 +407,21 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 					if (in != BODY)
 						param.append("name", mp.name);
 
-					ObjectMap pi = resolve(vr, mp.getApi(), "ParameterInfo on class {0} method {1}", c, m);
+					ObjectMap pi = null;
+					if (in == BODY)
+						pi = HttpPartSchema.create(Body.class, mp.method, mp.index).getApi();
+					else if (in == QUERY)
+						pi = HttpPartSchema.create(Query.class, mp.method, mp.index).getApi();
+					else if (in == FORM_DATA)
+						pi = HttpPartSchema.create(FormData.class, mp.method, mp.index).getApi();
+					else if (in == HEADER)
+						pi = HttpPartSchema.create(Header.class, mp.method, mp.index).getApi();
+					else if (in == PATH)
+						pi = HttpPartSchema.create(Path.class, mp.method, mp.index).getApi();
+					else
+						throw new RuntimeException();
+
+					pi = resolve(vr, pi, "ParameterInfo on class {0} method {1}", c, m);
 
 					// Common to all
 					param.appendSkipEmpty("description", resolve(vr, pi.getString("description")));
@@ -575,7 +589,9 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 				RestParamType in = mp.getParamType();
 
 				if (in == RESPONSE_HEADER) {
-					ObjectMap pi = resolve(vr, mp.getApi(), "@ResponseHeader on class {0} method {1}", c, m);
+					HttpPartSchema schema = HttpPartSchema.create(ResponseHeader.class, mp.method, mp.index);
+					ObjectMap pi = HttpPartSchema.getApiCodeMap(schema, 200);
+					pi = resolve(vr, pi, "@ResponseHeader on class {0} method {1}", c, m);
 					for (String code : pi.keySet()) {
 						String name = mp.getName();
 						ObjectMap pi2 = pi.getObjectMap(code, true);
@@ -604,7 +620,9 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 					}
 
 				} else if (in == RESPONSE) {
-					ObjectMap pi = resolve(vr, mp.getApi(), "@Response on class {0} method {1}", c, m);
+					HttpPartSchema schema = HttpPartSchema.create(Response.class, mp.method, mp.index);
+					ObjectMap pi = HttpPartSchema.getApiCodeMap(schema, 200);
+					pi = resolve(vr, pi, "@Response on class {0} method {1}", c, m);
 					for (String code : pi.keySet()) {
 						ObjectMap pi2 = pi.getObjectMap(code, true);
 
@@ -627,7 +645,9 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 					}
 
 				} else if (in == RESPONSE_BODY) {
-					ObjectMap pi = resolve(vr, mp.getApi(), "@ResponseBody on class {0} method {1}", c, m);
+					HttpPartSchema schema = HttpPartSchema.create(ResponseBody.class, mp.method, mp.index);
+					ObjectMap pi = HttpPartSchema.getApiCodeMap(schema, 200);
+					pi = resolve(vr, pi, "@ResponseBody on class {0} method {1}", c, m);
 					for (String code : pi.keySet()) {
 						ObjectMap pi2 = pi.getObjectMap(code, true);
 
@@ -709,29 +729,6 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 		return swagger;
 	}
 
-//	private static void assertNoEmpties(ObjectMap om) throws SwaggerException {
-//		if (om.isEmpty())
-//			throw new SwaggerException(null, "Empty map detected.");
-//		for (Map.Entry<String,Object> e : om.entrySet()) {
-//			Object val = e.getValue();
-//			if (val instanceof ObjectMap)
-//				assertNoEmpties((ObjectMap)val);
-//			if (val instanceof ObjectList)
-//				assertNoEmpties((ObjectList)val);
-//		}
-//	}
-//
-//	private static void assertNoEmpties(ObjectList ol) throws SwaggerException {
-//		if (ol.isEmpty())
-//			throw new SwaggerException(null, "Empty list detected.");
-//		for (Object val : ol) {
-//			if (val instanceof ObjectMap)
-//				assertNoEmpties((ObjectMap)val);
-//			if (val instanceof ObjectList)
-//				assertNoEmpties((ObjectList)val);
-//		}
-//	}
-
 	//=================================================================================================================
 	// Utility methods
 	//=================================================================================================================
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java
index 7d6cbe0..52d17bd 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java
@@ -199,15 +199,6 @@ public abstract class RestMethodParam {
 	public abstract Object resolve(RestRequest req, RestResponse res) throws Exception;
 
 	/**
-	 * Returns the Swagger metadata associated with this parameter.
-	 *
-	 * @return A map of parameter metadata, never <jk>null</jk>.
-	 */
-	protected ObjectMap getApi() {
-		return null;
-	};
-
-	/**
 	 * Returns the parameter class type that this parameter resolver is meant for.
 	 *
 	 * @return The parameter class type, or <jk>null</jk> if the type passed in isn't an instance of {@link Class}.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
index 3c91483..85bdd6a 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
@@ -570,12 +570,7 @@ class RestParamDefaults {
 
 		@Override /* RestMethodParam */
 		public Object resolve(RestRequest req, RestResponse res) throws Exception {
-			return req.getPathMatch().get(partParser, schema, schema.getName(), type);
-		}
-
-		@Override /* RestMethodParam */
-		public ObjectMap getApi() {
-			return schema.getApi();
+			return req.getPathMatch().get(partParser, schema, name, type);
 		}
 	}
 
@@ -593,11 +588,6 @@ class RestParamDefaults {
 		public Object resolve(RestRequest req, RestResponse res) throws Exception {
 			return req.getBody().asType(partParser, schema, type);
 		}
-
-		@Override /* RestMethodParam */
-		public ObjectMap getApi() {
-			return schema.getApi();
-		}
 	}
 
 	static final class HeaderObject extends RestMethodParam {
@@ -624,11 +614,6 @@ class RestParamDefaults {
 		public Object resolve(RestRequest req, RestResponse res) throws Exception {
 			return req.getHeaders().get(partParser, schema, name, type);
 		}
-
-		@Override /* RestMethodParam */
-		public ObjectMap getApi() {
-			return schema.getApi();
-		}
 	}
 
 	static final class RequestBeanObject extends RestMethodParam {
@@ -647,11 +632,10 @@ class RestParamDefaults {
 
 	static final class ResponseHeaderObject extends RestMethodParam {
 		final ResponsePartMeta meta;
-		final HttpPartSchema schema;
 
 		protected ResponseHeaderObject(Method m, int i, PropertyStore ps) {
 			super(RESPONSE_HEADER, m, i, getName(m, i));
-			this.schema = HttpPartSchema.create(ResponseHeader.class, method, i);
+			HttpPartSchema schema = HttpPartSchema.create(ResponseHeader.class, method, i);
 			this.meta = new ResponsePartMeta(HttpPartType.HEADER, schema, createPartSerializer(schema.getSerializer(), ps));
 
 			if (getTypeClass() != Value.class)
@@ -687,20 +671,14 @@ class RestParamDefaults {
 			});
 			return v;
 		}
-
-		@Override
-		public ObjectMap getApi() {
-			return HttpPartSchema.getApiCodeMap(schema, 200);
-		}
 	}
 
 	static final class ResponseBodyObject extends RestMethodParam {
 		final ResponsePartMeta rpm;
-		final HttpPartSchema schema;
 
 		protected ResponseBodyObject(Method m, int i, PropertyStore ps) {
 			super(RESPONSE_BODY, m, i);
-			this.schema = HttpPartSchema.create(ResponseBody.class, method, i);
+			HttpPartSchema schema = HttpPartSchema.create(ResponseBody.class, method, i);
 			this.rpm = new ResponsePartMeta(HttpPartType.BODY, schema, createPartSerializer(schema.getSerializer(), ps));
 
 			if (getTypeClass() != Value.class)
@@ -723,21 +701,14 @@ class RestParamDefaults {
 			});
 			return v;
 		}
-
-		@Override
-		public ObjectMap getApi() {
-			return HttpPartSchema.getApiCodeMap(schema, 200);
-		}
 	}
 
 	static final class ResponseBeanObject extends RestMethodParam {
-		final ResponseBeanMeta responseBeanMeta;
-		final HttpPartSchema schema;
+		final ResponseBeanMeta rbm;
 
 		protected ResponseBeanObject(Method m, int i, PropertyStore ps) {
 			super(RESPONSE, m, i);
-			this.schema = HttpPartSchema.create(Response.class, method, i);
-			this.responseBeanMeta = ResponseBeanMeta.create(m.getParameterTypes()[i], ps);
+			this.rbm = ResponseBeanMeta.create(m.getParameterTypes()[i], ps);
 			if (getTypeClass() != Value.class)
 				throw new InternalServerError("Invalid type {0} specified with @Response annotation.  It must be Value.", type);
 		}
@@ -751,18 +722,13 @@ class RestParamDefaults {
 				public void onSet(Object o) {
 					ResponseBeanMeta rbm = req.getResponseBeanMeta(o);
 					if (rbm == null)
-						rbm = ResponseBeanObject.this.responseBeanMeta;
+						rbm = ResponseBeanObject.this.rbm;
 					res.setResponseBeanMeta(rbm);
 					res.setOutput(o);
 				}
 			});
 			return v;
 		}
-
-		@Override
-		public ObjectMap getApi() {
-			return HttpPartSchema.getApiCodeMap(schema, 200);
-		}
 	}
 
 	static class ResponseStatusObject extends RestMethodParam {
@@ -832,11 +798,6 @@ class RestParamDefaults {
 				return req.getFormData().getAll(partParser, schema, name, type);
 			return req.getFormData().get(partParser, schema, name, type);
 		}
-
-		@Override /* RestMethodParam */
-		public ObjectMap getApi() {
-			return schema.getApi();
-		}
 	}
 
 	static final class QueryObject extends RestMethodParam {
@@ -870,11 +831,6 @@ class RestParamDefaults {
 				return req.getQuery().getAll(partParser, schema, name, type);
 			return req.getQuery().get(partParser, schema, name, type);
 		}
-
-		@Override /* RestMethodParam */
-		public ObjectMap getApi() {
-			return schema.getApi();
-		}
 	}
 
 	static final class HasFormDataObject extends RestMethodParam {