[infinispan-commits] Infinispan SVN: r541 - in trunk: bin and 6 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu Jul 9 15:12:23 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-07-09 15:12:22 -0400 (Thu, 09 Jul 2009)
New Revision: 541

Added:
   trunk/bin/generateConfigDocs.sh
   trunk/tools/src/main/java/org/infinispan/tools/doclet/config/
   trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigDoclet.java
   trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigHtmlGenerator.java
   trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxHtmlGenerator.java
Removed:
   trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigDoclet.java
   trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigHtmlGenerator.java
   trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java
Modified:
   trunk/core/src/main/java/org/infinispan/util/ClassFinder.java
   trunk/pom.xml
   trunk/tools/pom.xml
   trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java
Log:
Config generation stuff

Copied: trunk/bin/generateConfigDocs.sh (from rev 540, trunk/bin/generateJmxDocs.sh)
===================================================================
--- trunk/bin/generateConfigDocs.sh	                        (rev 0)
+++ trunk/bin/generateConfigDocs.sh	2009-07-09 19:12:22 UTC (rev 541)
@@ -0,0 +1,3 @@
+#!/bin/bash
+mvn install -Dmaven.test.skip.exec=true -Pconfigdoc
+

Modified: trunk/core/src/main/java/org/infinispan/util/ClassFinder.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/util/ClassFinder.java	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/core/src/main/java/org/infinispan/util/ClassFinder.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -32,11 +32,8 @@
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
-import org.infinispan.util.Util;
-
 /**
  * Find infinispan classes utility
- * 
  */
 public class ClassFinder {
 
@@ -67,18 +64,22 @@
    public static List<Class<?>> isAssignableFrom(Class<?> clazz) throws Exception {
       return isAssignableFrom(infinispanClasses(), clazz);
    }
-   
+
    public static List<Class<?>> infinispanClasses() throws Exception {
-      List<File> files = new ArrayList<File>();     
-      String javaClassPath = System.getProperty("java.class.path") + File.pathSeparator
-               + System.getProperty("surefire.test.class.path");     
+      String cp = System.getProperty("java.class.path") + File.pathSeparator + System.getProperty("surefire.test.class.path");
+      return infinispanClasses(cp);
+   }
 
+   public static List<Class<?>> infinispanClasses(String javaClassPath) throws Exception {
+      List<File> files = new ArrayList<File>();
+
       // either infinispan jar or a directory of output classes contains infinispan classes
       for (String path : javaClassPath.split(File.pathSeparator)) {
          if ((path.contains("infinispan") && path.endsWith("jar")) || !path.endsWith("jar")) {
-            files.add(new File(path));           
+            files.add(new File(path));
          }
       }
+
       if (files.isEmpty())
          return Collections.emptyList();
       else if (files.size() == 1)
@@ -94,25 +95,33 @@
 
    private static List<Class<?>> findClassesOnPath(File path) throws Exception {
       List<Class<?>> classes = new ArrayList<Class<?>>();
-      if (path.isDirectory()) {
-         List<File> classFiles = new ArrayList<File>();
-         dir(classFiles, path);
-         for (File cf : classFiles) {
-            Class<?> claz = Util.loadClass(toClassName(cf.getAbsolutePath().toString()));
-            classes.add(claz);
-         }
-      } else {
-         if (path.isFile() && path.getName().endsWith("jar") && path.canRead()) {
-            JarFile jar = new JarFile(path);
-            Enumeration<JarEntry> en = jar.entries();
-            while (en.hasMoreElements()) {
-               JarEntry entry = en.nextElement();
-               if (entry.getName().endsWith("class")) {
-                  Class<?> claz = Util.loadClass(toClassName(entry.getName()));
-                  classes.add(claz);
+      try {
+         if (path.isDirectory()) {
+            List<File> classFiles = new ArrayList<File>();
+            dir(classFiles, path);
+            for (File cf : classFiles) {
+               Class<?> claz = Util.loadClass(toClassName(cf.getAbsolutePath().toString()));
+               classes.add(claz);
+            }
+         } else {
+            if (path.isFile() && path.getName().endsWith("jar") && path.canRead()) {
+               JarFile jar = new JarFile(path);
+               Enumeration<JarEntry> en = jar.entries();
+               while (en.hasMoreElements()) {
+                  JarEntry entry = en.nextElement();
+                  if (entry.getName().endsWith("class")) {
+                     Class<?> claz = Util.loadClass(toClassName(entry.getName()));
+                     classes.add(claz);
+                  }
                }
             }
          }
+      } catch (NoClassDefFoundError e) {
+         // unable to load these classes!!
+         e.printStackTrace();
+      } catch (ClassNotFoundException e) {
+         // unable to load these classes!!
+         e.printStackTrace();
       }
       return classes;
    }

Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/pom.xml	2009-07-09 19:12:22 UTC (rev 541)
@@ -181,7 +181,7 @@
                         <version>4.0.0-SNAPSHOT</version>
                      </docletArtifact>
                      <footer><![CDATA[
-                Google Analytics
+                <!-- Google Analytics -->
 <script type='text/javascript'>
 var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
 document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
@@ -206,5 +206,51 @@
             </plugins>
          </build>
       </profile>
+
+      <!-- TODO somehow combine this with the 'distribution' profile so all docs are built together -->
+      <profile>
+         <id>configdoc</id>
+         <activation>
+            <activeByDefault>false</activeByDefault>
+         </activation>
+         <build>
+            <plugins>
+               <plugin>
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-javadoc-plugin</artifactId>
+                  <configuration>
+                     <doclet>org.infinispan.tools.doclet.config.ConfigDoclet</doclet>
+                     <docletArtifact>
+                        <groupId>org.infinispan</groupId>
+                        <artifactId>infinispan-tools</artifactId>
+                        <version>4.0.0-SNAPSHOT</version>
+                     </docletArtifact>
+                     <footer><![CDATA[
+                <!-- Google Analytics -->
+<script type='text/javascript'>
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type='text/javascript'>
+try {
+var pageTracker = _gat._getTracker("UA-8601422-4");
+pageTracker._trackPageview();
+} catch(err) {}</script>
+               ]]></footer>
+                  </configuration>
+                  <executions>
+                     <execution>
+                        <id>javadoc</id>
+                        <phase>package</phase>
+                        <goals>
+                           <goal>aggregate</goal>
+                        </goals>
+                     </execution>
+                  </executions>
+               </plugin>
+            </plugins>
+         </build>
+      </profile>
+
    </profiles>
 </project>

Modified: trunk/tools/pom.xml
===================================================================
--- trunk/tools/pom.xml	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/tools/pom.xml	2009-07-09 19:12:22 UTC (rev 541)
@@ -21,7 +21,8 @@
          <groupId>${project-package}</groupId>
          <artifactId>infinispan-core</artifactId>
          <version>${project-version}</version>
-      </dependency>      
+      </dependency>
+
       <dependency>
          <groupId>${project-package}</groupId>
          <artifactId>infinispan-core</artifactId>
@@ -29,27 +30,75 @@
          <type>test-jar</type>
          <scope>test</scope>
       </dependency>
+
+      <!-- needs to depend on all other modules it is trying to document! -->
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-cachestore-bdbje</artifactId>
+         <version>${project-version}</version>
+      </dependency>
+
+
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-cachestore-jdbc</artifactId>
+         <version>${project-version}</version>
+      </dependency>
+
+
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-cachestore-jdbm</artifactId>
+         <version>${project-version}</version>
+      </dependency>
+
+
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-cachestore-s3</artifactId>
+         <version>${project-version}</version>
+      </dependency>
+
+
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-gui-demo</artifactId>
+         <version>${project-version}</version>
+      </dependency>
+
+
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-jopr-plugin</artifactId>
+         <version>${project-version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>${project-package}</groupId>
+         <artifactId>infinispan-tree</artifactId>
+         <version>${project-version}</version>
+      </dependency>
    </dependencies>
 
    <profiles>
-     <profile>
-       <id>default-tools.jar</id>
-       <activation>
-         <property>
-           <name>java.vendor</name>
-           <value>Sun Microsystems Inc.</value>
-         </property>
-       </activation>
-       <dependencies>
-         <dependency>
-           <groupId>com.sun</groupId>
-           <artifactId>tools</artifactId>
-           <version>1.4.2</version>
-           <scope>system</scope>
-           <systemPath>${java.home}/../lib/tools.jar</systemPath>
-         </dependency>
-       </dependencies>
-    </profile>
-  </profiles>
+      <profile>
+         <id>default-tools.jar</id>
+         <activation>
+            <property>
+               <name>java.vendor</name>
+               <value>Sun Microsystems Inc.</value>
+            </property>
+         </activation>
+         <dependencies>
+            <dependency>
+               <groupId>com.sun</groupId>
+               <artifactId>tools</artifactId>
+               <version>1.4.2</version>
+               <scope>system</scope>
+               <systemPath>${java.home}/../lib/tools.jar</systemPath>
+            </dependency>
+         </dependencies>
+      </profile>
+   </profiles>
 
 </project>

Copied: trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigDoclet.java (from rev 540, trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigDoclet.java)
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigDoclet.java	                        (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigDoclet.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -0,0 +1,72 @@
+package org.infinispan.tools.doclet.config;
+
+import com.sun.javadoc.DocErrorReporter;
+import com.sun.javadoc.RootDoc;
+import com.sun.tools.doclets.formats.html.ConfigurationImpl;
+import org.infinispan.tools.doclet.html.HtmlGenerator;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * A Doclet that generates configuration guide for Infinispan
+ *
+ * @author Vladimir Blagojevic
+ * @since 4.0
+ */
+ at SuppressWarnings("restriction")
+public class ConfigDoclet {
+   static String outputDirectory = ".";
+   static String header, footer, encoding, title, bottom, cp;
+
+   public static boolean start(RootDoc root) throws IOException {
+
+      System.out.println("STARTING CONFIG DOCLET");
+
+
+      HtmlGenerator generator = new ConfigHtmlGenerator(encoding, title(), bottom, footer, header,
+                                                        "Infinispan configuration options", Arrays.asList("Configuration", "Infinispan",
+                                                                                                          "Data Grids", "Documentation", "Reference", "MBeans"), cp);
+
+      generator.generateHtml(outputDirectory + File.separator + "config.html");
+
+      System.out.println("FINISHING CONFIG DOCLET");
+
+      return true;
+   }
+
+   private static String title() {
+      String s = "Configuration options";
+      if (title == null || title.equals(""))
+         return s;
+      else {
+         s += " (" + title + ")";
+         return s;
+      }
+   }
+
+   public static int optionLength(String option) {
+      return (ConfigurationImpl.getInstance()).optionLength(option);
+   }
+
+   public static boolean validOptions(String options[][], DocErrorReporter reporter) {
+      for (String[] option : options) {
+         if (option[0].equals("-d"))
+            outputDirectory = option[1];
+         else if (option[0].equals("-encoding"))
+            encoding = option[1];
+         else if (option[0].equals("-bottom"))
+            bottom = option[1];
+         else if (option[0].equals("-footer"))
+            footer = option[1];
+         else if (option[0].equals("-header"))
+            header = option[1];
+         else if (option[0].equals("-doctitle"))
+            title = option[1];
+         else if (option[0].equals("-classpath"))
+            cp = option[1];
+      }
+      return (ConfigurationImpl.getInstance()).validOptions(options, reporter);
+   }
+}

Copied: trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigHtmlGenerator.java (from rev 540, trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigHtmlGenerator.java)
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigHtmlGenerator.java	                        (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/config/ConfigHtmlGenerator.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -0,0 +1,189 @@
+package org.infinispan.tools.doclet.config;
+
+import org.infinispan.config.AbstractConfigurationBean;
+import org.infinispan.config.ConfigurationAttribute;
+import org.infinispan.config.ConfigurationElement;
+import org.infinispan.config.ConfigurationElements;
+import org.infinispan.config.ConfigurationProperties;
+import org.infinispan.config.ConfigurationProperty;
+import org.infinispan.tools.doclet.html.HtmlGenerator;
+import org.infinispan.util.ClassFinder;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.List;
+
+public class ConfigHtmlGenerator extends HtmlGenerator {
+
+   String classpath;
+
+   public ConfigHtmlGenerator(String encoding, String title, String bottom, String footer,
+                              String header, String metaDescription, List<String> metaKeywords, String classpath) {
+      super(encoding, title, bottom, footer, header, metaDescription, metaKeywords);
+      this.classpath = classpath;
+
+   }
+
+   protected List<Class<?>> getConfigBeans() throws Exception {
+      return ClassFinder.isAssignableFrom(ClassFinder.infinispanClasses(classpath), AbstractConfigurationBean.class);
+   }
+
+   protected String generateContents() {
+      StringBuilder sb = new StringBuilder();
+      // index of components
+      sb.append("<h2>Infinispan configuration options</h2><br />");
+      sb.append("<UL>");
+
+      List<Class<?>> configBeans;
+      try {
+         configBeans = getConfigBeans();
+         for (Class<?> clazz : configBeans) {
+            ConfigurationElement ces[] = null;
+            ConfigurationElements configurationElements = clazz.getAnnotation(ConfigurationElements.class);
+            ConfigurationElement configurationElement = clazz.getAnnotation(ConfigurationElement.class);
+
+            if (configurationElement != null && configurationElements == null) {
+               ces = new ConfigurationElement[]{configurationElement};
+            }
+            if (configurationElements != null && configurationElement == null) {
+               ces = configurationElements.elements();
+            }
+            if (ces != null) {
+               for (ConfigurationElement ce : ces) {
+
+                  boolean createdAttributes = false;
+                  boolean createdProperties = false;
+                  sb.append("<A NAME=\"").append(ce.name()).append("\">\n");
+                  sb.append("\n<TABLE WIDTH=\"100%\" CELLSPACING=\"1\" CELLPADDING=\"0\" BORDER=\"1\">\n");
+                  sb.append("<TR CLASS=\"TableHeadingColor\"><TH ALIGN=\"LEFT\"><b>Element: <tt> ").append(ce.name()).append(", </tt></b>");
+                  sb.append("Parent element: <tt>").append(ce.parent()).append("</tt>");
+                  if (ce.description().length() > 0) {
+                     sb.append(" ").append(ce.description()).append("\n");
+                  } else {
+                     sb.append("\n");
+                  }
+                  for (Method m : clazz.getMethods()) {
+                     ConfigurationAttribute a = m.getAnnotation(ConfigurationAttribute.class);
+                     boolean childElement = a != null && a.containingElement().equals(ce.name());
+                     if (childElement && !createdAttributes) {
+                        // Attributes
+                        sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Attributes</i></strong></TH></TR>\n");
+                        sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
+                        sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
+                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\" WIDTH=\"40%\"><strong>Description</strong></TD>\n");
+                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Default values</strong></TD>\n");
+                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Allowed values</strong></TD>\n</TR>\n");
+                        createdAttributes = true;
+                     }
+                     if (childElement) {
+                        sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
+                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(a.name()).append("</tt></TD>");
+                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(a.description()).append("</TD>");
+
+                        //if default value specified in annotation use it
+                        if (a.defaultValue().length() > 0) {
+                           sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(a.defaultValue()).append("</tt></TD>");
+                        }
+
+                        //otherwise reflect that field and read default value
+                        else {
+                           try {
+                              //reflect default value 
+                              Object matchingFieldValue = matchingFieldValue(m);
+                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(matchingFieldValue).append("</tt></TD>");
+                           } catch (Exception e) {
+                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append("N/A").append("</tt></TD>");
+                           }
+                        }
+
+                        //if allowed values specified for attribute, use it
+                        if (a.allowedValues().length() > 0) {
+                           sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(a.allowedValues()).append("</TD>");
+                        }
+                        //otherwise, reflect method and use parameter as allowed value
+                        else if (isSetterMethod(m)) {
+                           sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(m.getParameterTypes()[0].getSimpleName()).append("</TD>");
+                        }
+                        sb.append("\n</TR>");
+                     }
+                  }
+                  if (createdAttributes) {
+                     sb.append("\n</TABLE></TD></TR>");
+                  }
+
+
+                  for (Method m : clazz.getMethods()) {
+                     ConfigurationProperty[] cprops = null;
+                     ConfigurationProperties cp = m.getAnnotation(ConfigurationProperties.class);
+                     ConfigurationProperty p = null;
+                     if (cp != null) {
+                        cprops = cp.elements();
+                     } else {
+                        p = m.getAnnotation(ConfigurationProperty.class);
+                        if (p != null) {
+                           cprops = new ConfigurationProperty[]{p};
+                        }
+                     }
+
+                     if (cprops != null) {
+                        for (ConfigurationProperty c : cprops) {
+                           boolean child = c.parentElement().equals(ce.name());
+                           if (child && !createdProperties) {
+                              //custom properties                                                            
+                              sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Properties</i></strong></TH></TR>\n");
+                              sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
+                              sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
+                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\" WIDTH=\"40%\"><strong>Description</strong></TD>\n</TR>\n");
+                              createdProperties = true;
+                           }
+                           if (child) {
+                              sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
+                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(c.name()).append("</tt></TD>");
+                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(c.description()).append("</TD>");
+                              sb.append("\n</TR>");
+                           }
+                        }
+                     }
+                  }
+                  if (createdProperties) {
+                     sb.append("\n</TABLE></TD></TR>");
+                  }
+
+                  //closing table
+                  sb.append("\n</TABLE></TD></TR>");
+               }
+            }
+         }
+      } catch (Exception e) {
+      }
+      return sb.toString();
+   }
+
+   private boolean isSetterMethod(Method m) {
+      return m.getName().startsWith("set") && m.getParameterTypes().length == 1;
+   }
+
+   private Object matchingFieldValue(Method m) throws Exception {
+      String name = m.getName();
+      if (!name.startsWith("set")) throw new IllegalArgumentException("Not a setter method");
+
+      String fieldName = name.substring(name.indexOf("set") + 3);
+      fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
+      Field f = m.getDeclaringClass().getDeclaredField(fieldName);
+      return getField(f, m.getDeclaringClass().newInstance());
+
+   }
+
+   private static Object getField(Field field, Object target) {
+      if (!Modifier.isPublic(field.getModifiers())) {
+         field.setAccessible(true);
+      }
+      try {
+         return field.get(target);
+      }
+      catch (IllegalAccessException iae) {
+         throw new IllegalArgumentException("Could not get field " + field, iae);
+      }
+   }
+}

Deleted: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigDoclet.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigDoclet.java	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigDoclet.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -1,74 +0,0 @@
-package org.infinispan.tools.doclet.html;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-
-
-import com.sun.javadoc.DocErrorReporter;
-import com.sun.javadoc.RootDoc;
-import com.sun.tools.doclets.formats.html.ConfigurationImpl;
-
-/**
- * A Doclet that generates configuration guide for Infinispan
- * 
- * @author Vladimir Blagojevic
- * @since 4.0
- */
- at SuppressWarnings("restriction")
-public class ConfigDoclet {
-   static String outputDirectory = ".";
-   static String header, footer, encoding, title, bottom;
-
-   public static boolean start(RootDoc root) throws IOException {
-
-      HtmlGenerator generator = new ConfigHtmlGenerator(encoding, title(), bottom, footer, header,
-               "Infinispan configuration options", Arrays.asList("Configuration", "Infinispan",
-                        "Data Grids", "Documentation", "Reference", "MBeans"));
-
-      generator.generateHtml(outputDirectory + File.separator + "config.html");
-
-      return true;
-   }
-
-   private static String title() {
-      String s = "Configuration options";
-      if (title == null || title.equals(""))
-         return s;
-      else {
-         s += " (" + title + ")";
-         return s;
-      }
-   }
-
-   public static int optionLength(String option) {
-      return (ConfigurationImpl.getInstance()).optionLength(option);
-   }
-
-   public static boolean validOptions(String options[][], DocErrorReporter reporter) {
-      for (String[] option : options) {
-         // System.out.println("  >> Option " + Arrays.toString(option));
-         if (option[0].equals("-d"))
-            outputDirectory = option[1];
-         else if (option[0].equals("-encoding"))
-            encoding = option[1];
-         else if (option[0].equals("-bottom"))
-            bottom = option[1];
-         else if (option[0].equals("-footer"))
-            footer = option[1];
-         else if (option[0].equals("-header"))
-            header = option[1];
-         else if (option[0].equals("-doctitle"))
-            title = option[1];
-      }
-      return (ConfigurationImpl.getInstance()).validOptions(options, reporter);
-   }
-
-   public static void main(String[] args) throws IOException {
-      HtmlGenerator generator = new ConfigHtmlGenerator(encoding, title(), bottom, footer, header,
-               "Infinispan configuration options", Arrays.asList("Configuration", "Infinispan",
-                        "Data Grids", "Documentation", "Reference", "MBeans"));
-
-      generator.generateHtml(outputDirectory + File.separator + "config.html");
-   }
-}

Deleted: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigHtmlGenerator.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigHtmlGenerator.java	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/html/ConfigHtmlGenerator.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -1,183 +0,0 @@
-package org.infinispan.tools.doclet.html;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.List;
-
-import org.infinispan.config.AbstractConfigurationBean;
-import org.infinispan.config.ConfigurationAttribute;
-import org.infinispan.config.ConfigurationElement;
-import org.infinispan.config.ConfigurationElements;
-import org.infinispan.config.ConfigurationProperties;
-import org.infinispan.config.ConfigurationProperty;
-import org.infinispan.util.ClassFinder;
-
-public class ConfigHtmlGenerator extends HtmlGenerator {
-
-
-   public ConfigHtmlGenerator(String encoding, String title, String bottom, String footer,
-            String header, String metaDescription, List<String> metaKeywords) {
-      super(encoding, title, bottom, footer, header, metaDescription, metaKeywords);
-     
-   }
-
-   protected String generateContents() {
-      StringBuilder sb = new StringBuilder();
-      // index of components
-      sb.append("<h2>Infinispan configuration options</h2><br />");
-      sb.append("<UL>");
-      
-      List<Class<?>> list;
-      try {
-         list = ClassFinder.isAssignableFrom(AbstractConfigurationBean.class);                  
-         for(Class<?> clazz: list){
-            ConfigurationElement ces [] = null;
-            ConfigurationElements configurationElements = clazz.getAnnotation(ConfigurationElements.class);
-            ConfigurationElement configurationElement = clazz.getAnnotation(ConfigurationElement.class);
-            
-            if(configurationElement != null && configurationElements == null){
-               ces = new ConfigurationElement[]{configurationElement};
-            }
-            if(configurationElements != null && configurationElement ==null){
-               ces = configurationElements.elements();
-            }            
-            if(ces != null){                              
-               for(ConfigurationElement ce:ces){
-                  
-                  boolean createdAttributes = false;
-                  boolean createdProperties = false;                  
-                  sb.append("<A NAME=\"").append(ce.name()).append("\">\n");
-                  sb.append("\n<TABLE WIDTH=\"100%\" CELLSPACING=\"1\" CELLPADDING=\"0\" BORDER=\"1\">\n");
-                  sb.append("<TR CLASS=\"TableHeadingColor\"><TH ALIGN=\"LEFT\"><b>Element: <tt> ").append(ce.name()).append(", </tt></b>");
-                  sb.append("Parent element: <tt>").append(ce.parent()).append("</tt>");
-                  if(ce.description().length() > 0){
-                     sb.append(" ").append(ce.description()).append("\n");
-                  } else {
-                     sb.append("\n");
-                  }                 
-                  for(Method m:clazz.getMethods()){
-                     ConfigurationAttribute a = m.getAnnotation(ConfigurationAttribute.class);
-                     boolean childElement = a != null && a.containingElement().equals(ce.name());
-                     if(childElement && !createdAttributes){
-                     // Attributes                        
-                        sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Attributes</i></strong></TH></TR>\n");
-                        sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
-                        sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
-                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\" WIDTH=\"40%\"><strong>Description</strong></TD>\n");
-                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Default values</strong></TD>\n");
-                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Allowed values</strong></TD>\n</TR>\n");
-                        createdAttributes = true;
-                     } 
-                     if (childElement){    
-                        sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
-                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(a.name()).append("</tt></TD>");
-                        sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(a.description()).append("</TD>");
-                        
-                        //if default value specified in annotation use it
-                        if(a.defaultValue().length() >0){
-                           sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(a.defaultValue()).append("</tt></TD>");
-                        }
-                        
-                        //otherwise reflect that field and read default value
-                        else{
-                           try{
-                              //reflect default value 
-                              Object matchingFieldValue = matchingFieldValue(m);
-                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(matchingFieldValue).append("</tt></TD>");                             
-                           } catch(Exception e){
-                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append("N/A").append("</tt></TD>");      
-                           }
-                        }
-                        
-                        //if allowed values specified for attribute, use it
-                        if(a.allowedValues().length() > 0){
-                           sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(a.allowedValues()).append("</TD>");
-                        }
-                        //otherwise, reflect method and use parameter as allowed value
-                        else if(isSetterMethod(m)){                           
-                           sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(m.getParameterTypes()[0].getSimpleName()).append("</TD>");
-                        }
-                        sb.append("\n</TR>");                              
-                     }                     
-                  }   
-                  if (createdAttributes) {
-                     sb.append("\n</TABLE></TD></TR>");
-                  }
-                
-                     
-                              
-                  for(Method m:clazz.getMethods()){                     
-                     ConfigurationProperty[] cprops = null;
-                     ConfigurationProperties cp = m.getAnnotation(ConfigurationProperties.class);
-                     ConfigurationProperty p = null;
-                     if (cp != null) {
-                        cprops = cp.elements();
-                     } else {
-                        p = m.getAnnotation(ConfigurationProperty.class);
-                        if (p != null) {
-                           cprops = new ConfigurationProperty[] { p };
-                        }
-                     }
-                     
-                     if(cprops != null){                        
-                        for (ConfigurationProperty c : cprops) {
-                           boolean child = c.parentElement().equals(ce.name());
-                           if(child && !createdProperties){
-                              //custom properties                                                            
-                              sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Properties</i></strong></TH></TR>\n");
-                              sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
-                              sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
-                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\" WIDTH=\"40%\"><strong>Description</strong></TD>\n</TR>\n");                             
-                              createdProperties = true;
-                           } 
-                           if (child){    
-                              sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
-                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(c.name()).append("</tt></TD>");
-                              sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(c.description()).append("</TD>");                             
-                              sb.append("\n</TR>");                                                  
-                           }   
-                        }                       
-                     }                                          
-                  }
-                  if(createdProperties){
-                     sb.append("\n</TABLE></TD></TR>");
-                  }
-                  
-                  //closing table
-                  sb.append("\n</TABLE></TD></TR>");
-               }
-            }
-         }
-      } catch (Exception e) {
-      }      
-      return sb.toString();
-   }
-   
-   private boolean isSetterMethod(Method m){
-      return m.getName().startsWith("set") && m.getParameterTypes().length ==1;
-   }
-   
-   private Object matchingFieldValue(Method m) throws Exception{      
-      String name = m.getName();
-      if(!name.startsWith("set")) throw new IllegalArgumentException("Not a setter method");
-      
-      String fieldName = name.substring(name.indexOf("set") + 3);         
-      fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);         
-      Field f = m.getDeclaringClass().getDeclaredField(fieldName);
-      return getField(f, m.getDeclaringClass().newInstance());
-     
-   }
-   
-   private static Object getField(Field field, Object target) {
-      if(!Modifier.isPublic(field.getModifiers())) {
-          field.setAccessible(true);
-      }
-      try {
-          return field.get(target);
-      }
-      catch(IllegalAccessException iae) {
-          throw new IllegalArgumentException("Could not get field " + field, iae);
-      }
-  }
-}

Deleted: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -1,100 +0,0 @@
-package org.infinispan.tools.doclet.html;
-
-import org.infinispan.tools.doclet.jmx.MBeanAttribute;
-import org.infinispan.tools.doclet.jmx.MBeanComponent;
-import org.infinispan.tools.doclet.jmx.MBeanOperation;
-
-import java.util.List;
-
-public class JmxHtmlGenerator extends HtmlGenerator {
-   List<MBeanComponent> components;
-
-   public JmxHtmlGenerator(String encoding, String title, String bottom, String footer, String header, String metaDescription, List<String> metaKeywords, List<MBeanComponent> components) {
-      super(encoding, title, bottom, footer, header, metaDescription, metaKeywords);
-      this.components = components;
-   }
-
-   protected String generateContents() {
-      StringBuilder sb = new StringBuilder();
-      // index of components
-      sb.append("<h2>JMX Components available</h2><br />");
-      sb.append("<UL>");
-      for (MBeanComponent mbean : components) {
-         sb.append("<LI><A HREF=\"#").append(mbean.name).append("\">").append(mbean.name).append("</A>");
-         if (isValid(mbean.desc)) sb.append(" <I>(").append(mbean.desc).append(")</I>");
-         sb.append("</LI>\n");
-      }
-      sb.append("</UL>");
-      sb.append("<BR /><BR /><HR /><BR />");
-
-      // a table for each component.
-      for (MBeanComponent mbean : components) {
-         sb.append("<A NAME=\"").append(mbean.name).append("\">\n");
-         sb.append("<TABLE WIDTH=\"100%\" CELLSPACING=\"1\" CELLPADDING=\"0\" BORDER=\"1\">\n");
-         sb.append("<TR CLASS=\"TableHeadingColor\"><TH ALIGN=\"LEFT\"><b>Component <tt>").append(mbean.name).append("</tt></b>  (Class <TT><A HREF=\"")
-               .append(toURL(mbean.className)).append("\">").append(mbean.className).append("</A></TT>)");
-         if (isValid(mbean.desc)) sb.append("<br /><I>").append(mbean.desc).append("</I>\n");
-         sb.append("</TH></TR>\n");
-
-         if (!mbean.attributes.isEmpty()) {
-            // Attributes
-            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Attributes</i></strong></TH></TR>\n");
-            sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
-            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
-            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\" WIDTH=\"40%\"><strong>Description</strong></TD>\n");
-            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Type</strong></TD>\n");
-            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Writable</strong></TD></TR>\n");
-            for (MBeanAttribute attr : mbean.attributes) {
-               sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(attr.name).append("</tt></TD>");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(attr.desc).append("</TD>");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(attr.type).append("</tt></TD>");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(attr.writable).append("</TD>");
-               sb.append("</TR>");
-            }
-            sb.append("</TABLE></TD></TR>");
-         }
-
-         if (!mbean.operations.isEmpty()) {
-            // Operations
-            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Operations</i></strong></TH></TR>\n");
-            sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
-            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
-            sb.append("<TD ALIGN=\"LEFT\" WIDTH=\"50%\" VALIGN=\"TOP\"><strong>Description</strong></TD>\n");
-            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Signature</strong></TD></TR>\n");
-            for (MBeanOperation operation : mbean.operations) {
-               sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(operation.name).append("</tt></TD>");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(operation.desc).append("</TD>");
-               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(generateSignature(operation)).append("</tt></TD>");
-               sb.append("</TR>");
-            }
-            sb.append("</TABLE></TD></TR>");
-         }
-
-         sb.append("</TABLE><BR /><BR />");
-      }
-
-      return sb.toString();
-   }
-
-   private String toURL(String fqcn) {
-      return fqcn.replace(".", "/") + ".html";
-   }
-
-   private String generateSignature(MBeanOperation op) {
-      // <retType> <name>(<args>)
-      StringBuilder sb = new StringBuilder();
-      if (isValid(op.returnType))
-         sb.append(op.returnType);
-      else
-         sb.append("void");
-
-      sb.append(" ").append(op.name);
-      if (isValid(op.signature))
-         sb.append("(").append(op.signature).append(")");
-      else
-         sb.append("()");
-      return sb.toString();
-   }
-}

Modified: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java	2009-07-09 13:30:10 UTC (rev 540)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -13,7 +13,6 @@
 import org.infinispan.jmx.annotations.ManagedAttribute;
 import org.infinispan.jmx.annotations.ManagedOperation;
 import org.infinispan.tools.doclet.html.HtmlGenerator;
-import org.infinispan.tools.doclet.html.JmxHtmlGenerator;
 
 import java.io.File;
 import java.io.IOException;

Copied: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxHtmlGenerator.java (from rev 540, trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java)
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxHtmlGenerator.java	                        (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxHtmlGenerator.java	2009-07-09 19:12:22 UTC (rev 541)
@@ -0,0 +1,98 @@
+package org.infinispan.tools.doclet.jmx;
+
+import org.infinispan.tools.doclet.html.HtmlGenerator;
+
+import java.util.List;
+
+public class JmxHtmlGenerator extends HtmlGenerator {
+   List<MBeanComponent> components;
+
+   public JmxHtmlGenerator(String encoding, String title, String bottom, String footer, String header, String metaDescription, List<String> metaKeywords, List<MBeanComponent> components) {
+      super(encoding, title, bottom, footer, header, metaDescription, metaKeywords);
+      this.components = components;
+   }
+
+   protected String generateContents() {
+      StringBuilder sb = new StringBuilder();
+      // index of components
+      sb.append("<h2>JMX Components available</h2><br />");
+      sb.append("<UL>");
+      for (MBeanComponent mbean : components) {
+         sb.append("<LI><A HREF=\"#").append(mbean.name).append("\">").append(mbean.name).append("</A>");
+         if (isValid(mbean.desc)) sb.append(" <I>(").append(mbean.desc).append(")</I>");
+         sb.append("</LI>\n");
+      }
+      sb.append("</UL>");
+      sb.append("<BR /><BR /><HR /><BR />");
+
+      // a table for each component.
+      for (MBeanComponent mbean : components) {
+         sb.append("<A NAME=\"").append(mbean.name).append("\">\n");
+         sb.append("<TABLE WIDTH=\"100%\" CELLSPACING=\"1\" CELLPADDING=\"0\" BORDER=\"1\">\n");
+         sb.append("<TR CLASS=\"TableHeadingColor\"><TH ALIGN=\"LEFT\"><b>Component <tt>").append(mbean.name).append("</tt></b>  (Class <TT><A HREF=\"")
+               .append(toURL(mbean.className)).append("\">").append(mbean.className).append("</A></TT>)");
+         if (isValid(mbean.desc)) sb.append("<br /><I>").append(mbean.desc).append("</I>\n");
+         sb.append("</TH></TR>\n");
+
+         if (!mbean.attributes.isEmpty()) {
+            // Attributes
+            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Attributes</i></strong></TH></TR>\n");
+            sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
+            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
+            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\" WIDTH=\"40%\"><strong>Description</strong></TD>\n");
+            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Type</strong></TD>\n");
+            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Writable</strong></TD></TR>\n");
+            for (MBeanAttribute attr : mbean.attributes) {
+               sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(attr.name).append("</tt></TD>");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(attr.desc).append("</TD>");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(attr.type).append("</tt></TD>");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(attr.writable).append("</TD>");
+               sb.append("</TR>");
+            }
+            sb.append("</TABLE></TD></TR>");
+         }
+
+         if (!mbean.operations.isEmpty()) {
+            // Operations
+            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TH ALIGN=\"LEFT\"><strong><i>Operations</i></strong></TH></TR>\n");
+            sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\"><TD ALIGN=\"CENTER\"><TABLE WIDTH=\"100%\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\">\n");
+            sb.append("<TR CLASS=\"TableSubHeadingColor\"><TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Name</strong></TD>\n");
+            sb.append("<TD ALIGN=\"LEFT\" WIDTH=\"50%\" VALIGN=\"TOP\"><strong>Description</strong></TD>\n");
+            sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><strong>Signature</strong></TD></TR>\n");
+            for (MBeanOperation operation : mbean.operations) {
+               sb.append("<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(operation.name).append("</tt></TD>");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\">").append(operation.desc).append("</TD>");
+               sb.append("<TD ALIGN=\"LEFT\" VALIGN=\"TOP\"><tt>").append(generateSignature(operation)).append("</tt></TD>");
+               sb.append("</TR>");
+            }
+            sb.append("</TABLE></TD></TR>");
+         }
+
+         sb.append("</TABLE><BR /><BR />");
+      }
+
+      return sb.toString();
+   }
+
+   private String toURL(String fqcn) {
+      return fqcn.replace(".", "/") + ".html";
+   }
+
+   private String generateSignature(MBeanOperation op) {
+      // <retType> <name>(<args>)
+      StringBuilder sb = new StringBuilder();
+      if (isValid(op.returnType))
+         sb.append(op.returnType);
+      else
+         sb.append("void");
+
+      sb.append(" ").append(op.name);
+      if (isValid(op.signature))
+         sb.append("(").append(op.signature).append(")");
+      else
+         sb.append("()");
+      return sb.toString();
+   }
+}


Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxHtmlGenerator.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the infinispan-commits mailing list