You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/07/22 20:39:43 UTC
svn commit: r424617 - in
/incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen:
DocGenTask.java DocGenerator.java DocPageRenderer.java
Author: aadamchik
Date: Sat Jul 22 11:39:42 2006
New Revision: 424617
URL: http://svn.apache.org/viewvc?rev=424617&view=rev
Log:
support for dynamic confluence URL (note that "confluence" web app path is still hardcoded in the link parser)
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenTask.java
incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenerator.java
incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocPageRenderer.java
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenTask.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenTask.java?rev=424617&r1=424616&r2=424617&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenTask.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenTask.java Sat Jul 22 11:39:42 2006
@@ -30,6 +30,7 @@
*/
public class DocGenTask extends Task {
+ private String baseUrl;
private String spaceKey;
private String docBase;
private String startPage;
@@ -41,10 +42,19 @@
public void execute() {
log("Exporting space '" + spaceKey + "' to " + docBase);
-
+
try {
- new DocGenerator(spaceKey, docBase, startPage, username, password, template)
- .generateDocs();
+ DocGenerator generator = new DocGenerator(
+ baseUrl,
+ spaceKey,
+ docBase,
+ startPage,
+ username,
+ password,
+ template);
+
+ log("Confluence base URL '" + generator.getBaseUrl() + "'");
+ generator.generateDocs();
}
catch (Exception e) {
throw new BuildException(e);
@@ -97,5 +107,17 @@
public void setUsername(String username) {
this.username = username;
+ }
+
+ public String getBaseUrl() {
+ return baseUrl;
+ }
+
+ /**
+ * Sets a root URL of a confluence instance. SOAP service URL is derived from it
+ * internally.
+ */
+ public void setBaseUrl(String baseUrl) {
+ this.baseUrl = baseUrl;
}
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenerator.java?rev=424617&r1=424616&r2=424617&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenerator.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocGenerator.java Sat Jul 22 11:39:42 2006
@@ -39,6 +39,8 @@
public class DocGenerator {
private static final String DEFAULT_TEMPLATE = "doctemplates/default.vm";
+ private static final String ENDPOINT_SUFFIX = "/rpc/soap-axis/confluenceservice-v1";
+ private String baseUrl;
private String spaceKey;
private String docBase;
private String startPage;
@@ -53,17 +55,41 @@
private DocPageRenderer parser;
- public DocGenerator(String spaceKey, String docBase, String startPage,
- String username, String password, String template) {
+ public DocGenerator(String baseUrl, String spaceKey, String docBase,
+ String startPage, String username, String password, String template) {
+
+ ConfluenceSoapServiceProxy service = new ConfluenceSoapServiceProxy();
+
+ // derive service URL from base URL
+ if (baseUrl != null) {
+ if (baseUrl.endsWith("/")) {
+ baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
+ }
+
+ String endpoint = baseUrl + ENDPOINT_SUFFIX;
+ service.setEndpoint(endpoint);
+ }
+ // service base URL from service default URL
+ else if (service.getEndpoint().endsWith(ENDPOINT_SUFFIX)) {
+ String endpoint = service.getEndpoint();
+ baseUrl = endpoint.substring(0, endpoint.length() - ENDPOINT_SUFFIX.length());
+ }
+ else {
+ throw new IllegalArgumentException("Null base url and invalid service URL");
+ }
+
+ this.baseUrl = baseUrl;
+ this.service = service;
this.spaceKey = spaceKey;
this.docBase = docBase;
this.startPage = startPage;
this.username = username;
this.password = password;
-
+
if (template == null) {
this.template = DEFAULT_TEMPLATE;
- } else {
+ }
+ else {
this.template = template;
}
}
@@ -106,7 +132,7 @@
FileWriter fw = new FileWriter(currentPath + "/index.html");
parser.render(page, fw);
fw.close();
-
+
writeAttachments(currentPath, page);
for (Iterator childIter = page.getChildren().iterator(); childIter.hasNext();) {
@@ -144,9 +170,8 @@
}
protected void login() throws Exception {
- service = new ConfluenceSoapServiceProxy();
token = service.login(username, password);
- parser = new DocPageRenderer(service, token, spaceKey, template);
+ parser = new DocPageRenderer(service, baseUrl, token, spaceKey, template);
}
protected DocPage getPage(DocPage parentPage, String pageTitle) throws Exception {
@@ -157,6 +182,10 @@
protected void createPath(String path) {
new File(path).mkdirs();
+ }
+
+ public String getBaseUrl() {
+ return baseUrl;
}
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocPageRenderer.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocPageRenderer.java?rev=424617&r1=424616&r2=424617&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocPageRenderer.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-other/src/tools/java/org/apache/cayenne/tools/ant/docgen/DocPageRenderer.java Sat Jul 22 11:39:42 2006
@@ -39,63 +39,76 @@
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 extends TestCase {
-
+
private static final String URL_PREFIX = "/confluence";
- private static final String CONFLUENCE_URL = "http://www.objectstyle.org/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/(.*?)/(.*?)\"");
-
+ 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.
+ * 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://).*?\\+.*?\"");
-
-
+ 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/(.*?)\"");
-
+ 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 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 token, String spaceKey, String template) throws Exception {
-
- // Note that these regexps have a fairly narrow capture - since the HTML is machine-generated,
+
+ 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 + "/(.*?)\"");
-
+ 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 {
@@ -112,16 +125,16 @@
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
@@ -134,73 +147,86 @@
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 += "../";
+ basePath += "../";
}
-
- String renderedContent = service.renderContent(token, spaceKey, page.getId(), page.getRawContent(), new HashMap(
- Collections.singletonMap("style", "clean")));
-
+
+ String 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('+', ' '));
-
+ 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.appendReplacement(replacementBuffer, "href=\""
+ + basePath
+ + destPage.getLinkPath()
+ + "/index.html\"");
}
linkMatcher.appendTail(replacementBuffer);
-
+
renderedContent = replacementBuffer.toString();
-
- //renderedContent = embeddedLinkPattern.matcher(renderedContent).replaceAll("href=\"$1/index.html\"");
-
+
+ // renderedContent =
+ // embeddedLinkPattern.matcher(renderedContent).replaceAll("href=\"$1/index.html\"");
+
// Replace attachment links
- renderedContent = attachmentPattern.matcher(renderedContent).replaceAll("$1=\"$3\"");
-
+ renderedContent = attachmentPattern.matcher(renderedContent).replaceAll(
+ "$1=\"$3\"");
+
// Convert confluence images to relative links
- renderedContent = confluenceImagePattern.matcher(renderedContent).replaceAll("src=\"" + basePath + "images/$1\"");
+ renderedContent = confluenceImagePattern.matcher(renderedContent).replaceAll(
+ "src=\"" + basePath + "images/$1\"");
// Replace wiki links
- renderedContent = confluenceLinkPattern.matcher(renderedContent).replaceAll("href=\"" + CONFLUENCE_URL + "$1\"");
-
+ 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.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(); ) {
-
+ 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("../");
}
toc.append(child.getLinkPath()).append("/index.html\">");
toc.append(child.getTitle()).append("</a>");
@@ -208,7 +234,7 @@
// render children
iterateChildren(toc, currentPage, child);
}
-
+
toc.append("</li>\n");
}