[infinispan-commits] Infinispan SVN: r409 - in trunk: core/src/main/java/org/infinispan/jmx and 14 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed Jun 3 20:28:21 EDT 2009
Author: manik.surtani at jboss.com
Date: 2009-06-03 20:28:21 -0400 (Wed, 03 Jun 2009)
New Revision: 409
Added:
trunk/tools/
trunk/tools/pom.xml
trunk/tools/src/
trunk/tools/src/main/
trunk/tools/src/main/java/
trunk/tools/src/main/java/org/
trunk/tools/src/main/java/org/infinispan/
trunk/tools/src/main/java/org/infinispan/tools/
trunk/tools/src/main/java/org/infinispan/tools/doclet/
trunk/tools/src/main/java/org/infinispan/tools/doclet/html/
trunk/tools/src/main/java/org/infinispan/tools/doclet/html/HtmlGenerator.java
trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java
trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/
trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxComponent.java
trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java
trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanAttribute.java
trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanComponent.java
trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanOperation.java
Modified:
trunk/core/src/main/java/org/infinispan/jmx/ResourceDMBean.java
trunk/core/src/main/java/org/infinispan/jmx/annotations/MBean.java
trunk/core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java
trunk/parent/pom.xml
trunk/pom.xml
trunk/src/main/resources/assemblies/all.xml
trunk/src/main/resources/assemblies/bin.xml
trunk/src/main/resources/assemblies/single_jar.xml
Log:
Added tools to generate JMX documentation
Modified: trunk/core/src/main/java/org/infinispan/jmx/ResourceDMBean.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/jmx/ResourceDMBean.java 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/core/src/main/java/org/infinispan/jmx/ResourceDMBean.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -357,7 +357,7 @@
}
}
}
- } else if (method.isAnnotationPresent(ManagedOperation.class) || isMBeanAnnotationPresentWithExposeAll()) {
+ } else if (method.isAnnotationPresent(ManagedOperation.class)) {
ManagedOperation op = method.getAnnotation(ManagedOperation.class);
String attName = method.getName();
if (isSetMethod(method) || isGetMethod(method)) {
@@ -493,11 +493,6 @@
}
}
- private boolean isMBeanAnnotationPresentWithExposeAll() {
- Class<?> c = getObject().getClass();
- return c.isAnnotationPresent(MBean.class) && c.getAnnotation(MBean.class).exposeAll();
- }
-
private class MethodAttributeEntry implements AttributeEntry {
final MBeanAttributeInfo info;
Modified: trunk/core/src/main/java/org/infinispan/jmx/annotations/MBean.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/jmx/annotations/MBean.java 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/core/src/main/java/org/infinispan/jmx/annotations/MBean.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -41,7 +41,5 @@
public @interface MBean {
String objectName() default "";
- boolean exposeAll() default false;
-
String description() default "";
}
Modified: trunk/core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -51,7 +51,7 @@
* @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
* @since 4.0
*/
- at MBean(objectName = "MvccLockManager")
+ at MBean(objectName = "MvccLockManager", description = "Manager that handles MVCC locks for entries")
public class LockManagerImpl implements LockManager {
protected Configuration configuration;
LockContainer lockContainer;
Modified: trunk/parent/pom.xml
===================================================================
--- trunk/parent/pom.xml 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/parent/pom.xml 2009-06-04 00:28:21 UTC (rev 409)
@@ -205,40 +205,77 @@
</execution>
</executions>
</plugin>
+
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-javadoc-plugin</artifactId>-->
+ <!--<executions>-->
+ <!--<execution>-->
+ <!--<id>javadoc</id>-->
+ <!--<phase>package</phase>-->
+ <!--<goals>-->
+ <!--<goal>jar</goal>-->
+ <!--</goals>-->
+ <!--<configuration>-->
+ <!--<quiet>true</quiet>-->
+ <!--<links>-->
+ <!--<link>http://java.sun.com/j2se/1.5.0/docs/api/</link>-->
+ <!--<link>http://java.sun.com/javaee/5/docs/api/</link>-->
+ <!--</links>-->
+ <!--<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>-->
+ <!--</execution>-->
+ <!--</executions>-->
+ <!--</plugin>-->
+
+ <!--<plugin>-->
+ <!--<groupId>org.apache.maven.plugins</groupId>-->
+ <!--<artifactId>maven-javadoc-plugin</artifactId>-->
+ <!--<configuration>-->
+ <!--<doclet>org.infinispan.tools.doclet.jmx.JmxDoclet</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>jar</goal>-->
+ <!--</goals>-->
+ <!--</execution>-->
+ <!--</executions>-->
+ <!--</plugin>-->
+
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <executions>
- <execution>
- <id>javadoc</id>
- <phase>package</phase>
- <goals>
- <goal>jar</goal>
- </goals>
- <configuration>
- <quiet>true</quiet>
- <links>
- <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
- <link>http://java.sun.com/javaee/5/docs/api/</link>
- </links>
- <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>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
@@ -382,5 +419,6 @@
<protocol.stack>tcp</protocol.stack>
</properties>
</profile>
+
</profiles>
</project>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/pom.xml 2009-06-04 00:28:21 UTC (rev 409)
@@ -29,6 +29,7 @@
<module>cachestore/jdbm</module>
<module>jopr-plugin</module>
<module>gui-demo</module>
+ <module>tools</module>
</modules>
<profiles>
@@ -42,14 +43,21 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <quiet>true</quiet>
- <links>
- <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
- <link>http://java.sun.com/javaee/5/docs/api/</link>
- </links>
- <footer><![CDATA[
- <!-- Google Analytics -->
+ <executions>
+ <execution>
+ <id>javadoc</id>
+ <phase>prepare-package</phase>
+ <goals>
+ <goal>aggregate</goal>
+ </goals>
+ <configuration>
+ <quiet>true</quiet>
+ <links>
+ <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
+ <link>http://java.sun.com/javaee/5/docs/api/</link>
+ </links>
+ <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"));
@@ -60,17 +68,11 @@
pageTracker._trackPageview();
} catch(err) {}</script>
]]></footer>
- </configuration>
- <executions>
- <execution>
- <id>javadoc</id>
- <phase>package</phase>
- <goals>
- <goal>aggregate</goal>
- </goals>
+ </configuration>
</execution>
</executions>
</plugin>
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
@@ -159,5 +161,47 @@
</plugins>
</build>
</profile>
+
+ <profile>
+ <!-- TODO somehow combine this with the 'distribution' profile so all docs are built together -->
+ <id>jmxdoc</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <doclet>org.infinispan.tools.doclet.jmx.JmxDoclet</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/src/main/resources/assemblies/all.xml
===================================================================
--- trunk/src/main/resources/assemblies/all.xml 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/src/main/resources/assemblies/all.xml 2009-06-04 00:28:21 UTC (rev 409)
@@ -32,9 +32,12 @@
</formats>
<moduleSets>
+
<moduleSet>
<includeSubModules>false</includeSubModules>
-
+ <excludes>
+ <exclude>org.infinispan:infinispan-tools</exclude>
+ </excludes>
<sources>
<includeModuleDirectory>false</includeModuleDirectory>
@@ -110,6 +113,9 @@
<moduleSet>
<includeSubModules>false</includeSubModules>
+ <excludes>
+ <exclude>org.infinispan:infinispan-tools</exclude>
+ </excludes>
<binaries>
<attachmentClassifier>tests</attachmentClassifier>
<outputDirectory>test/modules/${module.basedir.name}</outputDirectory>
Modified: trunk/src/main/resources/assemblies/bin.xml
===================================================================
--- trunk/src/main/resources/assemblies/bin.xml 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/src/main/resources/assemblies/bin.xml 2009-06-04 00:28:21 UTC (rev 409)
@@ -28,7 +28,9 @@
<moduleSets>
<moduleSet>
<includeSubModules>false</includeSubModules>
-
+ <excludes>
+ <exclude>org.infinispan:infinispan-tools</exclude>
+ </excludes>
<sources>
<includeModuleDirectory>false</includeModuleDirectory>
@@ -40,7 +42,7 @@
<outputDirectory>etc</outputDirectory>
<excludes>
<exclude>**/*.sh</exclude>
- <exclude>**/*.bat</exclude>
+ <exclude>**/*.bat</exclude>
<exclude>**/*.cmd</exclude>
<exclude>**/*.py</exclude>
</excludes>
Modified: trunk/src/main/resources/assemblies/single_jar.xml
===================================================================
--- trunk/src/main/resources/assemblies/single_jar.xml 2009-06-03 17:28:06 UTC (rev 408)
+++ trunk/src/main/resources/assemblies/single_jar.xml 2009-06-04 00:28:21 UTC (rev 409)
@@ -23,6 +23,10 @@
<moduleSets>
<moduleSet>
<includeSubModules>false</includeSubModules>
+ <excludes>
+ <exclude>org.infinispan:infinispan-tools</exclude>
+ <exclude>org.infinispan:infinispan-jopr-plugin</exclude>
+ </excludes>
<sources>
<includeModuleDirectory>false</includeModuleDirectory>
Added: trunk/tools/pom.xml
===================================================================
--- trunk/tools/pom.xml (rev 0)
+++ trunk/tools/pom.xml 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-parent</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-tools</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ <name>Infinispan Tools</name>
+ <description>Infinispan - Tools for project</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-core</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
Property changes on: trunk/tools/pom.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/HtmlGenerator.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/html/HtmlGenerator.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/html/HtmlGenerator.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,83 @@
+package org.infinispan.tools.doclet.html;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.List;
+
+/**
+ * Generates HTML documents
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public abstract class HtmlGenerator {
+ String encoding, title, bottom, footer, header, metaDescription;
+ List<String> metaKeywords;
+
+ public HtmlGenerator(String encoding, String title, String bottom, String footer, String header, String metaDescription, List<String> metaKeywords) {
+ this.encoding = encoding;
+ this.title = title;
+ this.footer = footer;
+ this.header = header;
+ this.bottom = bottom;
+ this.metaDescription = metaDescription;
+ this.metaKeywords = metaKeywords;
+ }
+
+ public void generateHtml(String fileName) throws IOException {
+ FileOutputStream fos = new FileOutputStream(fileName);
+ OutputStreamWriter osw = isValid(encoding) ? new OutputStreamWriter(fos, encoding) : new OutputStreamWriter(fos);
+ PrintWriter writer = new PrintWriter(osw);
+ try {
+ writer.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" +
+ "\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
+ writer.println("<HTML xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">");
+ writer.println("<HEAD>");
+ if (isValid(metaDescription))
+ writer.println("<META NAME=\"description\" content=\"" + metaDescription + "\" />");
+ if (metaKeywords != null && !metaKeywords.isEmpty()) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<META NAME=\"keywords\" content=\"");
+ for (String keyword : metaKeywords) sb.append(keyword).append(", ");
+ sb.append("\" />");
+ }
+ writer.println("<TITLE>");
+ writer.println(title);
+ writer.println("</TITLE>");
+ writer.println("<LINK REL=\"stylesheet\" HREF=\"stylesheet.css\" TYPE=\"text/css\"/>");
+
+ writer.println("</HEAD>");
+ writer.println("<BODY>");
+
+ if (isValid(header)) {
+ writer.println(header);
+ writer.println("<HR />");
+ }
+
+ writer.println(generateContents());
+
+ if (isValid(bottom)) {
+ writer.println("<HR />");
+ writer.println(bottom);
+ }
+
+ if (isValid(footer)) writer.println(footer);
+
+
+ writer.println("</BODY>");
+ writer.println("</HTML>");
+ } finally {
+ writer.close();
+ osw.close();
+ fos.close();
+ }
+ }
+
+ protected abstract String generateContents();
+
+ protected boolean isValid(String s) {
+ return s != null && !s.trim().equals("");
+ }
+}
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/HtmlGenerator.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,100 @@
+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();
+ }
+}
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/html/JmxHtmlGenerator.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxComponent.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxComponent.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxComponent.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,33 @@
+package org.infinispan.tools.doclet.jmx;
+
+/**
+ * A JMX Component
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public abstract class JmxComponent implements Comparable<JmxComponent> {
+ public String name;
+ public String desc = "";
+
+ public int compareTo(JmxComponent other) {
+ return name.compareTo(other.name);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ JmxComponent that = (JmxComponent) o;
+
+ if (name != null ? !name.equals(that.name) : that.name != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return name != null ? name.hashCode() : 0;
+ }
+}
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxComponent.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,185 @@
+package org.infinispan.tools.doclet.jmx;
+
+import com.sun.javadoc.AnnotationDesc;
+import com.sun.javadoc.AnnotationTypeDoc;
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.DocErrorReporter;
+import com.sun.javadoc.FieldDoc;
+import com.sun.javadoc.MethodDoc;
+import com.sun.javadoc.Parameter;
+import com.sun.javadoc.RootDoc;
+import com.sun.tools.doclets.formats.html.ConfigurationImpl;
+import org.infinispan.jmx.annotations.MBean;
+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;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * A Doclet that generates a guide to all JMX components exposed by Infinispan
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public class JmxDoclet {
+ static String outputDirectory = ".";
+ static String header, footer, encoding, title, bottom;
+
+ public static boolean start(RootDoc root) throws IOException {
+ ClassDoc[] classes = root.classes();
+
+ List<MBeanComponent> mbeans = new LinkedList<MBeanComponent>();
+
+ for (ClassDoc cd : classes) {
+ MBeanComponent mbean = toJmxComponent(cd);
+ if (mbean != null) mbeans.add(mbean);
+ }
+
+ // sort components alphabetically
+ Collections.sort(mbeans);
+
+ HtmlGenerator generator = new JmxHtmlGenerator(encoding, jmxTitle(), bottom, footer, header, "JMX components exposed by Infinispan",
+ Arrays.asList("JMX", "Infinispan", "Data Grids", "Documentation", "Reference", "MBeans", "Management", "Console"),
+ mbeans);
+ generator.generateHtml(outputDirectory + File.separator + "jmxComponents.html");
+
+ return true;
+ }
+
+ private static String jmxTitle() {
+ String s = "JMX Components";
+ 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);
+ }
+
+ private static MBeanComponent toJmxComponent(ClassDoc cd) {
+ boolean isMBean = false;
+ MBeanComponent mbc = new MBeanComponent();
+ mbc.className = cd.qualifiedTypeName();
+ mbc.name = cd.typeName();
+
+ for (AnnotationDesc a : cd.annotations()) {
+ AnnotationTypeDoc atd = a.annotationType();
+ String annotationName = atd.qualifiedTypeName();
+
+ if (annotationName.equals(MBean.class.getName())) {
+ isMBean = true;
+ setNameDesc(a.elementValues(), mbc);
+ }
+ }
+
+ // now to test method level annotations
+ for (MethodDoc method : cd.methods()) {
+ for (AnnotationDesc a : method.annotations()) {
+ String annotationName = a.annotationType().qualifiedTypeName();
+ if (annotationName.equals(ManagedOperation.class.getName())) {
+ isMBean = true;
+ MBeanOperation o = new MBeanOperation();
+ o.name = method.name();
+ setNameDesc(a.elementValues(), o);
+ o.returnType = method.returnType().simpleTypeName();
+ for (Parameter p : method.parameters()) o.addParam(p.type().simpleTypeName());
+ mbc.operations.add(o);
+
+
+ } else if (annotationName.equals(ManagedAttribute.class.getName())) {
+ isMBean = true;
+ MBeanAttribute attr = new MBeanAttribute();
+
+ // if this is a getter, look at the return type
+ if (method.name().startsWith("get")) {
+ attr.type = method.returnType().simpleTypeName();
+ } else if (method.parameters().length > 0) {
+ attr.type = method.parameters()[0].type().simpleTypeName();
+ }
+
+ attr.name = fromBeanConvention(method.name());
+ setNameDesc(a.elementValues(), attr);
+ setWritable(a.elementValues(), attr);
+ mbc.attributes.add(attr);
+ }
+ }
+ }
+
+ // and field level annotations
+ for (FieldDoc field : cd.fields()) {
+ for (AnnotationDesc a : field.annotations()) {
+ String annotationName = a.annotationType().qualifiedTypeName();
+ if (annotationName.equals(ManagedAttribute.class.getName())) {
+ isMBean = true;
+ MBeanAttribute attr = new MBeanAttribute();
+ attr.name = field.name();
+ attr.type = field.type().simpleTypeName();
+ setNameDesc(a.elementValues(), attr);
+ setWritable(a.elementValues(), attr);
+ mbc.attributes.add(attr);
+ }
+ }
+ }
+
+ if (isMBean) {
+ Collections.sort(mbc.attributes);
+ Collections.sort(mbc.operations);
+ return mbc;
+ } else {
+ return null;
+ }
+ }
+
+ private static String fromBeanConvention(String getterOrSetter) {
+ if (getterOrSetter.startsWith("get") || getterOrSetter.startsWith("set")) {
+ String withoutGet = getterOrSetter.substring(4);
+ return Character.toLowerCase(getterOrSetter.charAt(3)) + withoutGet;
+ }
+ return getterOrSetter;
+ }
+
+ private static void setNameDesc(AnnotationDesc.ElementValuePair[] evps, JmxComponent mbc) {
+ for (AnnotationDesc.ElementValuePair evp : evps) {
+ if (evp.element().name().equals("objectName")) {
+ mbc.name = evp.value().value().toString();
+ } else if (evp.element().name().equals("name")) {
+ mbc.name = evp.value().value().toString();
+ } else if (evp.element().name().equals("description")) {
+ mbc.desc = evp.value().value().toString();
+ }
+ }
+ }
+
+ private static void setWritable(AnnotationDesc.ElementValuePair[] evps, MBeanAttribute attr) {
+ for (AnnotationDesc.ElementValuePair evp : evps) {
+ if (evp.element().name().equals("writable")) {
+ attr.writable = (Boolean) evp.value().value();
+ }
+ }
+ }
+}
+
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/JmxDoclet.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanAttribute.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanAttribute.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanAttribute.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,17 @@
+package org.infinispan.tools.doclet.jmx;
+
+/**
+ * An MBean attribute
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public class MBeanAttribute extends JmxComponent {
+ public boolean writable;
+ public String type;
+
+ @Override
+ public String toString() {
+ return "Attribute(name = " + name + ", writable = " + writable + ", type = " + type + ", desc = " + desc + ")";
+ }
+}
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanAttribute.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanComponent.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanComponent.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanComponent.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,21 @@
+package org.infinispan.tools.doclet.jmx;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * * An MBean component
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public class MBeanComponent extends JmxComponent {
+ public String className;
+ public List<MBeanOperation> operations = new LinkedList<MBeanOperation>();
+ public List<MBeanAttribute> attributes = new LinkedList<MBeanAttribute>();
+
+ @Override
+ public String toString() {
+ return "MBean component " + name + " (class " + className + ") op = " + operations + " attr = " + attributes;
+ }
+}
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanComponent.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanOperation.java
===================================================================
--- trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanOperation.java (rev 0)
+++ trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanOperation.java 2009-06-04 00:28:21 UTC (rev 409)
@@ -0,0 +1,23 @@
+package org.infinispan.tools.doclet.jmx;
+
+/**
+ * An MBean operation
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public class MBeanOperation extends JmxComponent {
+ public String returnType = "void";
+ public String signature = "";
+ int n = 0;
+
+ @Override
+ public String toString() {
+ return "Operation(name = " + name + ", desc = " + desc + ", sig = " + signature + ", retType = " + returnType + ")";
+ }
+
+ void addParam(String paramType) {
+ if (!signature.equals("")) signature += ", ";
+ signature += paramType + " p" + n++;
+ }
+}
Property changes on: trunk/tools/src/main/java/org/infinispan/tools/doclet/jmx/MBeanOperation.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
More information about the infinispan-commits
mailing list