Repository: incubator-rya
Updated Branches:
  refs/heads/master 78f958d2f -> 8fca552e1


adding context;Closes #122


Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/8fca552e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/8fca552e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/8fca552e

Branch: refs/heads/master
Commit: 8fca552e1aaff6a37e63f351faea26ee63465d06
Parents: 78f958d
Author: pujav65 <puja...@gmail.com>
Authored: Mon Nov 21 14:53:12 2016 -0500
Committer: pujav65 <puja...@gmail.com>
Committed: Thu Dec 15 14:53:20 2016 -0500

----------------------------------------------------------------------
 common/rya.api/pom.xml                          |  5 ++
 .../org/apache/rya/api/domain/RyaStatement.java | 36 +++++++++-
 .../rya/api/domain/StatementMetadata.java       | 73 ++++++++++++++++++++
 .../apache/rya/accumulo/AccumuloRyaDAOTest.java | 14 ++--
 .../dao/SimpleMongoDBStorageStrategy.java       | 29 ++++++--
 .../RdfCloudTripleStoreConnection.java          |  5 +-
 6 files changed, 144 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/8fca552e/common/rya.api/pom.xml
----------------------------------------------------------------------
diff --git a/common/rya.api/pom.xml b/common/rya.api/pom.xml
index 6728c7c..f73c006 100644
--- a/common/rya.api/pom.xml
+++ b/common/rya.api/pom.xml
@@ -58,6 +58,11 @@ under the License.
             <artifactId>guava</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <dependency>
             <groupId>com.github.stephenc.findbugs</groupId>
             <artifactId>findbugs-annotations</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/8fca552e/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaStatement.java
----------------------------------------------------------------------
diff --git 
a/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaStatement.java 
b/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaStatement.java
index 869c23b..de41be9 100644
--- a/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaStatement.java
+++ b/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaStatement.java
@@ -48,18 +48,25 @@ public class RyaStatement {
         this(subject, predicate, object, context, null);
     }
 
+
     public RyaStatement(RyaURI subject, RyaURI predicate, RyaType object, 
RyaURI context, String qualifier) {
-        this(subject, predicate, object, context, qualifier, null);
+        this(subject, predicate, object, context, qualifier, new 
StatementMetadata());
+    }
+
+    public RyaStatement(RyaURI subject, RyaURI predicate, RyaType object, 
RyaURI context, String qualifier, StatementMetadata metadata) {
+        this(subject, predicate, object, context, qualifier, metadata, null);
     }
 
