You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2017/04/20 11:26:58 UTC

camel git commit: CAMEL-11175 REST DSL Swagger generator default ...

Repository: camel
Updated Branches:
  refs/heads/master bee43cefb -> b8efc2bb3


CAMEL-11175 REST DSL Swagger generator default ...

...generated class/package names

This refines default class name and package name generation.


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

Branch: refs/heads/master
Commit: b8efc2bb3c26f1a7ab3f873f80ce9e746c65d0aa
Parents: bee43ce
Author: Zoran Regvart <zr...@apache.org>
Authored: Thu Apr 20 13:26:54 2017 +0200
Committer: Zoran Regvart <zr...@apache.org>
Committed: Thu Apr 20 13:26:54 2017 +0200

----------------------------------------------------------------------
 .../swagger/RestDslSourceCodeGenerator.java     |  25 +++--
 .../swagger/RestDslSourceCodeGeneratorTest.java | 106 +++++++++++++++++++
 2 files changed, 125 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b8efc2bb/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
----------------------------------------------------------------------
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
index 252bc40..62c8f70 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
@@ -38,11 +38,11 @@ import org.apache.camel.util.ObjectHelper;
 import static org.apache.camel.util.StringHelper.notEmpty;
 
 public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<RestDslSourceCodeGenerator<T>> {
-    private static final String DEFAULT_CLASS_NAME = "RestDslRoute";
+    static final String DEFAULT_CLASS_NAME = "RestDslRoute";
 
-    private static final String DEFAULT_INDENT = "    ";
+    static final String DEFAULT_PACKAGE_NAME = "rest.dsl.generated";
 
-    private static final String DEFAULT_PACKAGE_NAME = "rest.dsl.generated";
+    private static final String DEFAULT_INDENT = "    ";
 
     private Function<Swagger, String> classNameGenerator = RestDslSourceCodeGenerator::generateClassName;
 
@@ -147,8 +147,15 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
             return DEFAULT_CLASS_NAME;
         }
 
-        return title.chars().filter(Character::isJavaIdentifierPart).boxed().collect(Collector.of(StringBuilder::new,
-            StringBuilder::appendCodePoint, StringBuilder::append, StringBuilder::toString));
+        final String className = title.chars().filter(Character::isJavaIdentifierPart).filter(c -> c < 'z').boxed()
+            .collect(Collector.of(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append,
+                StringBuilder::toString));
+
+        if (className.isEmpty() || !Character.isJavaIdentifierStart(className.charAt(0))) {
+            return DEFAULT_CLASS_NAME;
+        }
+
+        return className;
     }
 
     static String generatePackageName(final Swagger swagger) {
@@ -157,7 +164,13 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
         if (ObjectHelper.isNotEmpty(host)) {
             final StringBuilder packageName = new StringBuilder();
 
-            final String[] parts = host.split("\\.");
+            final String hostWithoutPort = host.replaceFirst(":.*", "");
+
+            if ("localhost".equalsIgnoreCase(hostWithoutPort)) {
+                return DEFAULT_PACKAGE_NAME;
+            }
+
+            final String[] parts = hostWithoutPort.split("\\.");
 
             for (int i = parts.length - 1; i >= 0; i--) {
                 packageName.append(parts[i]);

http://git-wip-us.apache.org/repos/asf/camel/blob/b8efc2bb/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java
----------------------------------------------------------------------
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java
new file mode 100644
index 0000000..15e716c
--- /dev/null
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java
@@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.generator.swagger;
+
+import io.swagger.models.Info;
+import io.swagger.models.Swagger;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class RestDslSourceCodeGeneratorTest {
+
+    @Test
+    public void shouldCreatePackageNamesFromHostnames() {
+        final Swagger swagger = new Swagger();
+        swagger.setHost("api.example.org");
+
+        assertThat(RestDslSourceCodeGenerator.generatePackageName(swagger)).isEqualTo("org.example.api");
+    }
+
+    @Test
+    public void shouldCreatePackageNamesFromHostnamesWithPorts() {
+        final Swagger swagger = new Swagger();
+        swagger.setHost("api.example.org:8080");
+
+        assertThat(RestDslSourceCodeGenerator.generatePackageName(swagger)).isEqualTo("org.example.api");
+    }
+
+    @Test
+    public void shouldGenerateClassNameFromTitle() {
+        final Swagger swagger = new Swagger();
+        swagger.info(new Info().title("Example API"));
+
+        assertThat(RestDslSourceCodeGenerator.generateClassName(swagger)).isEqualTo("ExampleAPI");
+    }
+
+    @Test
+    public void shouldGenerateClassNameFromTitleWithNonValidJavaIdentifiers() {
+        final Swagger swagger = new Swagger();
+        swagger.info(new Info().title("Example-API 2.0"));
+
+        assertThat(RestDslSourceCodeGenerator.generateClassName(swagger)).isEqualTo("ExampleAPI20");
+    }
+
+    @Test
+    public void shouldUseDefaultClassNameIfInfoOrTitleIsNotPresent() {
+        final Swagger swagger = new Swagger();
+
+        assertThat(RestDslSourceCodeGenerator.generateClassName(swagger))
+            .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
+
+        assertThat(RestDslSourceCodeGenerator.generateClassName(swagger.info(new Info())))
+            .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
+    }
+
+    @Test
+    public void shouldUseDefaultClassNameIfTitleContainsOnlyNonValidJavaIdentifiers() {
+        final Swagger swagger = new Swagger();
+        swagger.info(new Info().title("\\%/4"));
+
+        assertThat(RestDslSourceCodeGenerator.generateClassName(swagger))
+            .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
+    }
+
+    @Test
+    public void shouldUseDefaultPackageNameForLocalhost() {
+        final Swagger swagger = new Swagger();
+        swagger.setHost("localhost");
+
+        assertThat(RestDslSourceCodeGenerator.generatePackageName(swagger))
+            .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
+    }
+
+    @Test
+    public void shouldUseDefaultPackageNameForLocalhostWithPort() {
+        final Swagger swagger = new Swagger();
+        swagger.setHost("localhost:8080");
+
+        assertThat(RestDslSourceCodeGenerator.generatePackageName(swagger))
+            .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
+    }
+
+    @Test
+    public void shouldUseDefaultPackageNameIfNoHostIsSpecified() {
+        final Swagger swagger = new Swagger();
+
+        assertThat(RestDslSourceCodeGenerator.generatePackageName(swagger))
+            .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
+    }
+}