FroMage / jax-doclets

Set of JavaDoc doclets for modern Java annotations APIs
http://www.lunatech-labs.com/open-source/jax-doclets
GNU Lesser General Public License v3.0
26 stars 23 forks source link

Ability to include/exclude JAXRS paths from documentation. #18

Closed calebjones closed 11 years ago

calebjones commented 12 years ago

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.

FroMage commented 12 years ago

Sure, why not, but I won't have time to do this right away. Patches welcome :)

anikitin commented 12 years ago

We need this feature as well. Will try to contribute.

ilyavolk commented 12 years ago

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 Volkov 
Date: 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
FroMage commented 12 years ago

Hey this looks good, could you submit a pull request?

FroMage commented 11 years ago

Merged manually