[ http://jira.codehaus.org/browse/MPIR-13?page=all ]
Allan Ramirez moved MNG-903 to MPIR-13:
---------------------------------------
Version: (was: 2.0-beta-1)
Fix Version: (was: 2.0-beta-3)
Component: (was: maven-project-info-reports-plugin)
Workflow: jira (was: Maven)
Key: MPIR-13 (was: MNG-903)
Project: Maven 2.x Project Info Reports Plugin (was: Maven 2)
> license report should handle html documents more gracefully
> -----------------------------------------------------------
>
> Key: MPIR-13
> URL: http://jira.codehaus.org/browse/MPIR-13
> Project: Maven 2.x Project Info Reports Plugin
> Type: Improvement
> Reporter: Matthew Pocock
> Assignee: Brett Porter
> Priority: Minor
> Attachments: license.patch
>
>
> At the moment, the license report sucks in whatever is on the end of the
> license URL and dumps it into the page. If this happens to be raw text,
> everything is fine. If it is HTML, then it escapes all the markup and you end
> up with a very ugly page.
> The attached patch checks to see if the license looks like it is HTML
> formatted. If not, the old method is used for including it inline in the
> license report page. If it is, then it extracts the body, rewrites the
> relative links and includes that HTML.
> Index: src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java
> ===================================================================
> --- src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java
> (revision 280838)
> +++ src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java
> (working copy)
> @@ -37,6 +37,8 @@
> import java.util.Locale;
> import java.util.MissingResourceException;
> import java.util.ResourceBundle;
> +import java.util.regex.Pattern;
> +import java.util.regex.Matcher;
>
> /**
> * Generates the Project License report.
> @@ -210,7 +212,7 @@
> catch ( MalformedURLException e )
> {
> throw new MissingResourceException( "The license url
> [" + url + "] seems to be invalid: "
> - + e.getMessage(), null, null );
> + +
> e.getMessage(), null, null );
> }
> }
> else
> @@ -219,7 +221,7 @@
> if ( !licenseFile.exists() )
> {
> throw new MissingResourceException( "Maven can't
> find the file " + licenseFile
> - + " on the system.", null, null );
> + + " on the
> system.", null, null );
> }
> try
> {
> @@ -228,7 +230,7 @@
> catch ( MalformedURLException e )
> {
> throw new MissingResourceException( "The license url
> [" + url + "] seems to be invalid: "
> - + e.getMessage(), null, null );
> + +
> e.getMessage(), null, null );
> }
> }
>
> @@ -256,8 +258,26 @@
> paragraph( comments );
> }
>
> - verbatimText( licenseContent );
> + String licenseContentLC = licenseContent.toLowerCase();
> + int bodyStart = licenseContentLC.indexOf("<body");
> + int bodyEnd = licenseContentLC.indexOf("</body>");
> + if( (licenseContentLC.startsWith("<!doctype html") ||
> + licenseContentLC.startsWith("<html>"))
> + && bodyStart >= 0 && bodyEnd >= 0)
> + {
> + bodyStart = licenseContentLC.indexOf(">", bodyStart) + 1;
> + String body = licenseContent.substring(bodyStart, bodyEnd);
>
> + link("[Original text]", licenseUrl.toExternalForm());
> + paragraph ( "Copy of the license follows." );
> +
> + body = replaceRelativeLinks(body,
> baseURL(licenseUrl).toExternalForm());
> + sink.rawText(body);
> + }
> + else
> + {
> + verbatimText( licenseContent );
> + }
> endSection();
> }
>
> @@ -269,4 +289,79 @@
> {
> return ResourceBundle.getBundle( "project-info-report", locale,
> LicenseReport.class.getClassLoader() );
> }
> +
> + private static URL baseURL(URL aUrl)
> + {
> + String urlTxt = aUrl.toExternalForm();
> + int lastSlash = urlTxt.lastIndexOf('/');
> + if(lastSlash > -1)
> + {
> + try
> + {
> + return new URL(urlTxt.substring(0, lastSlash + 1));
> + }
> + catch (MalformedURLException e)
> + {
> + throw new AssertionError(e);
> + }
> + }
> + else
> + {
> + return aUrl;
> + }
> + }
> +
> + private static String replaceRelativeLinks(String html, String baseURL)
> + {
> + if(!baseURL.endsWith("/"))
> + {
> + baseURL += "/";
> + }
> +
> + String serverURL = baseURL.substring(0, baseURL.indexOf('/',
> baseURL.indexOf("//") + 2));
> +
> + html = replaceParts(html, baseURL, serverURL, "[aA]",
> "[hH][rR][eE][fF]");
> + html = replaceParts(html, baseURL, serverURL, "[iI][mM][gG]",
> "[sS][rR][cC]");
> + return html;
> + }
> +
> + private static String replaceParts(String html, String baseURL, String
> serverURL, String tagPattern, String attributePattern)
> + {
> + Pattern anchor = Pattern
> + .compile("(<\\s*" + tagPattern + "\\s+[^>]*" + attributePattern
> + "\\s*=\\s*\")([^\"]*)\"([^>]*>)");
> + StringBuilder sb = new StringBuilder(html);
> +
> + int indx = 0;
> + do
> + {
> + Matcher mAnchor = anchor.matcher(sb);
> + mAnchor.region(indx, sb.length());
> + if(!mAnchor.find())
> + {
> + System.err.println("No more matches");
> + break; // no more matches
> + }
> +
> + indx = mAnchor.end(3);
> +
> + if(mAnchor.group(2).startsWith("#"))
> + {
> + // relative link - don't want to alter this one!
> + }
> + if(mAnchor.group(2).startsWith("/"))
> + {
> + // root link
> + sb.insert(mAnchor.start(2), serverURL);
> + indx += serverURL.length();
> + }
> + else if(mAnchor.group(2).indexOf(':') < 0)
> + {
> + // relative link
> + sb.insert(mAnchor.start(2), baseURL);
> + indx += baseURL.length();
> + }
> + } while(true);
> +
> + return sb.toString();
> + }
> }
> \ No newline at end of file
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]