[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