You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/18 17:43:56 UTC

[10/21] camel git commit: CAMEL-7800: camel-swagger-java - work in progress

CAMEL-7800: camel-swagger-java - work in progress


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1817a41e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1817a41e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1817a41e

Branch: refs/heads/master
Commit: 1817a41ea9165453bd8904498a4ed5c2a20e81a0
Parents: bf36f61
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 12:23:55 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 16:16:13 2015 +0200

----------------------------------------------------------------------
 .../apache/camel/swagger/RestSwaggerReader.java | 85 ++++++++++++++------
 .../src/test/resources/log4j.properties         |  2 +-
 2 files changed, 61 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1817a41e/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
index e664529..90f5956 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
@@ -30,6 +30,7 @@ import io.swagger.models.Model;
 import io.swagger.models.ModelImpl;
 import io.swagger.models.Operation;
 import io.swagger.models.Path;
+import io.swagger.models.RefModel;
 import io.swagger.models.Response;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.BodyParameter;
@@ -40,6 +41,7 @@ import io.swagger.models.parameters.PathParameter;
 import io.swagger.models.parameters.QueryParameter;
 import io.swagger.models.parameters.SerializableParameter;
 import io.swagger.models.properties.ArrayProperty;
+import io.swagger.models.properties.Property;
 import io.swagger.models.properties.RefProperty;
 import io.swagger.models.properties.StringProperty;
 import org.apache.camel.model.rest.RestDefinition;
@@ -159,15 +161,18 @@ public class RestSwaggerReader {
                     if (parameter instanceof SerializableParameter) {
                         SerializableParameter sp = (SerializableParameter) parameter;
 
-                        // TODO: like response object with type refer to model
                         if (param.getDataType() != null) {
                             sp.setType(param.getDataType());
-                        } else if (verb.getType() != null) {
-                            boolean array = verb.getType().endsWith("[]");
-                            if (array) {
-                                sp.setType("array");
-                            } else {
-                                sp.setType(verb.getType());
+                        }
+                    }
+
+                    if (parameter instanceof BodyParameter) {
+                        BodyParameter bp = (BodyParameter) parameter;
+
+                        if (verb.getType() != null) {
+                            String ref = modelTypeAsRef(verb.getType(), swagger);
+                            if (ref != null) {
+                                bp.setSchema(new RefModel(ref));
                             }
                         }
                     }
@@ -178,23 +183,8 @@ public class RestSwaggerReader {
 
             if (verb.getOutType() != null) {
                 Response response = new Response();
-                boolean array = verb.getOutType().endsWith("[]");
-                String type = array ? verb.getOutType().substring(0, verb.getOutType().length() - 2) : verb.getOutType();
-                // lookup in models to use key instead of FQN
-
-                for (Model model : swagger.getDefinitions().values()) {
-                    StringProperty modelType = (StringProperty) model.getVendorExtensions().get("x-className");
-                    if (modelType != null && type.equals(modelType.getFormat())) {
-                        type = ((ModelImpl) model).getName();
-                        break;
-                    }
-                }
-
-                if (array) {
-                    response.setSchema(new ArrayProperty(new RefProperty(type)));
-                } else {
-                    response.setSchema(new RefProperty(type));
-                }
+                Property prop = modelTypeAsProperty(verb.getOutType(), swagger);
+                response.setSchema(prop);
                 response.setDescription("Output type");
                 op.addResponse("200", response);
             }
@@ -207,12 +197,57 @@ public class RestSwaggerReader {
 
             // add path
             swagger.path(opPath, path);
-
         }
 
         return swagger;
     }
 
+    private Model asModel(String typeName, Swagger swagger) {
+        boolean array = typeName.endsWith("[]");
+        if (array) {
+            typeName = typeName.substring(0, typeName.length() - 2);
+        }
+
+        for (Model model : swagger.getDefinitions().values()) {
+            StringProperty modelType = (StringProperty) model.getVendorExtensions().get("x-className");
+            if (modelType != null && typeName.equals(modelType.getFormat())) {
+                return model;
+            }
+        }
+        return null;
+    }
+
+    private String modelTypeAsRef(String typeName, Swagger swagger) {
+        boolean array = typeName.endsWith("[]");
+        if (array) {
+            typeName = typeName.substring(0, typeName.length() - 2);
+        }
+
+        Model model = asModel(typeName, swagger);
+        if (model != null) {
+            typeName = ((ModelImpl) model).getName();
+            return typeName;
+        }
+
+        return null;
+    }
+
+    private Property modelTypeAsProperty(String typeName, Swagger swagger) {
+        boolean array = typeName.endsWith("[]");
+        if (array) {
+            typeName = typeName.substring(0, typeName.length() - 2);
+        }
+
+        String ref = modelTypeAsRef(typeName, swagger);
+
+        Property prop = ref != null ? new RefProperty(ref) : new StringProperty(typeName);
+        if (array) {
+            return new ArrayProperty(prop);
+        } else {
+            return prop;
+        }
+    }
+
     /**
      * If the class is annotated with swagger annotations its parsed into a Swagger model representation
      * which is added to swagger

http://git-wip-us.apache.org/repos/asf/camel/blob/1817a41e/components/camel-swagger-java/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/test/resources/log4j.properties b/components/camel-swagger-java/src/test/resources/log4j.properties
index 6e040b0..e5d9b29 100644
--- a/components/camel-swagger-java/src/test/resources/log4j.properties
+++ b/components/camel-swagger-java/src/test/resources/log4j.properties
@@ -18,7 +18,7 @@
 #
 # The logging properties used for testing.
 #
-log4j.rootLogger=INFO, file
+log4j.rootLogger=INFO, out
 
 # uncomment the following to enable camel debugging
 #log4j.logger.org.apache.camel.swagger=TRACE