Closed calebjones closed 11 years ago
Sure, why not, but I won't have time to do this right away. Patches welcome :)
We need this feature as well. Will try to contribute.
Patch is following. It adds an option "pathexcludefilter" which can specify exclude reg exp filter.
From d420f593b4995a58a5e8b45c2b68b3748b9fe910 Mon Sep 17 00:00:00 2001 From: Ilya VolkovDate: Fri, 27 Jan 2012 18:46:14 +0400 Subject: [PATCH] #18 Ability to include/exclude JAXRS paths from documentation. --- .../main/java/com/lunatech/doclets/jax/Utils.java | 15 ++++++++- .../doclets/jax/jaxrs/JAXRSConfiguration.java | 8 ++++ .../lunatech/doclets/jax/jaxrs/JAXRSDoclet.java | 36 +++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/doclets/src/main/java/com/lunatech/doclets/jax/Utils.java b/doclets/src/main/java/com/lunatech/doclets/jax/Utils.java index e6762de..48ab6f8 100644 --- a/doclets/src/main/java/com/lunatech/doclets/jax/Utils.java +++ b/doclets/src/main/java/com/lunatech/doclets/jax/Utils.java @@ -594,6 +594,19 @@ public class Utils { } return null; } + + public static List getOptions(String options[][], String optionName) { + List result = new ArrayList (); + for (String option[] : options) { + String name = option[0]; + if (!optionName.equals(name)) { + continue; + } + String value = option.length > 1 ? option[1] : null; + result.add(value); + } + return result; + } /** * @return true if optionName exists in one of the options. @@ -743,7 +756,7 @@ public class Utils { } public static String removeFragmentRegexes(String fragment, Map regexFragments) { - Pattern regexPattern = Pattern.compile("\\{(\\w[\\w\\.-]*)\\s*:"); + Pattern regexPattern = Pattern.compile("\\{(\\w[\\w\\.-]*)[ ]*:"); Matcher regexMatcher = regexPattern.matcher(fragment); int start = 0; char[] fragmentArray = fragment.toCharArray(); diff --git a/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSConfiguration.java b/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSConfiguration.java index bc6ed62..b6e506b 100644 --- a/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSConfiguration.java +++ b/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSConfiguration.java @@ -1,5 +1,8 @@ package com.lunatech.doclets.jax.jaxrs; +import java.util.ArrayList; +import java.util.List; + import com.lunatech.doclets.jax.JAXConfiguration; import com.lunatech.doclets.jax.Utils; import com.sun.tools.doclets.formats.html.ConfigurationImpl; @@ -11,6 +14,8 @@ public class JAXRSConfiguration extends JAXConfiguration { public boolean enableHTTPExample; public boolean enableJavaScriptExample; + + public List pathExcludeFilters = new ArrayList (); public JAXRSConfiguration(ConfigurationImpl conf) { super(conf); @@ -22,5 +27,8 @@ public class JAXRSConfiguration extends JAXConfiguration { jaxrscontext = Utils.getOption(options, "-jaxrscontext"); enableHTTPExample = !Utils.hasOption(options, "-disablehttpexample"); enableJavaScriptExample = !Utils.hasOption(options, "-disablejavascriptexample"); + pathExcludeFilters.addAll(Utils.getOptions(options, "-pathexcludefilter")); + + } } diff --git a/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSDoclet.java b/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSDoclet.java index 5cc0528..e1fc144 100644 --- a/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSDoclet.java +++ b/doclets/src/main/java/com/lunatech/doclets/jax/jaxrs/JAXRSDoclet.java @@ -18,9 +18,9 @@ */ package com.lunatech.doclets.jax.jaxrs; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; +import java.io.*; +import java.util.*; +import java.util.regex.Pattern; import javax.ws.rs.Path; @@ -54,7 +54,7 @@ public class JAXRSDoclet extends JAXDoclet { private static final Class>[] jaxrsAnnotations = new Class>[] { Path.class }; public static int optionLength(final String option) { - if ("-jaxrscontext".equals(option)) { + if ("-jaxrscontext".equals(option) || "-pathexcludefilter".equals(option)) { return 2; } if ("-disablehttpexample".equals(option) @@ -94,6 +94,32 @@ public class JAXRSDoclet extends JAXDoclet { return new JAXRSConfiguration(configuration); } + public void filterMethods() { + if (conf.pathExcludeFilters.isEmpty()) + return; + + System.out.println("Resource methods exclude filters are defined"); + + // collection for paths removing, since jaxrsMethods is immutable + List toRemove = new LinkedList (); + for (String regexpFilter : conf.pathExcludeFilters) { + System.out.println("Filtering upon filter " + regexpFilter); + Pattern p = Pattern.compile(regexpFilter); + Iterator irm = jaxrsMethods.iterator(); + while (irm.hasNext()) { + ResourceMethod rm = irm.next(); + + if (p.matcher(rm.getPath()).matches()) { + System.out.println("Resource method removed: " + rm); + toRemove.add(rm); + } + } + } + int beforeRemoving = jaxrsMethods.size(); + jaxrsMethods.removeAll(toRemove); + System.out.println("Resource methods removed. Was " + beforeRemoving + ", now " + jaxrsMethods.size()); + } + public void start() { final ClassDoc[] classes = conf.parentConfiguration.root.classes(); for (final ClassDoc klass : classes) { @@ -102,6 +128,8 @@ public class JAXRSDoclet extends JAXDoclet { } } Collections.sort(jaxrsMethods); + filterMethods(); + Resource rootResource = Resource.getRootResource(jaxrsMethods); rootResource.write(this, conf); new IndexWriter(conf, rootResource).write(); -- 1.7.8.msysgit.0
Hey this looks good, could you submit a pull request?
Merged manually
Maven's javadoc plugin only allows filtering by Java package which doesn't map nicely to URI path structures. Having the ability to include/exclude the documentation that will be generated based on JAXRS paths (allowing for wild-carding syntax) would be nice.