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");
         }