[Mulgara-svn] r1664 - trunk/src/jar/resolver/java/org/mulgara/resolver
pag at mulgara.org
pag at mulgara.org
Fri Apr 10 23:21:22 UTC 2009
Author: pag
Date: 2009-04-10 16:21:21 -0700 (Fri, 10 Apr 2009)
New Revision: 1664
Modified:
trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java
Log:
Properly handling of relative URIs
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java 2009-04-10 17:58:41 UTC (rev 1663)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java 2009-04-10 23:21:21 UTC (rev 1664)
@@ -622,7 +622,21 @@
String query = uri.getQuery();
String ssp = databaseURI.getSchemeSpecificPart();
if (query != null) ssp += '?' + query;
- spObject = spObjectFactory.newSPURI(new URI(databaseURI.getScheme(), ssp, uri.getFragment()));
+ String fragment = uri.getFragment();
+ if (fragment != null) {
+ // this is a graph fragment
+ spObject = spObjectFactory.newSPURI(new URI(databaseURI.getScheme(), ssp, uri.getFragment()));
+ } else {
+ // this is a path-relative URI
+ String relPath = uri.getSchemeSpecificPart();
+ // ensure that the relPath can be concatenated to the ssp
+ if (ssp.endsWith("/")) {
+ if (relPath.startsWith("/")) relPath = relPath.substring(1);
+ } else {
+ if (!relPath.startsWith("/")) relPath = "/" + relPath;
+ }
+ spObject = spObjectFactory.newSPURI(new URI(databaseURI.getScheme(), ssp + relPath, null));
+ }
} catch (URISyntaxException ex) {
logger.warn(
"Cannot create absolute URI with base:\"" + databaseURI +
@@ -678,7 +692,7 @@
}
} else {
// databaseURI is hierarchial.
- String path;
+ String path = null;
String host;
if (
@@ -689,7 +703,7 @@
(host = uri.getHost()) != null &&
uri.getPort() == databaseURI.getPort() &&
(path = uri.getPath()) != null &&
- path.equals(databaseURI.getPath()) &&
+ path.startsWith(databaseURI.getPath()) &&
hostnameAliases.contains(host.toLowerCase())
)
)
@@ -699,13 +713,27 @@
SPObjectFactory spObjectFactory = persistentStringPool.getSPObjectFactory();
QueryParams query = QueryParams.decode(uri);
String gName = query.get(GRAPH);
+ if (path == null) path = uri.getPath();
+ String dbPath = databaseURI.getPath();
+
if (gName != null) {
+ // wrapped graph name
try {
spObject = spObjectFactory.newSPURI(new URI(gName));
} catch (URISyntaxException ex) {
logger.warn("Cannot extract a valid URI from:\"" + gName + "\"", ex);
}
+ } else if (!path.equals(dbPath)) {
+ // relative URI
+ path = path.substring(dbPath.length());
+ if (path.startsWith("/")) path = path.substring(1);
+ try {
+ spObject = spObjectFactory.newSPURI(new URI(null, null, path, uri.getQuery(), fragment));
+ } catch (URISyntaxException ex) {
+ logger.warn("Cannot create relative URI with path:\"" + path + "\"", ex);
+ }
} else if (fragment != null) {
+ // fragment graph name
try {
spObject = spObjectFactory.newSPURI(new URI(null, null, null, uri.getQuery(), fragment));
} catch (URISyntaxException ex) {
More information about the Mulgara-svn
mailing list