Author: rgardler
Date: Sun Nov 19 16:06:28 2006
New Revision: 476986
URL: http://svn.apache.org/viewvc?view=rev&rev=476986
Log:
Add getScheme method for looking up readers
@Refactor postpone resolving of source URI until we have the request URI
(paving the way for providing variable substitution in the locationmap)
@Refactor clarify name of getSourceURL
Modified:
forrest/trunk/whiteboard/forrest2/src/core/org/apache/forrest/core/locationMap/Location.java
Modified:
forrest/trunk/whiteboard/forrest2/src/core/org/apache/forrest/core/locationMap/Location.java
URL:
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/forrest2/src/core/org/apache/forrest/core/locationMap/Location.java?view=diff&rev=476986&r1=476985&r2=476986
==============================================================================
---
forrest/trunk/whiteboard/forrest2/src/core/org/apache/forrest/core/locationMap/Location.java
(original)
+++
forrest/trunk/whiteboard/forrest2/src/core/org/apache/forrest/core/locationMap/Location.java
Sun Nov 19 16:06:28 2006
@@ -70,24 +70,7 @@
}
}
}
- if (url.contains("classpath:")) {
- final String path = url.substring(url.lastIndexOf(':')
+ 1);
- final URL resourceURL =
this.getClass().getResource(path);
- if (resourceURL == null)
- throw new IOException("Cannot find the
resource: " + path);
- URI uri;
- if (url.indexOf("classpath:") != 0) {
- final String psudeoProtocol = url.substring(0,
url
- .indexOf("classpath:") - 1);
- final String ssp =
resourceURL.toURI().toURL().toExternalForm();
- uri = new URI(psudeoProtocol, ssp, null);
- } else {
- uri = resourceURL.toURI();
- }
- this.init(pattern, uri, isOptional);
- } else {
- this.init(pattern, new URI(url), isOptional);
- }
+ this.init(pattern, new URI(url), isOptional);
}
private void init(final String pattern, final URI uri,
@@ -118,8 +101,54 @@
this.requestPattern = pattern;
}
- public URL getSourceURL() throws MalformedURLException {
- return this.getSourceURI().toURL();
+ /**
+ * Get the source URL, that is the one to use when reading the source
+ * document. The source URL is the sourceURI modified appropriately for
the
+ * given request.
+ *
+ * @return
+ * @throws MalformedURLException
+ */
+ public URL getResolvedSourceURL() throws MalformedURLException {
+ URI uri = getSourceURI();
+ URL resourceURL;
+ final String sourcePath;
+ if (uri.getScheme().equals("classpath")) {
+ sourcePath = uri.getPath();
+ resourceURL = resolveClasspathURI(sourcePath);
+ } else {
+ String strURI = uri.getSchemeSpecificPart();
+ if (strURI.contains(":")) {
+ String subProtocol = strURI.substring(0, strURI
+ .lastIndexOf(':'));
+ sourcePath =
strURI.substring(strURI.lastIndexOf(':') + 1);
+ if (subProtocol.equals("classpath")) {
+ resourceURL =
resolveClasspathURI(sourcePath);
+ } else {
+ URI subURI;
+ try {
+ subURI = new URI(subProtocol,
sourcePath, null);
+ resourceURL = subURI.toURL();
+ } catch (URISyntaxException e) {
+ throw new MalformedURLException(
+ "Unable to work
out sub protocol URI");
+ }
+ }
+ } else {
+ resourceURL = uri.toURL();
+ }
+ }
+ return resourceURL;
+ }
+
+ private URL resolveClasspathURI(final String sourcePath)
+ throws MalformedURLException {
+ URL resourceURL;
+ resourceURL = this.getClass().getResource(sourcePath);
+ if (resourceURL == null)
+ throw new MalformedURLException(
+ "Cannot find the classpath resource: "
+ sourcePath);
+ return resourceURL;
}
public void setSourceURL(final URL sourceURL) throws URISyntaxException
{
@@ -132,6 +161,19 @@
public void setSourceURI(final URI sourceURI) {
this.sourceURI = sourceURI;
+ }
+
+ /**
+ * Get the scheme used for retrieving this resource.
+ * The scheme will be the first protocol in the source URI.
+ * @return
+ */
+ public String getScheme() {
+ String scheme = getSourceURI().getScheme();
+ if (scheme.equals("classpath")) {
+ scheme = "file";
+ }
+ return scheme;
}
}