You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/06/18 00:23:26 UTC
svn commit: r1137053 [1/3] - in /openejb/trunk/sandbox/tools: ./
src/main/java/org/apache/openejb/tools/
src/main/java/org/apache/openejb/tools/examples/
src/main/resources/generate-index/ src/main/resources/generate-index/css/
src/main/resources/gener...
Author: rmannibucau
Date: Fri Jun 17 22:23:25 2011
New Revision: 1137053
URL: http://svn.apache.org/viewvc?rev=1137053&view=rev
Log:
refactoring generate index source to manage templates (with velocity) to be able to maintain views more easily
Added:
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/ListBuilder.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/MapBuilder.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/OpenEJBTemplate.java
openejb/trunk/sandbox/tools/src/main/resources/generate-index/config.properties
openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/
openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/openejb-examples.css
openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/prettify.css
openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/
openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/glossary.js
openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/jquery-latest.js
openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/jquery.query.js
openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/openejb-examples.js
openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/prettify.js
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/example.vm
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/external.vm
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/footer.vm
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/glossary.vm
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/header.vm
openejb/trunk/sandbox/tools/src/main/resources/generate-index/velocity/index.vm
Modified:
openejb/trunk/sandbox/tools/pom.xml
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/Daily.java
openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/GenerateIndex.java
Modified: openejb/trunk/sandbox/tools/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/pom.xml?rev=1137053&r1=1137052&r2=1137053&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/pom.xml (original)
+++ openejb/trunk/sandbox/tools/pom.xml Fri Jun 17 22:23:25 2011
@@ -136,6 +136,11 @@
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity</artifactId>
+ <version>1.7</version>
+ </dependency>
</dependencies>
</project>
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/Daily.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/Daily.java?rev=1137053&r1=1137052&r2=1137053&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/Daily.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/Daily.java Fri Jun 17 22:23:25 2011
@@ -32,5 +32,6 @@ public class Daily {
public static void main(String[] args) {
GenerateIndex.main(args); // "/tmp/examples.zip" "/tmp/openejb" for example
+ // GenerateIndex.main(new String[] { "/tmp/examples.zip", "/tmp/openejb"});
}
}
Modified: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/GenerateIndex.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/GenerateIndex.java?rev=1137053&r1=1137052&r2=1137053&view=diff
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/GenerateIndex.java (original)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/GenerateIndex.java Fri Jun 17 22:23:25 2011
@@ -23,7 +23,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
-import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -33,12 +32,17 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Properties;
import java.util.Set;
+import java.util.TreeMap;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
+import static org.apache.openejb.tools.examples.ListBuilder.newList;
+import static org.apache.openejb.tools.examples.MapBuilder.newMap;
+
/**
* Most the examples do not have any documentation.
* <p/>
@@ -65,33 +69,37 @@ import org.apache.log4j.Logger;
*/
public class GenerateIndex {
private static final Logger LOGGER = Logger.getLogger(GenerateIndex.class);
+
private static final int BUFFER_SIZE = 1024;
+
private static final String EXTRACTED_EXAMPLES = "extracted";
private static final String GENERATED_EXAMPLES = "generated";
- private static final String README_MD = "README.md";
- private static final String POM_XML = "pom.xml";
private static final String INDEX_HTML = "index.html";
private static final String GLOSSARY_HTML = "glossary.html";
- private static final String HEAD = getTemplate("head.frag.html");
- private static final String FOOT = getTemplate("foot.frag.html");
- private static final String HEAD_MAIN = getTemplate("main-head.frag.html");
- private static final String FOOT_MAIN = getTemplate("main-foot.frag.html");
- private static final String TITLE = "TITLE";
- private static final String JAVAX_PREFIX = "javax.";
- private static final String IMPORT_START = "import ";
- private static final MarkdownProcessor PROCESSOR = new MarkdownProcessor();
+ private static final String README_MD = "README.md";
+ private static final String POM_XML = "pom.xml";
+
private static final List<String> EXCLUDED_FOLDERS = new ArrayList<String>() {{
add("examples");
add(".svn");
+ add("target");
+ add(".git");
+ add(".settings");
}};
- // A couple possible markdown processors in Java
- // http://code.google.com/p/markdownj/wiki/Maven
- // http://code.google.com/p/doxia-module-markdown/wiki/Usage
+ private static final String JAVAX_PREFIX = "javax.";
+ private static final String IMPORT_START = "import ";
+
+ private static final MarkdownProcessor PROCESSOR = new MarkdownProcessor();
+ private static final String TEMPLATE_COMMON_PROPERTIES = "generate-index/config.properties";
+ private static final String MAIN_TEMPLATE = "index.vm";
+ private static final String DEFAULT_EXAMPLE_TEMPLATE = "example.vm";
+ private static final String EXTERNALE_TEMPLATE = "external.vm";
+ private static final String GLOSSARY_TEMPLATE = "glossary.vm";
- // Syntax highlighting can be done with this:
- // http://code.google.com/p/google-code-prettify
+ private static final String TITLE = "title";
+ private static final String BASE = "base";
/**
* Can be run in an IDE or via Maven like so:
@@ -102,17 +110,30 @@ public class GenerateIndex {
*/
public static void main(String[] args) {
if (args.length < 2) {
- LOGGER.info("Usage: <main> <examples-zip-location> <output-folder>");
+ LOGGER.info("Usage: <main> <examples-zip-location> <work-folder>");
return;
}
+ Properties properties = new Properties();
+ URL propertiesUrl = Thread.currentThread().getContextClassLoader().getResource(TEMPLATE_COMMON_PROPERTIES);
+ try {
+ properties.load(propertiesUrl.openStream());
+ } catch (IOException e) {
+ LOGGER.error("can't read common properties, please put a " + TEMPLATE_COMMON_PROPERTIES + " file");
+ }
+
+ // will be used everywhere so keep it here
+ String base = properties.getProperty(BASE);
+
+ // working folder
File extractedDir = new File(args[1], EXTRACTED_EXAMPLES);
File generatedDir = new File(args[1], GENERATED_EXAMPLES);
// crack open the examples zip file
extract(args[0], extractedDir.getPath());
- Map<String, Set<String>> exampleLinksByKeyword = new HashMap<String, Set<String>>();
+ Map<String, Set<String>> exampleLinksByKeyword = new TreeMap<String, Set<String>>();
+ Map<String, String> nameByLink = new TreeMap<String, String>();
Collection<File> examples = listFolders(extractedDir, POM_XML);
List<File> generatedIndexHtml = new ArrayList<File>();
for (File example : examples) {
@@ -126,154 +147,116 @@ public class GenerateIndex {
// use the README.md markdown file to generate an index.html page
try {
html = PROCESSOR.markdown(FileUtils.readFileToString(readme));
-
- // if readme keeps small it will be ok
- html = html.replace("<code>", "<code class=\"prettyprint\">");
- html = new StringBuilder(HEAD.replace(TITLE, example.getName() + " example"))
- .append(html).append(FOOT).toString();
} catch (IOException e) {
LOGGER.warn("can't read readme file for example " + example.getName());
}
}
File index = new File(generated, INDEX_HTML);
+ generatedIndexHtml.add(index);
+ nameByLink.put(getLink(generatedDir, index), example.getName());
List<File> javaFiles = listFilesEndingWith(example, ".java");
- Collections.sort(javaFiles);
- Map<String, Integer> apiCount = new HashMap<String, Integer>();
- for (File file : javaFiles) {
- try {
- Set<String> imports = getImports(file);
- if (imports != null) {
- for (String name : imports) {
- if (name.startsWith(JAVAX_PREFIX)) {
- if (!exampleLinksByKeyword.containsKey(name)) {
- exampleLinksByKeyword.put(name, new HashSet<String>());
- }
- exampleLinksByKeyword.get(name).add(getLink(generatedDir, index));
- }
- if (!apiCount.containsKey(name)) {
- apiCount.put(name, 1);
- } else {
- apiCount.put(name, apiCount.get(name) + 1);
- }
- }
- }
- } catch (IOException e) {
- LOGGER.error("can't read " + file.getPath());
- }
- }
+ Map<String, Integer> apiCount = getAndUpdateApis(javaFiles, exampleLinksByKeyword, generatedDir, index);
if (html.isEmpty()) {
- // If there is no README.md we should just generate a basic page
- // maybe something that includes the FooTest.java code and shows
- // shows that with links to other classes in the example
LOGGER.warn("no " + README_MD + " for example " + example.getName() + " [" + example.getPath() + "]");
- html = new StringBuilder(HEAD.replace(TITLE, example.getName() + " example"))
- .append(getDefaultExampleContent(example.getName(), extractedDir, javaFiles, apiCount)).append(FOOT).toString();
- }
-
- try {
- FileUtils.writeStringToFile(index, html);
- generatedIndexHtml.add(index);
- } catch (IOException e) {
- LOGGER.error("can't write index file for example " + example.getName());
+ tpl(DEFAULT_EXAMPLE_TEMPLATE,
+ newMap()
+ .add(TITLE, example.getName() + " example")
+ .add(BASE, base)
+ .add("apis", apiCount)
+ .add("files", removePrefix(extractedDir, javaFiles))
+ .map(),
+ index.getPath());
+ } else {
+ tpl(EXTERNALE_TEMPLATE,
+ newMap()
+ .add(TITLE, example.getName() + " example")
+ .add(BASE, base)
+ .add("content", html)
+ .map(),
+ index.getPath());
}
}
- // create a glossary page
- StringBuilder glossaryContent = new StringBuilder(HEAD.replace(TITLE, "OpenEJB Example Glossary"));
- glossaryContent.append(getGlossaryContent(exampleLinksByKeyword));
- glossaryContent.append(FOOT);
- File glossary;
- try {
- glossary = new File(generatedDir, GLOSSARY_HTML);
- FileUtils.writeStringToFile(glossary, glossaryContent.toString());
- } catch (IOException e) {
- LOGGER.error("can't write glossary file");
- }
+ Map<String, String> exampleLinks = getExampleLinks(generatedIndexHtml, generatedDir);
+ // create a glossary page
+ tpl(GLOSSARY_TEMPLATE,
+ newMap()
+ .add(TITLE, "OpenEJB Example Glossary")
+ .add(BASE, base)
+ .add("javascripts", newList().add("glossary.js").list())
+ .add("links", nameByLink)
+ .add("classes", getClassesByApi(exampleLinksByKeyword))
+ .add("exampleByKeyword", exampleLinksByKeyword)
+ .add("examples", exampleLinks)
+ .add("aggregateClasses", getAggregateClasses(new ArrayList<String>(exampleLinks.keySet()), exampleLinksByKeyword))
+ .map(),
+ new File(generatedDir, GLOSSARY_HTML).getPath());
// create an index for all example directories
- StringBuilder mainIndex = new StringBuilder(HEAD.replace(TITLE, "OpenEJB Example"));
- mainIndex.append(HEAD_MAIN);
- mainIndex.append(getMainContent(generatedIndexHtml, generatedDir));
- mainIndex.append(FOOT_MAIN).append(FOOT);
- try {
- FileUtils.writeStringToFile(new File(generatedDir, INDEX_HTML), mainIndex.toString());
- } catch (IOException e) {
- LOGGER.error("can't write main index file.");
+ tpl(MAIN_TEMPLATE,
+ newMap()
+ .add(TITLE, "OpenEJB Example")
+ .add(BASE, base)
+ .add("examples", exampleLinks)
+ .map(),
+ new File(generatedDir, INDEX_HTML).getPath());
+ }
+
+ private static Map<String, String> getAggregateClasses(List<String> links, Map<String, Set<String>> exampleLinksByKeyword) {
+ Map<String, String> classes = new HashMap<String, String>();
+ for (String link: links) {
+ classes.put(link, getHTMLClass(exampleLinksByKeyword, link));
}
+ return classes;
}
- private static String getGlossaryContent(Map<String, Set<String>> exampleLinksByKeyword) {
- StringBuilder glossaryContent = new StringBuilder("<h2>Glossary</h2>\n");
+ private static Map<String, String> getClassesByApi(Map<String, Set<String>> exampleLinksByKeyword) {
+ Map<String, String> classes = new HashMap<String, String>();
+ for (String api : exampleLinksByKeyword.keySet()) {
+ classes.put(api, api.replace(".", "-"));
+ }
+ return classes;
+ }
- glossaryContent.append(getTemplate("js.glossary.frag.html"));
+ private static List<String> removePrefix(File path, List<File> files) {
+ List<String> processed = new ArrayList<String>();
+ for (File file : files) {
+ processed.add(getLink(path, file));
+ }
+ return processed;
+ }
- // checkboxes
- glossaryContent.append("<div id=\"checkboxes\">\n")
- .append("<div id=\"checkboxes-button\"><ul>\n")
- .append("<li><input type=\"button\" value=\"Aggregate\"")
- .append(" onclick=\"javascript:aggregate(this)\" ></li>")
- .append("<li><input type=\"button\" value=\"Hide APIs\" id=\"showCheckboxes\"")
- .append(" onclick=\"javascript:showCheckboxes()\" ></li>")
- .append("<li><input type=\"button\" value=\"Select All\"")
- .append(" onclick=\"javascript:selectCheckboxes(true)\" ></li>")
- .append("<li><input type=\"button\" value=\"Select None\"")
- .append(" onclick=\"javascript:selectCheckboxes(false)\" ></li>")
- .append("</div></ul>\n")
- .append("<div class=\"clear\" />\n")
- .append("<div id=\"checkboxes-check\"><ul>\n");
-
- List<String> apis = new ArrayList<String>(exampleLinksByKeyword.keySet());
- Collections.sort(apis);
- for (String api : apis) {
- glossaryContent.append("<li>")
- .append("<input type=\"checkbox\" id=\"").append(api.replace('.', '-')) // . means class in css
- .append("\" checked=\"true\" onclick=\"javascript:checkBoxClicked(this.id, this.checked)\" >")
- .append(api)
- .append("</li>\n");
- }
- glossaryContent.append("</ul></div>\n</div>\n");
-
- StringBuilder aggregated = new StringBuilder("<div id=\"aggregate\">\n<ul>");
- glossaryContent.append("<div id=\"list\">\n<ul>\n");
-
- Map<String, String> linkByExample = new HashMap<String, String>();
-
- for (String api : apis) {
- glossaryContent.append("<li class=\"").append(api.replace('.', '-')).append("\">")
- .append(api).append("\n<ul>\n");
- List<String> sortedExamples = new ArrayList<String>(exampleLinksByKeyword.get(api));
- Collections.sort(sortedExamples);
- for (String link : sortedExamples) {
- String name = link;
- int idx = name.lastIndexOf('/');
- int idxBefore = name.lastIndexOf('/', idx - 1);
- if (idx >= 0 && idxBefore >= 0) {
- name = name.substring(idxBefore + 1, idx);
- }
- if (!linkByExample.containsKey(name)) {
- linkByExample.put(link, name);
+ private static Map<String, Integer> getAndUpdateApis(List<File> javaFiles, Map<String, Set<String>> exampleLinksByKeyword, File generatedDir, File index) {
+ Map<String, Integer> apiCount = new TreeMap<String, Integer>();
+ Collections.sort(javaFiles);
+ for (File file : javaFiles) {
+ try {
+ Set<String> imports = getImports(file);
+ if (imports != null) {
+ for (String name : imports) {
+ if (name.startsWith(JAVAX_PREFIX)) {
+ if (!exampleLinksByKeyword.containsKey(name)) {
+ exampleLinksByKeyword.put(name, new HashSet<String>());
+ }
+ exampleLinksByKeyword.get(name).add(getLink(generatedDir, index));
+ }
+ if (!apiCount.containsKey(name)) {
+ apiCount.put(name, 1);
+ } else {
+ apiCount.put(name, apiCount.get(name) + 1);
+ }
+ }
}
- glossaryContent.append("<li><a href=\"").append(link).append("\">").append(name).append("</a></li>");
+ } catch (IOException e) {
+ LOGGER.error("can't read " + file.getPath());
}
- glossaryContent.append("</ul>");
- }
- glossaryContent.append("</ul></li></div>\n");
-
- List<String> links = new ArrayList<String>(linkByExample.keySet());
- Collections.sort(links);
- for (String link : links) {
- String exampleLink = linkByExample.get(link);
- aggregated.append("<li class=\"").append(getHTMLClass(exampleLinksByKeyword, link)).append("\">")
- .append("<a href=\"").append(link).append("\">").append(exampleLink).append("</a>")
- .append("</li>\n");
}
- aggregated.append("</ul></div>\n");
- return glossaryContent.append(aggregated).toString();
+ return apiCount;
}
private static String getHTMLClass(Map<String, Set<String>> exampleLinksByKeyword, String value) {
@@ -289,45 +272,16 @@ public class GenerateIndex {
return clazz.toString();
}
- private static String getMainContent(List<File> generatedIndexHtml, File generatedDir) {
+ private static Map<String, String> getExampleLinks(List<File> generatedIndexHtml, File generatedDir) {
// list of all examples
- StringBuilder mainIndex = new StringBuilder("<div id=\"examples\"><ul><li><a href=\"")
- .append(GLOSSARY_HTML).append("\">").append("Glossary").append("</a></li></ul>");
- mainIndex.append(" <ul>\n");
+ Map<String, String> links = new TreeMap<String, String>();
Collections.sort(generatedIndexHtml);
for (File example : generatedIndexHtml) {
String link = getLink(generatedDir, example);
String exampleName = example.getParentFile().getName();
- mainIndex.append(" <li class=\"").append(exampleName).append("\">\n")
- .append(" <a href=\"").append(link)
- .append("\">").append(exampleName).append("</a>\n")
- .append(" </li>\n");
- }
- mainIndex.append(" </ul>\n</div>\n");
-
- return mainIndex.toString();
- }
-
- private static String getDefaultExampleContent(String name, File prefix, List<File> javaFiles, Map<String, Integer> apiCount) {
- StringBuilder builder = new StringBuilder("<h2>").append(name).append("</h2>\n")
- .append("<div id=\"javaFiles\">\n")
- .append("<ul>Files:\n");
- for (File f : javaFiles) {
- String path = f.getPath().replace(prefix.getPath(), "");
- if (path.startsWith("/")) {
- path = path.substring(1);
- }
- builder.append("<li>").append(path).append("</li>\n");
- }
- builder.append("</ul>\n").append("</div>\n");
-
- builder.append("<div id=\"api\">\n").append("<ul>API used:\n");
- for (Map.Entry<String, Integer> api : apiCount.entrySet()) {
- builder.append("<li>").append(api.getKey()).append(": ").append(api.getValue()).append(" times</li>\n");
+ links.put(link, exampleName);
}
- builder.append("</ul>\n").append("</div>\n");
-
- return builder.toString();
+ return links;
}
private static Set<String> getImports(File file) throws IOException {
@@ -346,7 +300,7 @@ public class GenerateIndex {
private static String getLink(File generatedDir, File example) {
return example.getPath().replace(generatedDir.getPath(), "")
- .replace(File.separator, "/").replaceFirst("/", "");
+ .replace(File.separator, "/").replaceFirst("/", "");
}
private static Collection<File> listFolders(File extractedDir, String name) {
@@ -390,7 +344,7 @@ public class GenerateIndex {
File file = new File(output + File.separator + entry.getName());
FileOutputStream fos = new FileOutputStream(file);
while ((count = zip.read(buf, 0, BUFFER_SIZE)) != -1) {
- fos.write(buf, 0, count);
+ fos.write(buf, 0, count);
}
fos.flush();
fos.close();
@@ -410,16 +364,8 @@ public class GenerateIndex {
}
}
- private static String getTemplate(String file) {
- URL url = Thread.currentThread().getContextClassLoader().getResource("generate-index/" + file);
- try {
- File f = new File(url.toURI());
- return FileUtils.readFileToString(f);
- } catch (URISyntaxException e) {
- LOGGER.error("can't get template " + file);
- } catch (IOException e) {
- LOGGER.error("can't read template " + file);
- }
- return "";
+ // just a shortcut
+ private static void tpl(String template, Map<String, Object> mapContext, String path) {
+ OpenEJBTemplate.get().apply(template, mapContext, path);
}
}
Added: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/ListBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/ListBuilder.java?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/ListBuilder.java (added)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/ListBuilder.java Fri Jun 17 22:23:25 2011
@@ -0,0 +1,30 @@
+package org.apache.openejb.tools.examples;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public final class ListBuilder {
+ private List<Object> internal = new ArrayList<Object>();
+
+ private ListBuilder() {
+ // no-op
+ }
+
+ public static ListBuilder newList() {
+ return new ListBuilder();
+ }
+
+ public ListBuilder add(Object value) {
+ internal.add(value);
+ return this;
+ }
+
+ public List<Object> list() {
+ return internal;
+ }
+}
Added: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/MapBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/MapBuilder.java?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/MapBuilder.java (added)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/MapBuilder.java Fri Jun 17 22:23:25 2011
@@ -0,0 +1,28 @@
+package org.apache.openejb.tools.examples;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public final class MapBuilder {
+ private Map<String, Object> internal = new HashMap<String, Object>();
+
+ private MapBuilder() {
+ // no-op
+ }
+
+ public static MapBuilder newMap() {
+ return new MapBuilder();
+ }
+
+ public MapBuilder add(String key, Object value) {
+ internal.put(key, value);
+ return this;
+ }
+
+ public Map<String, Object> map() {
+ return internal;
+ }
+}
Added: openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/OpenEJBTemplate.java
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/OpenEJBTemplate.java?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/OpenEJBTemplate.java (added)
+++ openejb/trunk/sandbox/tools/src/main/java/org/apache/openejb/tools/examples/OpenEJBTemplate.java Fri Jun 17 22:23:25 2011
@@ -0,0 +1,101 @@
+package org.apache.openejb.tools.examples;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Writer;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.log4j.Logger;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.log.CommonsLogLogChute;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public final class OpenEJBTemplate {
+ private static final Logger LOGGER = Logger.getLogger(OpenEJBTemplate.class);
+
+ private static final OpenEJBTemplate INSTANCE = new OpenEJBTemplate();
+ private static final String LOG_TAG = OpenEJBTemplate.class.getName();
+ private static final String PREFIX = "generate-index/velocity/";
+
+ private VelocityEngine engine;
+ private Map<String, URL> resources = new HashMap<String, URL>();
+
+ private OpenEJBTemplate() {
+ // no-op
+ }
+
+ public synchronized void init() {
+ if (engine != null) {
+ return;
+ }
+
+ engine = new VelocityEngine();
+
+ Properties properties = new Properties();
+ properties.setProperty("file.resource.loader.cache", "true");
+ properties.setProperty("resource.loader", "file, class");
+ properties.setProperty("class.resource.loader.description", "Velocity Classpath Resource Loader");
+ properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+ properties.setProperty("runtime.log.logsystem.class", CommonsLogLogChute.class.getName());
+ properties.setProperty("runtime.log.logsystem.commons.logging.name", LOG_TAG);
+ engine.init(properties);
+ }
+
+ private void evaluate(String template, Map<String, Object> mapContext, Writer writer) throws IOException {
+ if (engine == null) {
+ init();
+ }
+
+ if (!resources.containsKey(template)) {
+ URL resource = Thread.currentThread().getContextClassLoader().getResource(PREFIX + template);
+ resources.put(template, resource);
+ }
+
+ URL url = resources.get(template);
+ if (url == null) {
+ LOGGER.error("can't find template " + template);
+ return;
+ }
+
+ VelocityContext context = new VelocityContext(mapContext);
+ engine.evaluate(context, writer, LOG_TAG, new InputStreamReader(url.openStream()));
+ }
+
+ /**
+ * generate a file from a velocity template.
+ *
+ * In error case (template not found...), only log with error level will be done (no exception).
+ *
+ * @param template the template path in PREFIX resource folder
+ * @param mapContext the parameters of the template
+ * @param path the output path
+ */
+ public void apply(String template, Map<String, Object> mapContext, String path) {
+ FileWriter writer = null;
+ try {
+ writer = new FileWriter(path);
+ evaluate(template, mapContext, writer);
+ } catch (IOException ioe) {
+ LOGGER.error("can't apply template " + template, ioe);
+ } finally {
+ if (writer != null) {
+ try {
+ writer.flush();
+ writer.close();
+ } catch (IOException e) {
+ LOGGER.error("can't flush file " + path, e);
+ }
+ }
+ }
+ }
+
+ public static OpenEJBTemplate get() {
+ return INSTANCE;
+ }
+}
Added: openejb/trunk/sandbox/tools/src/main/resources/generate-index/config.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/resources/generate-index/config.properties?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/resources/generate-index/config.properties (added)
+++ openejb/trunk/sandbox/tools/src/main/resources/generate-index/config.properties Fri Jun 17 22:23:25 2011
@@ -0,0 +1,2 @@
+# should be a public_html in reality but for testing purpose it is ok
+base=/home/rmannibucau/Development/openejb/tools/src/main/resources/generate-index
Added: openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/openejb-examples.css
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/openejb-examples.css?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/openejb-examples.css (added)
+++ openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/openejb-examples.css Fri Jun 17 22:23:25 2011
@@ -0,0 +1,67 @@
+body {
+ overflow: hidden;
+ margin-bottom: 1em;
+}
+
+#content {
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+}
+
+#list, #aggregate {
+ width: 600px;
+ float: left;
+}
+
+.clear {
+ clear: both;
+}
+
+#checkboxes-check {
+ margin-right: 0;
+ float: right;
+ width: 400px;
+}
+
+#checkboxes ul {
+ list-style-type:none;
+}
+
+#checkboxes-button ul li {
+ float:left;
+}
+
+#floatingbar {
+ overflow: hidden;
+ width: 80%;
+ margin-right: 10%;
+ margin-left: 10%;
+ height: 1.1em;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ font-family: Arial;
+ font-weight: bold;
+ background-color: #5A5CB8;
+}
+
+#floatingbar ul {
+ list-style-type:none;
+}
+#floatingbar ul li {
+ float:left;
+ color:#666;
+ margin-top: -1.1em;
+}
+#floatingbar ul li a {
+ text-decoration:none;
+ color:#000;
+ padding-left: 10px;
+ font-size:12px;
+ font-weight:normal;
+ font-family:Arial;
+}
+#floatingbar ul li a:hover {
+ color:#000033;
+}
Added: openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/prettify.css
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/prettify.css?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/prettify.css (added)
+++ openejb/trunk/sandbox/tools/src/main/resources/generate-index/css/prettify.css Fri Jun 17 22:23:25 2011
@@ -0,0 +1,52 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+/* SPAN elements with the classes below are added by prettyprint. */
+.pln { color: #000 } /* plain text */
+
+@media screen {
+ .str { color: #080 } /* string content */
+ .kwd { color: #008 } /* a keyword */
+ .com { color: #800 } /* a comment */
+ .typ { color: #606 } /* a type name */
+ .lit { color: #066 } /* a literal value */
+ /* punctuation, lisp open bracket, lisp close bracket */
+ .pun, .opn, .clo { color: #660 }
+ .tag { color: #008 } /* a markup tag name */
+ .atn { color: #606 } /* a markup attribute name */
+ .atv { color: #080 } /* a markup attribute value */
+ .dec, .var { color: #606 } /* a declaration; a variable name */
+ .fun { color: red } /* a function name */
+}
+
+/* Use higher contrast and text-weight for printable form. */
+@media print, projection {
+ .str { color: #060 }
+ .kwd { color: #006; font-weight: bold }
+ .com { color: #600; font-style: italic }
+ .typ { color: #404; font-weight: bold }
+ .lit { color: #044 }
+ .pun, .opn, .clo { color: #440 }
+ .tag { color: #006; font-weight: bold }
+ .atn { color: #404 }
+ .atv { color: #060 }
+}
+
+/* Put a border around prettyprinted code snippets. */
+pre.prettyprint { padding: 2px; border: 1px solid #888 }
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
+li.L0,
+li.L1,
+li.L2,
+li.L3,
+li.L5,
+li.L6,
+li.L7,
+li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,
+li.L3,
+li.L5,
+li.L7,
+li.L9 { background: #eee }
Added: openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/glossary.js
URL: http://svn.apache.org/viewvc/openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/glossary.js?rev=1137053&view=auto
==============================================================================
--- openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/glossary.js (added)
+++ openejb/trunk/sandbox/tools/src/main/resources/generate-index/javascript/glossary.js Fri Jun 17 22:23:25 2011
@@ -0,0 +1,50 @@
+$(document).ready(function() {
+ $('#aggregate').hide();
+});
+
+function checkBoxClicked(id, b) {
+ $('.' + id).each(function(i, val) {
+ if (b) {
+ $(val).show('slow');
+ } else {
+ $(val).hide();
+ }
+ $(val).attr('checked', b);
+ });
+}
+
+function selectCheckboxes(b) {
+ $('input[type=checkbox]').each(function(i, val) {
+ checkBoxClicked($(val).attr('id'), b);
+ $(val).attr('checked', b);
+ });
+}
+
+function showCheckboxes() {
+ if ($('#checkboxes-check').is(':visible')) {
+ $('#checkboxes-check').hide();
+ $('#showCheckboxes').attr('value', 'Show API');
+ } else {
+ $('#checkboxes-check').show();
+ $('#showCheckboxes').attr('value', 'Hide API');
+ }
+}
+
+function aggregate(button) {
+ if (button.value == 'Aggregate') {
+ button.value = 'Split';
+ $('#list').hide();
+ $('#aggregate').show('slow');
+ } else {
+ button.value = 'Aggregate';
+ $('#list').show('slow');
+ $('#aggregate').hide();
+ }
+ // order to show selected whic are in non slected too
+ $('input[type=checkbox,checked=false]').each(function(i, val) {
+ checkBoxClicked($(val).attr('id'), false);
+ });
+ $('input[type=checkbox,checked=true]').each(function(i, val) {
+ checkBoxClicked($(val).attr('id'), true);
+ });
+}