You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/12/12 12:09:57 UTC

svn commit: r1420617 - in /jena/trunk/jena-core: ReleaseNotes.txt src/main/java/com/hp/hpl/jena/rdf/model/impl/ModelCom.java src/test/java/com/hp/hpl/jena/rdf/model/test/TestListStatements.java src/test/java/com/hp/hpl/jena/rdf/model/test/TestPackage.java

Author: andy
Date: Wed Dec 12 11:09:54 2012
New Revision: 1420617

URL: http://svn.apache.org/viewvc?rev=1420617&view=rev
Log:
JENA-362 : Fix listStatement(,,null,lang)

Added:
    jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestListStatements.java
Modified:
    jena/trunk/jena-core/ReleaseNotes.txt
    jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/rdf/model/impl/ModelCom.java
    jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestPackage.java

Modified: jena/trunk/jena-core/ReleaseNotes.txt
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/ReleaseNotes.txt?rev=1420617&r1=1420616&r2=1420617&view=diff
==============================================================================
--- jena/trunk/jena-core/ReleaseNotes.txt (original)
+++ jena/trunk/jena-core/ReleaseNotes.txt Wed Dec 12 11:09:54 2012
@@ -3,7 +3,9 @@ Release Notes 
 
 ==== Jena 2.10.0
 
-+ removed support for DAML+OIL
++ Remove OntModel.queryFor 9exposed graph level abstractions which have been removed) 
++ JENA-362 : Fix for listStatements with a nul object but speciifying a language string.
++ Removed support for DAML+OIL
       ARP : transition support for daml:collection removed
       Vocabulary files removed
       OntModelSpec for DMAL+OIL modes removed

Modified: jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/rdf/model/impl/ModelCom.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/rdf/model/impl/ModelCom.java?rev=1420617&r1=1420616&r2=1420617&view=diff
==============================================================================
--- jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/rdf/model/impl/ModelCom.java (original)
+++ jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/rdf/model/impl/ModelCom.java Wed Dec 12 11:09:54 2012
@@ -464,9 +464,53 @@ implements Model, PrefixMapping, Lock
 
     @Override
     public StmtIterator listStatements( Resource S, Property P, String O, String L ) {
-        return O == null ? listStatements(S, P, Node.ANY) 
-                         :  listStatements( S, P, Node.createLiteral( O, L, false ) ); 
+        if (O != null) {
+            // this is not OK when L is null: returns only the statements whose lang is ""
+            // return listStatements( S, P, Node.createLiteral( O, L, false ) );
+            if (L != null) return listStatements( S, P, Node.createLiteral( O, L, false ) );
+            // there's maybe a better way
+            return new StringFilteredStmtIterator(O, listStatements(S, P, Node.ANY));
+        } else {
+            return new LangFilteredStmtIterator(L, listStatements(S, P, Node.ANY));
+        }
+    }
+    
+    private class StringFilteredStmtIterator extends FilterKeepIterator<Statement> implements StmtIterator {
+        public StringFilteredStmtIterator(final String str, Iterator<Statement> it ) {
+            super(
+                    new Filter<Statement>() {
+                        @Override public boolean accept(Statement s) {
+                            RDFNode o = s.getObject();
+                            if (o instanceof Literal) {
+                                if (str == null) return true; // should not happen
+                                return (str.equals(((Literal) o).getString()));
+                            } 
+                            return false;
+                        }
+              }, 
+              it );
+        }
+        @Override public Statement nextStatement() { return next(); }
+    }
+    
+    private class LangFilteredStmtIterator extends FilterKeepIterator<Statement> implements StmtIterator {
+        public LangFilteredStmtIterator(final String l, Iterator<Statement> it ) {
+            super(
+                    new Filter<Statement>() {
+                        @Override public boolean accept(Statement s) {
+                            RDFNode o = s.getObject();
+                            if (o instanceof Literal) {
+                                if (l == null) return true;
+                                return (l.equals(((Literal) o).getLanguage()));
+                            } 
+                            return false;
+                        }
+              }, 
+              it );
+        }
+        @Override public Statement nextStatement() { return next(); }
     }
