Repository: camel
Updated Branches:
  refs/heads/master 128cbc3d4 -> b3ce3dbfb


CAMEL-7999: apt plugin should support schema alias when a component/endpoint 
supports multiple schemas such as mail/ftp and a few others do.


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

Branch: refs/heads/master
Commit: b3ce3dbfbfc4940a59c99c27465d52f31047c8d1
Parents: 128cbc3
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed Nov 12 20:48:12 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Nov 12 20:48:12 2014 +0100

----------------------------------------------------------------------
 .../camel/component/mail/MailEndpoint.java      |  2 +-
 ...ponentConfigurationAndDocumentationTest.java |  7 +++
 .../tools/apt/EndpointAnnotationProcessor.java  | 57 ++++++++++----------
 3 files changed, 38 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b3ce3dbf/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
 
b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
index 8405dcf..3b11786 100644
--- 
a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
+++ 
b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
@@ -36,7 +36,7 @@ import org.apache.camel.spi.UriParam;
 /**
  * Endpoint for Camel Mail.
  */
-@UriEndpoint(scheme = "smtp", consumerClass = MailConsumer.class)
+@UriEndpoint(scheme = "imap,imaps,pop3,pop3s,smtp,smtps", consumerClass = 
MailConsumer.class)
 public class MailEndpoint extends ScheduledPollEndpoint {
     private MailBinding binding;
     @UriParam

http://git-wip-us.apache.org/repos/asf/camel/blob/b3ce3dbf/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentConfigurationAndDocumentationTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentConfigurationAndDocumentationTest.java
 
b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentConfigurationAndDocumentationTest.java
index 63bc617..53be90c 100644
--- 
a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentConfigurationAndDocumentationTest.java
+++ 
b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentConfigurationAndDocumentationTest.java
@@ -49,8 +49,15 @@ public class MailComponentConfigurationAndDocumentationTest 
extends CamelTestSup
     @Test
     public void testComponentDocumentation() throws Exception {
         CamelContext context = new DefaultCamelContext();
+
         String html = context.getComponentDocumentation("smtp");
         assertNotNull("Should have found some auto-generated HTML", html);
+
+        html = context.getComponentDocumentation("pop3");
+        assertNotNull("Should have found some auto-generated HTML", html);
+
+        html = context.getComponentDocumentation("imap");
+        assertNotNull("Should have found some auto-generated HTML", html);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b3ce3dbf/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
----------------------------------------------------------------------
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index 0e26f42..3a41ebb 100644
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -84,37 +84,41 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         if (uriEndpoint != null) {
             String scheme = uriEndpoint.scheme();
             if (!isNullOrEmpty(scheme)) {
-                // write html documentation
-                String name = 
canonicalClassName(classElement.getQualifiedName().toString());
-                String packageName = name.substring(0, name.lastIndexOf("."));
-                String fileName = scheme + ".html";
-                Func1<PrintWriter, Void> handler = new Func1<PrintWriter, 
Void>() {
-                    @Override
-                    public Void call(PrintWriter writer) {
-                        writeHtmlDocumentation(writer, roundEnv, classElement, 
uriEndpoint);
-                        return null;
-                    }
-                };
-                processFile(packageName, scheme, fileName, handler);
-
-                // write json schema
-                fileName = scheme + ".json";
-                handler = new Func1<PrintWriter, Void>() {
-                    @Override
-                    public Void call(PrintWriter writer) {
-                        writeJSonSchemeDocumentation(writer, roundEnv, 
classElement, uriEndpoint);
-                        return null;
-                    }
-                };
-                processFile(packageName, scheme, fileName, handler);
+                // support multiple schemes separated by comma, which maps to 
the exact same component
+                // for example camel-mail has a bunch of component schema 
names that does that
+                String[] schemes = scheme.split(",");
+                for (final String alias : schemes) {
+                    // write html documentation
+                    String name = 
canonicalClassName(classElement.getQualifiedName().toString());
+                    String packageName = name.substring(0, 
name.lastIndexOf("."));
+                    String fileName = alias + ".html";
+                    Func1<PrintWriter, Void> handler = new Func1<PrintWriter, 
Void>() {
+                        @Override
+                        public Void call(PrintWriter writer) {
+                            writeHtmlDocumentation(writer, roundEnv, 
classElement, uriEndpoint, alias);
+                            return null;
+                        }
+                    };
+                    processFile(packageName, alias, fileName, handler);
+
+                    // write json schema
+                    fileName = alias + ".json";
+                    handler = new Func1<PrintWriter, Void>() {
+                        @Override
+                        public Void call(PrintWriter writer) {
+                            writeJSonSchemeDocumentation(writer, roundEnv, 
classElement, uriEndpoint, alias);
+                            return null;
+                        }
+                    };
+                    processFile(packageName, alias, fileName, handler);
+                }
             }
         }
     }
 
-    protected void writeHtmlDocumentation(PrintWriter writer, RoundEnvironment 
roundEnv, TypeElement classElement, UriEndpoint uriEndpoint) {
+    protected void writeHtmlDocumentation(PrintWriter writer, RoundEnvironment 
roundEnv, TypeElement classElement, UriEndpoint uriEndpoint, String scheme) {
         writer.println("<html>");
         writer.println("<header>");
-        String scheme = uriEndpoint.scheme();
         String title = scheme + " endpoint";
         writer.println("<title>" + title  + "</title>");
         writer.println("</header>");
@@ -150,9 +154,8 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         writer.println("</html>");
     }
 
-    protected void writeJSonSchemeDocumentation(PrintWriter writer, 
RoundEnvironment roundEnv, TypeElement classElement, UriEndpoint uriEndpoint) {
+    protected void writeJSonSchemeDocumentation(PrintWriter writer, 
RoundEnvironment roundEnv, TypeElement classElement, UriEndpoint uriEndpoint, 
String scheme) {
         // gather component information
-        String scheme = uriEndpoint.scheme();
         ComponentModel componentModel = findComponentProperties(roundEnv, 
scheme);
 
         // get endpoint information which is divided into paths and options 
(though there should really only be one path)

Reply via email to