[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