[Mulgara-svn] r1931 - trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational

alexhall at mulgara.org alexhall at mulgara.org
Thu Mar 18 21:26:59 UTC 2010


Author: alexhall
Date: 2010-03-18 14:26:58 -0700 (Thu, 18 Mar 2010)
New Revision: 1931

Modified:
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java
Log:
Applying patch submitted by Alex Miller for Trac issue 213 (support urlify and urlencode flags in database column references in URI patterns for D2RQ resolver)

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java	2010-03-16 13:52:56 UTC (rev 1930)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java	2010-03-18 21:26:58 UTC (rev 1931)
@@ -48,8 +48,10 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.HashMap;
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URLEncoder;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
@@ -68,6 +70,8 @@
 
 
 public class PatternDesc extends VariableDesc {
+  private enum UriEncoding { NONE, URLENCODING, URLIFY }
+    
   @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(PatternDesc.class);
 
@@ -75,6 +79,7 @@
   private Set<String> columns;
 
   private List<String> pattern; // Order is str : column : str : column : ....
+  private List<UriEncoding> patternEncoding;  // Matches 1-1 with pattern list
   private Class<? extends Node> anticipClass;
 
   private URI datatype;
@@ -119,15 +124,29 @@
     tables =  new HashSet<String>();
     columns = new HashSet<String>();
     pattern = new ArrayList<String>();
+    patternEncoding = new ArrayList<UriEncoding>();
     columnIndices = new HashMap<String,Integer>();
     boolean isColumn = true;
     for (int i = 0; i < split.length; i++) {
       isColumn = !isColumn;  // Note this makes the initial state *false*
-      pattern.add(split[i]);
+      String patternPart = split[i];
       if (isColumn) {
-        tables.add(RelationalResolver.parseTableFromColumn(split[i]));
-        columns.add(split[i]);
+        if(patternPart.endsWith("|urlify")) {
+          patternPart = patternPart.substring(0, patternPart.length()-("|urlify".length()));
+          patternEncoding.add(UriEncoding.URLIFY);
+        } else if(patternPart.endsWith("|urlencoding")) {
+          patternPart = patternPart.substring(0, patternPart.length()-("|urlencoding".length()));
+          patternEncoding.add(UriEncoding.URLENCODING);
+        } else { 
+          patternEncoding.add(UriEncoding.NONE);
+        }
+        
+        tables.add(RelationalResolver.parseTableFromColumn(patternPart));
+        columns.add(patternPart);
+      } else {
+        patternEncoding.add(UriEncoding.NONE);
       }
+      pattern.add(patternPart);
     }
   }
 
@@ -138,11 +157,32 @@
   public Node getNode(ResultSet resultSet) throws SQLException, TuplesException {
     StringBuffer buff = new StringBuffer();
     boolean isColumn = true;
-    for (String p: pattern) {
+    
+    for (int patternIndex = 0; patternIndex < pattern.size(); patternIndex++) {
+      String p = pattern.get(patternIndex);
+      UriEncoding encoding = patternEncoding.get(patternIndex);
+      
       isColumn = !isColumn;  // Note this makes the initial state *false*
       if (isColumn) {
         int index = columnIndices.get(p).intValue();
-        buff.append(resultSet.getString(index + 1));
+        String colValue = resultSet.getString(index + 1);
+        
+        // For URLIFY, replace spaces with _
+        if(encoding == UriEncoding.URLIFY) {
+          colValue = colValue.replace(' ', '_');
+        }
+
+        // For URLENCODING and URLIFY, apply URL encoding
+        if(encoding != UriEncoding.NONE) {
+          try {
+            colValue = URLEncoder.encode(colValue, "UTF-8");
+          } catch(UnsupportedEncodingException e) {
+            // Should never happen - UTF-8 must be supported in all Java impls
+            assert false : "Received unexpected encoding exception for UTF-8.";
+          }
+        }
+        
+        buff.append(colValue);
       } else {
         buff.append(p);
       }




More information about the Mulgara-svn mailing list