Author: rwesten
Date: Wed Mar 26 08:08:33 2014
New Revision: 1581735

URL: http://svn.apache.org/r1581735
Log:
fix for STANBOL-1301 for 0.12.1. This also adds a new UnitTest for the example 
used in the Issue

Modified:
    
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
    
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
    
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java

Modified: 
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java?rev=1581735&r1=1581734&r2=1581735&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
 (original)
+++ 
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentation.java
 Wed Mar 26 08:08:33 2014
@@ -16,6 +16,9 @@
 */
 package org.apache.stanbol.entityhub.model.sesame;
 
+import static 
org.apache.commons.collections.PredicateUtils.instanceofPredicate;
+import static org.apache.commons.collections.PredicateUtils.notPredicate;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -27,6 +30,8 @@ import javax.xml.datatype.Duration;
 import javax.xml.datatype.XMLGregorianCalendar;
 
 import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.PredicateUtils;
 import org.apache.commons.collections.Transformer;
 import org.apache.stanbol.entityhub.servicesapi.defaults.DataTypeEnum;
 import org.apache.stanbol.entityhub.servicesapi.model.Reference;
@@ -34,6 +39,7 @@ import org.apache.stanbol.entityhub.serv
 import org.apache.stanbol.entityhub.servicesapi.model.Text;
 import org.apache.stanbol.entityhub.servicesapi.model.UnsupportedTypeException;
 import org.apache.stanbol.entityhub.servicesapi.util.ModelUtils;
+import org.openrdf.model.BNode;
 import org.openrdf.model.Literal;
 import org.openrdf.model.Model;
 import org.openrdf.model.Statement;
@@ -225,9 +231,11 @@ public class RdfRepresentation implement
         }
         URI property = sesameFactory.createURI(field);
         return IteratorUtils.transformedIterator(
-            IteratorUtils.transformedIterator(
-                model.filter(subject, property, null).iterator(), 
-                objectTransFormer), // get the object from the statement
+            IteratorUtils.filteredIterator(
+                IteratorUtils.transformedIterator(
+                    model.filter(subject, property, null).iterator(), 
+                    objectTransFormer), // get the object from the statement
+                notPredicate(instanceofPredicate(BNode.class))),
             
org.apache.stanbol.entityhub.model.sesame.ModelUtils.VALUE_TRANSFORMER); // 
transform the values
     }
 

Modified: 
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java?rev=1581735&r1=1581734&r2=1581735&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
 (original)
+++ 
stanbol/branches/release-0.12/entityhub/model/sesame/src/main/java/org/apache/stanbol/entityhub/model/sesame/ValueTypeFilter.java
 Wed Mar 26 08:08:33 2014
@@ -80,9 +80,11 @@ class ValueTypeFilter<T> implements Pred
     
     @Override
     public boolean evaluate(Object object) {
-        if(sesameType != null){
+        if(object == null){
+            return false;
+        } else if(sesameType != null){
             return sesameType.isAssignableFrom(object.getClass());
-        } else if(referenceState && object instanceof URI || object instanceof 
BNode){
+        } else if(referenceState && object instanceof URI){
             return true;
         } else if(object instanceof Literal){
             Literal literal = (Literal)object;

Modified: 
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java?rev=1581735&r1=1581734&r2=1581735&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
 (original)
+++ 
stanbol/branches/release-0.12/entityhub/model/sesame/src/test/java/org/apache/stanbol/entityhub/model/sesame/RdfRepresentationTest.java
 Wed Mar 26 08:08:33 2014
@@ -28,13 +28,24 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
+import org.apache.stanbol.entityhub.servicesapi.model.Reference;
 import org.apache.stanbol.entityhub.servicesapi.model.Representation;
 import org.apache.stanbol.entityhub.servicesapi.model.Text;
 import org.apache.stanbol.entityhub.servicesapi.model.ValueFactory;
 import org.apache.stanbol.entityhub.test.model.RepresentationTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.openrdf.model.BNode;
 import org.openrdf.model.Literal;
+import org.openrdf.model.Model;
+import org.openrdf.model.URI;
+import org.openrdf.model.impl.BNodeImpl;
+import org.openrdf.model.impl.LiteralImpl;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.model.vocabulary.DCTERMS;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.model.vocabulary.RDFS;
+import org.openrdf.model.vocabulary.SKOS;
 import org.openrdf.model.vocabulary.XMLSchema;
 
 
@@ -192,6 +203,42 @@ public class RdfRepresentationTest exten
         assertEquals(dateValue, dateValues.next());
         assertFalse(dateValues.hasNext());
     }
+    /**
+     * Test for STANBOL-1301
+     */
+    @Test
+    public void testBNodeFiltering(){
+        URI concept = new URIImpl("http://example.org/mySkos#Concept123";);
+        Representation r = createRepresentation(concept.stringValue());
+        assertTrue(r instanceof RdfRepresentation);
+        RdfRepresentation rep = (RdfRepresentation)r;
+        //add the example as listed in STANBOL-1301 to directly to the
+        //Sesame Model backing the created Representation
+        Model m  = rep.getModel();
+        m.add(concept,RDF.TYPE,SKOS.CONCEPT);
+        m.add(concept,DCTERMS.IDENTIFIER, new LiteralImpl("123"));
+        m.add(concept, SKOS.PREF_LABEL, new LiteralImpl("Concept123","en"));
+        
+        BNode note1 = new 
BNodeImpl("5d8580be71044a88bcfe9852d1e9cfb6node17c4j452vx19576");
+        m.add(concept, SKOS.SCOPE_NOTE, note1);
+        m.add(note1, DCTERMS.CREATOR, new LiteralImpl("User1"));
+        m.add(note1, DCTERMS.CREATED, new 
LiteralImpl("2013-03-03T02:02:02Z",XMLSchema.DATETIME));
+        m.add(note1, RDFS.COMMENT, new LiteralImpl("The scope of this example 
global","en"));
+
+        BNode note2 = new 
BNodeImpl("5d8580be71044a88bcfe9852d1e9cfb6node17c4j452vx19634");
+        m.add(concept, SKOS.SCOPE_NOTE, note2);
+        m.add(note2, DCTERMS.CREATOR, new LiteralImpl("User2"));
+        m.add(note2, DCTERMS.CREATED, new 
LiteralImpl("2013-03-03T04:04:04Z",XMLSchema.DATETIME));
+        m.add(note2, RDFS.COMMENT, new LiteralImpl("Der Geltungsbereich ist 
Global","de"));
+        
+        //now assert that BNodes are not reported via the Representation API
+        Iterator<Object> scopeNotes = rep.get(SKOS.SCOPE_NOTE.stringValue());
+        assertFalse(scopeNotes.hasNext());
+        
+        Iterator<Reference> scopeNoteRefs = 
rep.getReferences(SKOS.SCOPE_NOTE.stringValue());
+        assertFalse(scopeNoteRefs.hasNext());
+    }
+    
     //TODO add tests for adding Integers, Doubles, ... and getting 
TypedLiterals
     public static void main(String[] args) {
         RdfRepresentationTest test = new RdfRepresentationTest();


Reply via email to