-    public RyaStatement(RyaURI subject, RyaURI predicate, RyaType object, 
RyaURI context, String qualifier, byte[] columnVisibility) {
-        this(subject, predicate, object, context, qualifier, columnVisibility, 
null);
+    public RyaStatement(RyaURI subject, RyaURI predicate, RyaType object, 
RyaURI context, String qualifier, StatementMetadata metadata, byte[] 
columnVisibility) {
+        this(subject, predicate, object, context, qualifier, columnVisibility, 
metadata.toBytes());
     }
 
+    @Deprecated
     public RyaStatement(RyaURI subject, RyaURI predicate, RyaType object, 
RyaURI context, String qualifier, byte[] columnVisibility, byte[] value) {
         this(subject, predicate, object, context, qualifier, columnVisibility, 
value, null);
     }
 
+    @Deprecated
     public RyaStatement(RyaURI subject, RyaURI predicate, RyaType object, 
RyaURI context, String qualifier, byte[] columnVisibility, byte[] value, Long 
timestamp) {
         this.subject = subject;
         this.predicate = predicate;
@@ -110,11 +117,28 @@ public class RyaStatement {
     public void setColumnVisibility(byte[] columnVisibility) {
         this.columnVisibility = columnVisibility;
     }
+    
+    public StatementMetadata getMetadata() {
+        // try to deserialize the value, if not assume that there was 
+        // no explicit metadata
+        try {
+            return new StatementMetadata(value);
+        }
+        catch (Exception ex){
+            return null;
+        }
+    }
+    
+    public void setStatementMetadata(StatementMetadata metadata){
+        this.value = metadata.toBytes();
+    }
 
+    @Deprecated
     public byte[] getValue() {
         return value;
     }
 
+    @Deprecated
     public void setValue(byte[] value) {
         this.value = value;
     }
@@ -210,11 +234,17 @@ public class RyaStatement {
             return this;
         }
 
+        @Deprecated
         public RyaStatementBuilder setValue(byte[] value) {
             ryaStatement.setValue(value);
             return this;
         }
 
+        public RyaStatementBuilder setMetadata(StatementMetadata metadata) {
+            ryaStatement.setValue(metadata.toBytes());
+            return this;
+        }
+
         public RyaStatementBuilder setColumnVisibility(byte[] 
columnVisibility) {
             ryaStatement.setColumnVisibility(columnVisibility);
             return this;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/8fca552e/common/rya.api/src/main/java/org/apache/rya/api/domain/StatementMetadata.java
----------------------------------------------------------------------
diff --git 
a/common/rya.api/src/main/java/org/apache/rya/api/domain/StatementMetadata.java 
b/common/rya.api/src/main/java/org/apache/rya/api/domain/StatementMetadata.java
new file mode 100644
index 0000000..904f86c
--- /dev/null
+++ 
b/common/rya.api/src/main/java/org/apache/rya/api/domain/StatementMetadata.java
@@ -0,0 +1,73 @@
+package org.apache.rya.api.domain;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.rya.api.persist.RdfDAOException;
+
+import com.google.gson.Gson;
+
+public class StatementMetadata {
+    
+    private static Gson gson = new Gson();
+    public static StatementMetadata EMPTY_METADATA = new StatementMetadata();
+    
+    private Map<String, String> metadataMap = new HashMap<String, String>();
+    
+    public StatementMetadata() {
+        
+    }
+    
+    public void addMetadata(String key, String value){
+        metadataMap.put(key, value);
+    }
+
+    public StatementMetadata(byte[] value) throws RdfDAOException {
+        try {
+            // try to convert back to a json string and then back to the map.
+            String metadataString = new String(value, "UTF8");
+            metadataMap = gson.fromJson(metadataString, HashMap.class);
+        } catch (UnsupportedEncodingException e) {
+            throw new RdfDAOException(e);
+        }
+    }
+
+    public StatementMetadata(String statementMetadata) {
+        try {
+            metadataMap = gson.fromJson(statementMetadata, HashMap.class);
+        } catch (Exception e) {
+            throw new RdfDAOException(e);
+        }
+    }
+    
+    public String toString(){
+        return gson.toJson(metadataMap);
+    }
+
+    public byte[] toBytes() {
+        // convert the map to a json string
+        String metadataString = gson.toJson(metadataMap);
+        // TODO may want to cache this for performance reasons
+        return metadataString.getBytes();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/8fca552e/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaDAOTest.java
----------------------------------------------------------------------
diff --git 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaDAOTest.java
 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaDAOTest.java
index f170a7e..e22bdde 100644
--- 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaDAOTest.java
+++ 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaDAOTest.java
@@ -36,6 +36,7 @@ import org.apache.rya.accumulo.query.AccumuloRyaQueryEngine;
 import org.apache.rya.api.domain.RyaStatement;
 import org.apache.rya.api.domain.RyaType;
 import org.apache.rya.api.domain.RyaURI;
+import org.apache.rya.api.domain.StatementMetadata;
 import org.apache.rya.api.persist.RyaDAOException;
 import org.apache.rya.api.persist.query.RyaQuery;
 import org.apache.rya.api.resolver.RdfToRyaConversions;
@@ -117,9 +118,9 @@ public class AccumuloRyaDAOTest {
         RyaURI cpu = RdfToRyaConversions.convertURI(vf.createURI(litdupsNS, 
"cpu"));
         RyaURI loadPerc = 
RdfToRyaConversions.convertURI(vf.createURI(litdupsNS, "loadPerc"));
         RyaURI uri1 = RdfToRyaConversions.convertURI(vf.createURI(litdupsNS, 
"uri1"));
-        RyaStatement stmt1 = new RyaStatement(cpu, loadPerc, uri1, null, "1", 
"vis1".getBytes());
+        RyaStatement stmt1 = new RyaStatement(cpu, loadPerc, uri1, null, "1", 
new StatementMetadata(), "vis1".getBytes());
         dao.add(stmt1);
-        RyaStatement stmt2 = new RyaStatement(cpu, loadPerc, uri1, null, "2", 
"vis2".getBytes());
+        RyaStatement stmt2 = new RyaStatement(cpu, loadPerc, uri1, null, "2", 
new StatementMetadata(), "vis2".getBytes());
         dao.add(stmt2);
 
         AccumuloRdfConfiguration cloneConf = conf.clone();
@@ -253,7 +254,8 @@ public class AccumuloRyaDAOTest {
         RyaURI loadPerc = new RyaURI(litdupsNS + "loadPerc");
         RyaURI uri1 = new RyaURI(litdupsNS + "uri1");
         String myval = "myval";
-        dao.add(new RyaStatement(cpu, loadPerc, uri1, null, null, null, 
myval.getBytes()));
+        byte[] columnVis = null;
+        dao.add(new RyaStatement(cpu, loadPerc, uri1, null, null, columnVis, 
myval.getBytes()));
 
         AccumuloRyaQueryEngine queryEngine = dao.getQueryEngine();
         CloseableIteration<RyaStatement, RyaDAOException> iter = 
queryEngine.query(new RyaStatement(cpu, loadPerc, null), conf);
@@ -272,9 +274,9 @@ public class AccumuloRyaDAOTest {
         byte[] colVisABC = "A|B|C".getBytes();
         byte[] colVisAB = "A|B".getBytes();
         byte[] colVisA = "A".getBytes();
-        dao.add(new RyaStatement(cpu, loadPerc, uri1, null, null, colVisABC));
-        dao.add(new RyaStatement(cpu, loadPerc, uri2, null, null, colVisAB));
-        dao.add(new RyaStatement(cpu, loadPerc, uri3, null, null, colVisA));
+        dao.add(new RyaStatement(cpu, loadPerc, uri1, null, null, new 
StatementMetadata(), colVisABC));
+        dao.add(new RyaStatement(cpu, loadPerc, uri2, null, null, new 
StatementMetadata(), colVisAB));
+        dao.add(new RyaStatement(cpu, loadPerc, uri3, null, null, new 
StatementMetadata(), colVisA));
 
         AccumuloRyaQueryEngine queryEngine = dao.getQueryEngine();
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/8fca552e/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBStorageStrategy.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBStorageStrategy.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBStorageStrategy.java
index 258d37f..5024110 100644
--- 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBStorageStrategy.java
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBStorageStrategy.java
@@ -27,6 +27,11 @@ import java.util.Map;
 
 import org.apache.commons.codec.binary.Hex;
 import org.apache.log4j.Logger;
+import org.apache.rya.api.domain.RyaStatement;
+import org.apache.rya.api.domain.RyaType;
+import org.apache.rya.api.domain.RyaURI;
+import org.apache.rya.api.domain.StatementMetadata;
+import org.apache.rya.api.persist.query.RyaQuery;
 import org.openrdf.model.impl.ValueFactoryImpl;
 import org.openrdf.model.vocabulary.XMLSchema;
 
@@ -34,11 +39,6 @@ import com.mongodb.BasicDBObject;
 import com.mongodb.DBCollection;
 import com.mongodb.DBObject;
 
-import org.apache.rya.api.domain.RyaStatement;
-import org.apache.rya.api.domain.RyaType;
-import org.apache.rya.api.domain.RyaURI;
-import org.apache.rya.api.persist.query.RyaQuery;
-
 /**
  * Defines how {@link RyaStatement}s are stored in MongoDB.
  */
@@ -46,12 +46,13 @@ public class SimpleMongoDBStorageStrategy implements 
MongoDBStorageStrategy<RyaS
     private static final Logger LOG = 
Logger.getLogger(SimpleMongoDBStorageStrategy.class);
     protected static final String ID = "_id";
     protected static final String OBJECT_TYPE = "objectType";
-    protected static final String OBJECT_TYPE_VALUE = 
XMLSchema.ANYURI.stringValue();
+    protected static final String URI_TYPE_VALUE = 
XMLSchema.ANYURI.stringValue();
     protected static final String CONTEXT = "context";
     protected static final String PREDICATE = "predicate";
     protected static final String OBJECT = "object";
     protected static final String SUBJECT = "subject";
     public static final String TIMESTAMP = "insertTimestamp";
+    protected static final String STATEMENT_METADATA = "statementMetadata";
     protected ValueFactoryImpl factory = new ValueFactoryImpl();
 
     @Override
@@ -102,6 +103,7 @@ public class SimpleMongoDBStorageStrategy implements 
MongoDBStorageStrategy<RyaS
         final String predicate = (String) result.get(PREDICATE);
         final String context = (String) result.get(CONTEXT);
         final Long timestamp = (Long) result.get(TIMESTAMP);
+        final String statementMetadata = (String) 
result.get(STATEMENT_METADATA);
         RyaType objectRya = null;
         if (objectType.equalsIgnoreCase(ANYURI.stringValue())){
             objectRya = new RyaURI(object);
@@ -121,6 +123,15 @@ public class SimpleMongoDBStorageStrategy implements 
MongoDBStorageStrategy<RyaS
         if(timestamp != null) {
             statement.setTimestamp(timestamp);
         }
+        if(statementMetadata != null) {
+            try {
+                StatementMetadata metadata = new 
StatementMetadata(statementMetadata);
+                statement.setStatementMetadata(metadata);
+            }
+            catch (Exception ex){
+                LOG.debug("Error deserializing metadata for statement", ex);
+            }         
+        }
         return statement;
     }
 
@@ -143,12 +154,16 @@ public class SimpleMongoDBStorageStrategy implements 
MongoDBStorageStrategy<RyaS
         } catch (final NoSuchAlgorithmException e) {
             LOG.error("Unable to perform SHA-1 on the ID, defaulting to raw 
bytes.", e);
         }
-        final BasicDBObject doc = new BasicDBObject(ID, new 
String(Hex.encodeHex(bytes)))
+        if (statement.getMetadata() == null){
+            statement.setStatementMetadata(StatementMetadata.EMPTY_METADATA);
+        }
+        BasicDBObject doc = new BasicDBObject(ID, new 
String(Hex.encodeHex(bytes)))
         .append(SUBJECT, statement.getSubject().getData())
         .append(PREDICATE, statement.getPredicate().getData())
         .append(OBJECT, statement.getObject().getData())
         .append(OBJECT_TYPE, statement.getObject().getDataType().toString())
         .append(CONTEXT, context)
+        .append(STATEMENT_METADATA, statement.getMetadata().toString())
         .append(TIMESTAMP, statement.getTimestamp());
         return doc;
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/8fca552e/sail/src/main/java/org/apache/rya/rdftriplestore/RdfCloudTripleStoreConnection.java
----------------------------------------------------------------------
diff --git 
a/sail/src/main/java/org/apache/rya/rdftriplestore/RdfCloudTripleStoreConnection.java
 
b/sail/src/main/java/org/apache/rya/rdftriplestore/RdfCloudTripleStoreConnection.java
index e8e370e..85440fd 100644
--- 
a/sail/src/main/java/org/apache/rya/rdftriplestore/RdfCloudTripleStoreConnection.java
+++ 
b/sail/src/main/java/org/apache/rya/rdftriplestore/RdfCloudTripleStoreConnection.java
@@ -36,6 +36,7 @@ import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.RdfCloudTripleStoreConstants;
 import org.apache.rya.api.domain.RyaStatement;
 import org.apache.rya.api.domain.RyaURI;
+import org.apache.rya.api.domain.StatementMetadata;
 import org.apache.rya.api.persist.RdfEvalStatsDAO;
 import org.apache.rya.api.persist.RyaDAO;
 import org.apache.rya.api.persist.RyaDAOException;
@@ -154,7 +155,7 @@ public class RdfCloudTripleStoreConnection extends 
SailConnectionBase {
                             RdfToRyaConversions.convertURI(predicate),
                             RdfToRyaConversions.convertValue(object),
                             RdfToRyaConversions.convertResource(context),
-                            null, cv);
+                            null, new StatementMetadata(), cv);
 
                     ryaDAO.add(statement);
                 }
@@ -163,7 +164,7 @@ public class RdfCloudTripleStoreConnection extends 
SailConnectionBase {
                         RdfToRyaConversions.convertResource(subject),
                         RdfToRyaConversions.convertURI(predicate),
                         RdfToRyaConversions.convertValue(object),
-                        null, null, cv);
+                        null, null, new StatementMetadata(), cv);
 
                 ryaDAO.add(statement);
             }

Reply via email to