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)