+  
 
     @Override
     public StmtIterator listLiteralStatements( Resource S, Property P, boolean O )

Added: jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestListStatements.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestListStatements.java?rev=1420617&view=auto
==============================================================================
--- jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestListStatements.java (added)
+++ jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestListStatements.java Wed Dec 12 11:09:54 2012
@@ -0,0 +1,104 @@
+/**
+ * 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.
+ */
+
+package com.hp.hpl.jena.rdf.model.test;
+
+import static org.junit.Assert.assertTrue ;
+
+import java.util.List ;
+
+import junit.framework.JUnit4TestAdapter ;
+import org.junit.AfterClass ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+import com.hp.hpl.jena.rdf.model.* ;
+
+public class TestListStatements
+{
+    private static Model m;
+    private static Resource s;
+    private static Property p;
+
+    public static junit.framework.Test suite() {
+        return new JUnit4TestAdapter(TestListStatements.class) ;
+    }
+    
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        m = ModelFactory.createDefaultModel();
+        Resource s = m.createResource("http://www.a.com/s");
+        Property p = m.createProperty("http://www.a.com/p");
+
+        m.add(s,p,m.createResource("http://www.a.com/o"));
+        m.add(s,p,"texte","fr");
+        m.add(s,p,"text","en");
+        m.add(s,p,"text");
+        m.add(m.createLiteralStatement(s,p,1789));
+    }
+
+    @AfterClass
+    public static void tearDownAfterClass() throws Exception {
+        m = null;
+        s = null;
+        p = null;
+    }
+
+    @Test
+    public final void thereAre4Literals() {     
+        StmtIterator it = m.listStatements(s, p, null, null);
+        assertTrue(it.toList().size() == 4);    
+    }
+
+    @Test
+    public final void thereIsOneFrench() {      
+        StmtIterator it = m.listStatements(s, p, null, "fr");
+        List<Statement> lis = it.toList();
+        assertTrue(lis.size() == 1);    
+        assertTrue(lis.get(0).getObject().toString().equals("texte@fr"));   
+    }
+
+    @Test
+    public final void thereAre2LitsWoLang() {       
+        StmtIterator it = m.listStatements(s, p, null, "");
+        assertTrue(it.toList().size() == 2);    
+    }
+
+    @Test
+    public final void theresOneTextEN() {       
+        StmtIterator it = m.listStatements(s, p, "text", "en");
+        List<Statement> lis = it.toList();
+        assertTrue(lis.size() == 1);    
+        assertTrue(lis.get(0).getObject().toString().equals("text@en"));    
+    }
+
+    @Test
+    public final void theresOneTextWoLang() {       
+        StmtIterator it = m.listStatements(s, p, "text", "");
+        List<Statement> lis = it.toList();
+        assertTrue(lis.size() == 1);    
+    }
+
+    @Test
+    public final void theresAreTwoText() {      
+        StmtIterator it = m.listStatements(s, p, "text", null);
+        List<Statement> lis = it.toList();
+        assertTrue(lis.size() == 2);    
+    }
+}
+

Modified: jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestPackage.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestPackage.java?rev=1420617&r1=1420616&r2=1420617&view=diff
==============================================================================
--- jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestPackage.java (original)
+++ jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/rdf/model/test/TestPackage.java Wed Dec 12 11:09:54 2012
@@ -20,11 +20,6 @@ package com.hp.hpl.jena.rdf.model.test;
 
 import junit.framework.*;
 
-/**
-    Collected test suite for the .graph package.
-    @author  jjc + kers
-*/
-
 public class TestPackage extends TestSuite {
 
     static public TestSuite suite() {
@@ -35,6 +30,8 @@ public class TestPackage extends TestSui
     private TestPackage() {
         super("Model");
         addTest( "TestModel", TestModelFactory.suite() );
+        addTest(TestListStatements.suite() );
+        
         addTest( "TestModelFactory", TestModelFactory.suite() );
         addTest( "TestSimpleListStatements", TestSimpleListStatements.suite() );
         addTest( "TestModelPolymorphism", TestModelPolymorphism.suite() );