[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