Author: aadamchik
Date: Mon Dec 25 02:37:18 2006
New Revision: 490125
URL: http://svn.apache.org/viewvc?view=rev&rev=490125
Log:
removing dependency on cayenne core classes
Modified:
incubator/cayenne/main/trunk/other/build-maven-plugin/pom.xml
incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/confluence/DocPageRenderer.java
Modified: incubator/cayenne/main/trunk/other/build-maven-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/other/build-maven-plugin/pom.xml?view=diff&rev=490125&r1=490124&r2=490125
==============================================================================
--- incubator/cayenne/main/trunk/other/build-maven-plugin/pom.xml (original)
+++ incubator/cayenne/main/trunk/other/build-maven-plugin/pom.xml Mon Dec 25
02:37:18 2006
@@ -51,10 +51,5 @@
<artifactId>velocity</artifactId>
<version>1.4</version>
</dependency>
- <dependency>
- <groupId>org.apache.cayenne.core</groupId>
- <artifactId>cayenne-jdk1.4</artifactId>
- <version>${version}</version>
- </dependency>
</dependencies>
</project>
Modified:
incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/confluence/DocPageRenderer.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/confluence/DocPageRenderer.java?view=diff&rev=490125&r1=490124&r2=490125
==============================================================================
---
incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/confluence/DocPageRenderer.java
(original)
+++
incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/confluence/DocPageRenderer.java
Mon Dec 25 02:37:18 2006
@@ -27,8 +27,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.gen.ClassGeneratorResourceLoader;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
@@ -37,209 +35,220 @@
import
org.objectstyle.confluence.rpc.soap_axis.confluenceservice_v1.ConfluenceSoapService;
/**
- * Extracts embedded links from Confluence documentation and converts them to
- * local fs references
+ * Extracts embedded links from Confluence documentation and converts them to
local fs
+ * references
*
* @author Cris Daniluk
*/
public class DocPageRenderer {
- private static final String URL_PREFIX = "/confluence";
+ private static final String URL_PREFIX = "/confluence";
- /**
- * Only attachments within the page are supported right now. This could
- * easily be adjusted to find attachments in external documents if
- * necessary.
- */
- private static final Pattern attachmentPattern = Pattern
- .compile("(href|src)=\"" + URL_PREFIX
- +
"/download/attachments/(.*?)/(.*?)\"");
-
- /**
- * When browsing the local filesystem, browsers like %20 (hex encoded)
- * instead of + (legacy HTTP 0.9) for spaces.
- */
- private static final Pattern spaceEncoderPattern = Pattern
- .compile("href=\"(?!http://).*?\\+.*?\"");
-
- /**
- * Not all images are supported - only the ones referenced by current
docs.
- */
- private static final Pattern confluenceImagePattern = Pattern
- .compile("src=\"" + URL_PREFIX +
"/images/icons/(.*?)\"");
-
- /**
- * Take any confluence links to non-doc content and add the url
- */
- private Pattern confluenceLinkPattern = Pattern.compile("href=\"("
- + URL_PREFIX + "/display/.*?)\"");
-
- private Pattern embeddedLinkPattern;
-
- private ConfluenceSoapService service;
-
- private String token;
-
- private String spaceKey;
-
- private String baseUrl;
-
- private VelocityContext velCtxt;
-
- private Template pageTemplate;
-
- public DocPageRenderer(ConfluenceSoapService service, String baseUrl,
- String token, String spaceKey, String template) throws
Exception {
-
- // Note that these regexps have a fairly narrow capture - since
the HTML
- // is
- // machine-generated,
- // we're kind of assuming it is well-formed
- embeddedLinkPattern = Pattern.compile("href=\"" + URL_PREFIX
- + "/display/" + spaceKey + "/(.*?)\"");
-
- this.service = service;
- this.baseUrl = baseUrl;
- this.token = token;
- this.spaceKey = spaceKey;
-
- velCtxt = new VelocityContext();
-
- initializeClassTemplate(template);
- }
-
- private void initializeClassTemplate(String template) throws Exception {
- VelocityEngine velocityEngine = new VelocityEngine();
- try {
-
- // use ClasspathResourceLoader for velocity templates
lookup
- // if Cayenne URL is not null, load resource from this
URL
- Properties props = new Properties();
-
- // null logger that will prevent velocity.log from
being generated
- props.put(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
- NullLogSystem.class.getName());
-
- props.put("resource.loader", "cayenne");
-
- props.put("cayenne.resource.loader.class",
-
ClassGeneratorResourceLoader.class.getName());
-
- velocityEngine.init(props);
- } catch (Exception ex) {
- throw new CayenneRuntimeException("Can't initialize
Velocity", ex);
- }
-
- pageTemplate = velocityEngine.getTemplate(template);
- }
-
- public void render(DocPage page, Writer out) throws Exception {
-
- // Add the TOC, unless this is the top-level page
- StringBuffer toc = new StringBuffer();
- if (page.getParentRef() != null) {
- toc.append("<div id=\"cayenne_toc\">\n");
-
- DocPage root = page.getRoot();
-
- iterateChildren(toc, page, root);
- toc.append("</div>\n");
- }
-
- // Figure out the level of nesting for relative links
- String basePath = "";
- for (int i = 1; i <= page.getDepth(); i++) {
- basePath += "../";
- }
-
- String renderedContent = null;
- try {
- renderedContent = service.renderContent(token,
spaceKey, page
- .getId(), page.getRawContent(), new
HashMap(Collections
- .singletonMap("style", "clean")));
- } catch (Throwable t) {
- // could have hit a DOS prevention bit so
- // sleep for 250ms and try again
- Thread.sleep(250);
- renderedContent = service.renderContent(token,
spaceKey, page
- .getId(), page.getRawContent(), new
HashMap(Collections
- .singletonMap("style", "clean")));
- }
- // Replace cross-doc links
- Matcher linkMatcher =
embeddedLinkPattern.matcher(renderedContent);
- StringBuffer replacementBuffer = new StringBuffer();
- while (linkMatcher.find()) {
- DocPage destPage =
DocPage.getPageByTitle(linkMatcher.group(1)
- .replace('+', ' '));
-
- // If we don't understand the link, just leave it alone
to be safe
- if (destPage == null) {
- continue;
- }
- linkMatcher.appendReplacement(replacementBuffer,
"href=\""
- + basePath + destPage.getLinkPath() +
"/index.html\"");
- }
- linkMatcher.appendTail(replacementBuffer);
-
- renderedContent = replacementBuffer.toString();
-
- // renderedContent =
- //
embeddedLinkPattern.matcher(renderedContent).replaceAll("href=\"$1/index.html\"");
-
- // Replace attachment links
- renderedContent = attachmentPattern.matcher(renderedContent)
- .replaceAll("$1=\"$3\"");
-
- // Convert confluence images to relative links
- renderedContent =
confluenceImagePattern.matcher(renderedContent)
- .replaceAll("src=\"" + basePath +
"images/$1\"");
-
- // Replace wiki links
- renderedContent = confluenceLinkPattern.matcher(renderedContent)
- .replaceAll("href=\"" + baseUrl + "$1\"");
-
- // Convert local links with + to %20 to make browsers happy
(wtf?)
- Matcher matcher = spaceEncoderPattern.matcher(renderedContent);
-
- replacementBuffer = new StringBuffer();
- while (matcher.find()) {
- matcher.appendReplacement(replacementBuffer,
matcher.group(0)
- .replace("+", "%20"));
- }
- matcher.appendTail(replacementBuffer);
-
- renderedContent = replacementBuffer.toString();
-
- velCtxt.put("page", page);
- velCtxt.put("basePath", basePath);
- velCtxt.put("pageContent", toc.toString() + renderedContent);
-
- pageTemplate.merge(velCtxt, out);
-
- }
-
- private void iterateChildren(StringBuffer toc, DocPage currentPage,
- DocPage basePage) {
- toc.append("<ul>\n");
- for (Iterator baseIter = basePage.getChildren().iterator();
baseIter
- .hasNext();) {
-
- DocPage child = (DocPage) baseIter.next();
-
- toc.append("<li>").append("<a href=\"");
- for (int i = 1; i <= currentPage.getDepth(); i++) {
- toc.append("../");
- }
-
toc.append(child.getLinkPath()).append("/index.html\">");
- toc.append(child.getTitle()).append("</a>");
- if (child.hasDescendent(currentPage)) {
- // render children
- iterateChildren(toc, currentPage, child);
- }
+ /**
+ * Only attachments within the page are supported right now. This could
easily be
+ * adjusted to find attachments in external documents if necessary.
+ */
+ private static final Pattern attachmentPattern =
Pattern.compile("(href|src)=\""
+ + URL_PREFIX
+ + "/download/attachments/(.*?)/(.*?)\"");
+
+ /**
+ * When browsing the local filesystem, browsers like %20 (hex encoded)
instead of +
+ * (legacy HTTP 0.9) for spaces.
+ */
+ private static final Pattern spaceEncoderPattern = Pattern
+ .compile("href=\"(?!http://).*?\\+.*?\"");
+
+ /**
+ * Not all images are supported - only the ones referenced by current docs.
+ */
+ private static final Pattern confluenceImagePattern =
Pattern.compile("src=\""
+ + URL_PREFIX
+ + "/images/icons/(.*?)\"");
+
+ /**
+ * Take any confluence links to non-doc content and add the url
+ */
+ private Pattern confluenceLinkPattern = Pattern.compile("href=\"("
+ + URL_PREFIX
+ + "/display/.*?)\"");
+
+ private Pattern embeddedLinkPattern;
+
+ private ConfluenceSoapService service;
+
+ private String token;
+
+ private String spaceKey;
+
+ private String baseUrl;
+
+ private VelocityContext velCtxt;
+
+ private Template pageTemplate;
+
+ public DocPageRenderer(ConfluenceSoapService service, String baseUrl,
String token,
+ String spaceKey, String template) throws Exception {
+
+ // Note that these regexps have a fairly narrow capture - since the
HTML
+ // is
+ // machine-generated,
+ // we're kind of assuming it is well-formed
+ embeddedLinkPattern = Pattern.compile("href=\""
+ + URL_PREFIX
+ + "/display/"
+ + spaceKey
+ + "/(.*?)\"");
+
+ this.service = service;
+ this.baseUrl = baseUrl;
+ this.token = token;
+ this.spaceKey = spaceKey;
+
+ velCtxt = new VelocityContext();
+
+ initializeClassTemplate(template);
+ }
+
+ private void initializeClassTemplate(String template) throws Exception {
+ VelocityEngine velocityEngine = new VelocityEngine();
+ try {
+
+ // use ClasspathResourceLoader for velocity templates lookup
+ // if Cayenne URL is not null, load resource from this URL
+ Properties props = new Properties();
+
+ // null logger that will prevent velocity.log from being generated
+ props.put(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
NullLogSystem.class
+ .getName());
+
+ props.put("resource.loader", "cayenne");
+
+ props.put(
+ "cayenne.resource.loader.class",
+ "org.apache.cayenne.gen.ClassGeneratorResourceLoader");
+
+ velocityEngine.init(props);
+ }
+ catch (Exception ex) {
+ throw new RuntimeException("Can't initialize Velocity", ex);
+ }
+
+ pageTemplate = velocityEngine.getTemplate(template);
+ }
+
+ public void render(DocPage page, Writer out) throws Exception {
+
+ // Add the TOC, unless this is the top-level page
+ StringBuffer toc = new StringBuffer();
+ if (page.getParentRef() != null) {
+ toc.append("<div id=\"cayenne_toc\">\n");
+
+ DocPage root = page.getRoot();
+
+ iterateChildren(toc, page, root);
+ toc.append("</div>\n");
+ }
+
+ // Figure out the level of nesting for relative links
+ String basePath = "";
+ for (int i = 1; i <= page.getDepth(); i++) {
+ basePath += "../";
+ }
+
+ String renderedContent = null;
+ try {
+ renderedContent = service.renderContent(token, spaceKey,
page.getId(), page
+ .getRawContent(), new HashMap(Collections.singletonMap(
+ "style",
+ "clean")));
+ }
+ catch (Throwable t) {
+ // could have hit a DOS prevention bit so
+ // sleep for 250ms and try again
+ Thread.sleep(250);
+ renderedContent = service.renderContent(token, spaceKey,
page.getId(), page
+ .getRawContent(), new HashMap(Collections.singletonMap(
+ "style",
+ "clean")));
+ }
+ // Replace cross-doc links
+ Matcher linkMatcher = embeddedLinkPattern.matcher(renderedContent);
+ StringBuffer replacementBuffer = new StringBuffer();
+ while (linkMatcher.find()) {
+ DocPage destPage =
DocPage.getPageByTitle(linkMatcher.group(1).replace(
+ '+',
+ ' '));
+
+ // If we don't understand the link, just leave it alone to be safe
+ if (destPage == null) {
+ continue;
+ }
+ linkMatcher.appendReplacement(replacementBuffer, "href=\""
+ + basePath
+ + destPage.getLinkPath()
+ + "/index.html\"");
+ }
+ linkMatcher.appendTail(replacementBuffer);
+
+ renderedContent = replacementBuffer.toString();
+
+ // renderedContent =
+ //
embeddedLinkPattern.matcher(renderedContent).replaceAll("href=\"$1/index.html\"");
+
+ // Replace attachment links
+ renderedContent =
attachmentPattern.matcher(renderedContent).replaceAll(
+ "$1=\"$3\"");
+
+ // Convert confluence images to relative links
+ renderedContent =
confluenceImagePattern.matcher(renderedContent).replaceAll(
+ "src=\"" + basePath + "images/$1\"");
+
+ // Replace wiki links
+ renderedContent =
confluenceLinkPattern.matcher(renderedContent).replaceAll(
+ "href=\"" + baseUrl + "$1\"");
+
+ // Convert local links with + to %20 to make browsers happy (wtf?)
+ Matcher matcher = spaceEncoderPattern.matcher(renderedContent);
+
+ replacementBuffer = new StringBuffer();
+ while (matcher.find()) {
+ matcher.appendReplacement(replacementBuffer,
matcher.group(0).replace(
+ "+",
+ "%20"));
+ }
+ matcher.appendTail(replacementBuffer);
+
+ renderedContent = replacementBuffer.toString();
+
+ velCtxt.put("page", page);
+ velCtxt.put("basePath", basePath);
+ velCtxt.put("pageContent", toc.toString() + renderedContent);
+
+ pageTemplate.merge(velCtxt, out);
+
+ }
+
+ private void iterateChildren(StringBuffer toc, DocPage currentPage,
DocPage basePage) {
+ toc.append("<ul>\n");
+ for (Iterator baseIter = basePage.getChildren().iterator();
baseIter.hasNext();) {
+
+ DocPage child = (DocPage) baseIter.next();
+
+ toc.append("<li>").append("<a href=\"");
+ for (int i = 1; i <= currentPage.getDepth(); i++) {
+ toc.append("../");
+ }
+ toc.append(child.getLinkPath()).append("/index.html\">");
+ toc.append(child.getTitle()).append("</a>");
+ if (child.hasDescendent(currentPage)) {
+ // render children
+ iterateChildren(toc, currentPage, child);
+ }
- toc.append("</li>\n");
- }
+ toc.append("</li>\n");
+ }
- toc.append("</ul>\n");
- }
+ toc.append("</ul>\n");
+ }
}