You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2017/02/08 14:43:56 UTC

[01/16] commons-rdf git commit: COMMONSRDF-51: compare language tags in lower case

Repository: commons-rdf
Updated Branches:
  refs/heads/master 6d4e333d9 -> 4c69d42f4


COMMONSRDF-51: compare language tags in lower case


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3064d219
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3064d219
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3064d219

Branch: refs/heads/master
Commit: 3064d219606cbe42c0150d81dbf6cdbc74bf7491
Parents: 0e1969a
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 12 14:51:26 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 12 14:51:26 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/Literal.java     |  27 +++--
 .../apache/commons/rdf/api/AbstractRDFTest.java | 118 ++++++++++++++++++-
 .../commons/rdf/jena/impl/JenaLiteralImpl.java  |  13 +-
 .../commons/rdf/jsonldjava/JsonLdLiteral.java   |  13 +-
 .../commons/rdf/rdf4j/impl/LiteralImpl.java     |  15 ++-
 .../apache/commons/rdf/simple/LiteralImpl.java  |   8 +-
 6 files changed, 169 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/api/src/main/java/org/apache/commons/rdf/api/Literal.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Literal.java b/api/src/main/java/org/apache/commons/rdf/api/Literal.java
index a434a73..ea6e3a4 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Literal.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Literal.java
@@ -18,6 +18,7 @@
 package org.apache.commons.rdf.api;
 
 import java.io.Serializable;
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -72,7 +73,13 @@ public interface Literal extends RDFTerm {
      * <a href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
      * >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, this method
      * must return {@link Optional#empty()}.
-     *
+     * <p>
+     * The value space of language tags is always in lower case; although 
+     * RDF implementations MAY convert all language tags to lower case,
+     * safe comparisons of language tags should be done using
+     * {@link String#toLowerCase(Locale)} with the locale
+     * {@link Locale#ROOT}. 
+     * <p>
      * Implementation note: If your application requires {@link Serializable}
      * objects, it is best not to store an {@link Optional} in a field. It is
      * recommended to use {@link Optional#ofNullable(Object)} to create the
@@ -80,8 +87,8 @@ public interface Literal extends RDFTerm {
      *
      * @return The {@link Optional} language tag for this literal. If
      *         {@link Optional#isPresent()} returns true, the value returned by
-     *         {@link Optional#get()} must be a non-empty string conforming to
-     *         BCP47.
+     *         {@link Optional#get()} must be a non-empty language tag string
+     *         conforming to BCP47.
      * @see <a href=
      *      "http://www.w3.org/TR/rdf11-concepts/#dfn-language-tag">RDF-1.1
      *      Literal language tag</a>
@@ -89,14 +96,20 @@ public interface Literal extends RDFTerm {
     Optional<String> getLanguageTag();
 
     /**
-     * Check it this Literal is equal to another Literal. <blockquote>
+     * Check it this Literal is equal to another Literal. 
+     * <blockquote>
      * <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal-term">Literal
-     * term equality</a>: Two literals are term-equal (the same RDF literal) if
+     * term equality</a>: 
+     * Two literals are term-equal (the same RDF literal) if
      * and only if the two lexical forms, the two datatype IRIs, and the two
      * language tags (if any) compare equal, character by character. Thus, two
      * literals can have the same value without being the same RDF term.
      * </blockquote>
-     *
+     * As the value space for language tags is lower-space, if they are present,
+     * they MUST be compared character by character
+     * using the equivalent of {@link String#toLowerCase(java.util.Locale)} with
+     * the locale {@link Locale#ROOT}.
+     * <p>
      * Implementations MUST also override {@link #hashCode()} so that two equal
      * Literals produce the same hash code.
      *
@@ -114,7 +127,7 @@ public interface Literal extends RDFTerm {
      * The returned hash code MUST be equal to the result of
      * {@link Objects#hash(Object...)} with the arguments
      * {@link #getLexicalForm()}, {@link #getDatatype()},
-     * {@link #getLanguageTag()}.
+     * {@link #getLanguageTag()}<code>.map(s-&gt;s.toLowerString(Locale.ROOT))</code>.
      * <p>
      * This method MUST be implemented in conjunction with
      * {@link #equals(Object)} so that two equal Literals produce the same hash

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 85e7b61..5efcee1 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -17,13 +17,13 @@
  */
 package org.apache.commons.rdf.api;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.*;
 
+import java.util.Locale;
 import java.util.Objects;
+import java.util.Optional;
 
+import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -139,7 +139,7 @@ public abstract class AbstractRDFTest {
         assertEquals("<http://example.com/vocab#term>", term.ntriplesString());
 
         // and now for the international fun!
-
+        // make sure this file is edited/compiled as UTF-8
         final IRI latin1 = factory.createIRI("http://acc�nt.example.com/premi�re");
         assertEquals("http://acc�nt.example.com/premi�re", latin1.getIRIString());
         assertEquals("<http://acc�nt.example.com/premi�re>", latin1.ntriplesString());
@@ -194,6 +194,114 @@ public abstract class AbstractRDFTest {
         assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
     }
 
+    public void testCreateLiteralLangCaseInsensitive() throws Exception {
+        // COMMONSRDF-51: Literal langtag may not be in lowercase, but
+        // must be COMPARED (aka .equals and .hashCode()) in lowercase
+        // as the language space is lower case.       
+        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
+        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        
+        assertEquals("en-gb", lower.getLanguageTag().get());
+     
+        // NOTE: the RDF framework is free to lowercase the language tag 
+        // or leave it as-is, so we can't assume: 
+        /*
+         assertEquals("en-gb", upper.getLanguageTag().get());
+         assertEquals("en-gb", mixed.getLanguageTag().get());
+        */
+        // ..unless we do a case-insensitive comparison:
+        assertEquals("en-gb",
+                upper.getLanguageTag().get().toLowerCase(Locale.ROOT));
+        assertEquals("en-gb",
+                mixed.getLanguageTag().get().toLowerCase(Locale.ROOT));
+                
+        // However these should all be true
+        assertEquals(lower, lower);
+        assertEquals(lower, upper);
+        assertEquals(lower, mixed);
+        assertEquals(upper, lower);
+        assertEquals(upper, upper);
+        assertEquals(upper, mixed);
+        assertEquals(mixed, lower);
+        assertEquals(mixed, upper);
+        assertEquals(mixed, mixed);
+
+        // And then by java.lang.Object contract, also the hashcode:
+        assertEquals(lower.hashCode(), upper.hashCode());
+        assertEquals(lower.hashCode(), mixed.hashCode());        
+    }
+
+    @Test
+    public void testCreateLiteralLangCaseInsensitiveOther() throws Exception {
+        // COMMONSRDF-51: Ensure the Literal is using case insensitive
+        // comparison against more 'liberal' literal implementations
+        // which may not have done .toLowerString() in their constructor
+        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
+        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+        
+        Literal otherLiteral = new Literal() {
+            @Override
+            public String ntriplesString() {
+                return "Hello@en-GB";
+            }
+            @Override
+            public String getLexicalForm() {
+                return "Hello";
+            }
+            @Override
+            public Optional<String> getLanguageTag() {
+                return Optional.of("en-GB");
+            }
+            @Override
+            public IRI getDatatype() {
+                return factory.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString");
+            }
+            @Override
+            public boolean equals(Object obj) {
+                throw new RuntimeException("Wrong way comparison of literal");
+            }
+        };
+
+        assertEquals(mixed, otherLiteral);
+        assertEquals(lower, otherLiteral);
+        assertEquals(upper, otherLiteral);
+    }
+
+    @Test
+    public void testCreateLiteralLangCaseInsensitiveInTurkish() throws Exception {
+        // COMMONSRDF-51: Special test for Turkish issue where 
+        // "i".toLowerCase() != "i"
+        // See also:
+        // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+        Locale defaultLocale = Locale.getDefault();
+        try { 
+            Locale turkish = Locale.forLanguageTag("TR");
+            Locale.setDefault(turkish);
+            Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+            final Literal lower = factory.createLiteral("moi", "fi"); 
+            final Literal upper = factory.createLiteral("moi", "FI"); 
+            final Literal mixed = factory.createLiteral("moi", "fI");
+
+            assertEquals(lower, lower);
+            assertEquals(lower, upper);
+            assertEquals(lower, mixed);
+            assertEquals(upper, lower);
+            assertEquals(upper, upper);
+            assertEquals(upper, mixed);
+            assertEquals(mixed, lower);
+            assertEquals(mixed, upper);
+            assertEquals(mixed, mixed);
+            assertEquals(lower.hashCode(), upper.hashCode());
+            assertEquals(lower.hashCode(), mixed.hashCode());        
+        } finally {
+            Locale.setDefault(defaultLocale);
+        }
+    }
+    
     @Test
     public void testCreateLiteralString() throws Exception {
         final Literal example = factory.createLiteral("Example",

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
index faee060..8a0c9ee 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
@@ -18,6 +18,7 @@
 
 package org.apache.commons.rdf.jena.impl;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -37,6 +38,10 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
             throw new IllegalArgumentException("Node is not a literal: " + node);
         }
     }
+    
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
 
     @Override
     public boolean equals(final Object other) {
@@ -50,8 +55,10 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
             return false;
         }
         final Literal literal = (Literal) other;
-        return getLexicalForm().equals(literal.getLexicalForm()) && getLanguageTag().equals(literal.getLanguageTag())
-                && getDatatype().equals(literal.getDatatype());
+        return getLexicalForm().equals(literal.getLexicalForm()) &&
+                getDatatype().equals(literal.getDatatype()) &&
+                getLanguageTag().map(JenaLiteralImpl::lowerCase).equals(
+                        literal.getLanguageTag().map(JenaLiteralImpl::lowerCase));
     }
 
     @Override
@@ -75,6 +82,6 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
 
     @Override
     public int hashCode() {
-        return Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag());
+        return Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag().map(JenaLiteralImpl::lowerCase));
     }
 }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
index 2414087..0d63c29 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
@@ -17,6 +17,7 @@
  */
 package org.apache.commons.rdf.jsonldjava;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -38,6 +39,10 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
         }
     }
 
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
+    
     @Override
     public String ntriplesString() {
         final StringBuilder sb = new StringBuilder();
@@ -76,9 +81,8 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
 
     @Override
     public int hashCode() {
-        // Should be the same as
-        // Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag());
-        return Objects.hash(node.getValue(), node.getDatatype(), node.getLanguage());
+        return Objects.hash(node.getValue(), node.getDatatype(), 
+                getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
     }
 
     @Override
@@ -90,7 +94,8 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
         if (obj instanceof Literal) {
             final Literal other = (Literal) obj;
             return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
-                    && getLanguageTag().equals(other.getLanguageTag());
+                    && getLanguageTag().map(JsonLdLiteralImpl::lowerCase)
+                    .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
         }
         return false;
 

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
index 16d70b8..253b645 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
@@ -17,6 +17,7 @@
  */
 package org.apache.commons.rdf.rdf4j.impl;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -32,6 +33,10 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
         super(literal);
     }
 
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
+    
     @Override
     public boolean equals(final Object obj) {
         if (obj == this) {
@@ -39,9 +44,10 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
         }
         if (obj instanceof org.apache.commons.rdf.api.Literal) {
             final org.apache.commons.rdf.api.Literal other = (org.apache.commons.rdf.api.Literal) obj;
-            return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
-                    && getLanguageTag().equals(other.getLanguageTag());
-
+            return getLexicalForm().equals(other.getLexicalForm()) && 
+                    getDatatype().equals(other.getDatatype()) &&
+                    getLanguageTag().map(LiteralImpl::lowerCase).equals(
+                            other.getLanguageTag().map(LiteralImpl::lowerCase));
         }
         return false;
     }
@@ -63,7 +69,8 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
 
     @Override
     public int hashCode() {
-        return Objects.hash(value.getLabel(), value.getDatatype(), value.getLanguage());
+        return Objects.hash(value.getLabel(), value.getDatatype(), 
+                getLanguageTag().map(LiteralImpl::lowerCase));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
index 3cca4c6..763a629 100644
--- a/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
@@ -52,7 +52,7 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
 
     public LiteralImpl(final String literal, final String languageTag) {
         this.lexicalForm = Objects.requireNonNull(literal);
-        this.languageTag = Objects.requireNonNull(languageTag).toLowerCase(Locale.ENGLISH);
+        this.languageTag = Objects.requireNonNull(lowerCase(languageTag));
         if (languageTag.isEmpty()) {
             // TODO: Check against
             // http://www.w3.org/TR/n-triples/#n-triples-grammar
@@ -116,6 +116,10 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
         return Objects.hash(lexicalForm, dataType, languageTag);
     }
 
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
+    
     @Override
     public boolean equals(final Object obj) {
         if (this == obj) {
@@ -126,7 +130,7 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
         }
         final Literal literal = (Literal) obj;
         return getDatatype().equals(literal.getDatatype()) && getLexicalForm().equals(literal.getLexicalForm())
-                && getLanguageTag().equals(literal.getLanguageTag());
+                && getLanguageTag().equals(literal.getLanguageTag().map(LiteralImpl::lowerCase));
     }
 
 }


[15/16] commons-rdf git commit: COMMONSRDF-51: Comment

Posted by st...@apache.org.
COMMONSRDF-51: Comment


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/202a8c61
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/202a8c61
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/202a8c61

Branch: refs/heads/master
Commit: 202a8c617f383027ddf82361dc05d600207d8b13
Parents: f8745ef
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:40:27 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:40:27 2017 +0000

----------------------------------------------------------------------
 .../java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/202a8c61/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
index a5f4e36..486903a 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
@@ -117,12 +117,12 @@ class JenaDatasetImpl implements JenaDataset {
 
     @Override
     public void remove(final Quad quad) {
+        // COMMONSRDF-51: 
         graph.deleteAny(
                 toJenaPattern(quad.getGraphName()),
                 toJenaPattern(quad.getSubject()),
                 toJenaPattern(quad.getPredicate()),
                 toJenaPattern(quad.getObject()));
-//        graph.delete(factory.asJenaQuad(quad));
     }
 
     @Override


[09/16] commons-rdf git commit: COMMONSRDF-51: g.remove()/stream() case insensitive lang testing

Posted by st...@apache.org.
COMMONSRDF-51: g.remove()/stream() case insensitive lang testing


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f5766fe5
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f5766fe5
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f5766fe5

Branch: refs/heads/master
Commit: f5766fe5365b41fab01d1745543bf2a72a8b19d3
Parents: 4bc08f6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 12:06:07 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 12:06:57 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractGraphTest.java      | 64 +++++++++++++++-----
 1 file changed, 49 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f5766fe5/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 89e91f2..4856ed4 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -408,13 +408,6 @@ public abstract class AbstractGraphTest {
         assertTrue(graph.contains(null, null, upper));
         assertTrue(graph.contains(null, null, lower));
         assertTrue(graph.contains(null, null, mixed));
-
-        // Remove should also honour any case
-        graph.remove(example1, null, mixed);
-//        Triple t = graph.stream().findAny().get();
-//        System.out.println(t);
-        // no more greetings of any kind
-        assertFalse(graph.contains(null, greeting, null));
     }
 
     @Test
@@ -463,9 +456,6 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleTR, null, lowerROOT));
             assertTrue(g.contains(exampleTR, null, mixed));
             assertTrue(g.contains(exampleTR, null, mixedROOT));
-            g.remove(exampleTR, null, mixed);
-            // No more greetings for exampleTR
-            assertFalse(g.contains(exampleTR, null, null));
 
             // What about the triple we added while in ROOT locale?
             assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, upper)));
@@ -474,15 +464,59 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleROOT, null, upper));
             assertTrue(g.contains(exampleROOT, null, lower));
             assertTrue(g.contains(exampleROOT, null, mixed));
-            g.remove(exampleROOT, null, mixed);
-            // No more greetings of any kind
-            assertFalse(g.contains(null, null, null));
-
-
         } finally {
             Locale.setDefault(defaultLocale);
         }
+    }
+    
+
+    @Test
+    public void removeLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
 
+        final Graph graph = factory.createGraph();
+        graph.add(example1, greeting, upper);
+
+        // Remove should also honour any case
+        graph.remove(example1, null, mixed);
+        assertFalse(graph.contains(null, greeting, null));
+        
+        graph.add(example1, greeting, lower);
+        graph.remove(example1, null, upper);
+
+        graph.add(factory.createTriple(example1, greeting, mixed));
+        graph.remove(factory.createTriple(example1, greeting, upper));
+    }
+
+    @Test
+    public void streamLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        final Graph graph = factory.createGraph();
+        graph.add(example1, greeting, upper);
+
+        // or as patterns
+        assertTrue(graph.stream(null, null, upper).findAny().isPresent());
+        assertTrue(graph.stream(null, null, lower).findAny().isPresent());
+        assertTrue(graph.stream(null, null, mixed).findAny().isPresent());
+        
+        // Check the triples returned equal a new triple
+        Triple t = graph.stream(null, null, lower).findAny().get();
+        assertEquals(t, factory.createTriple(example1, greeting, mixed));
     }
 
     private void notEquals(final BlankNodeOrIRI node1, final BlankNodeOrIRI node2) {


[04/16] commons-rdf git commit: COMMONSRDF-51: Don't assume langtag case is preserved

Posted by st...@apache.org.
COMMONSRDF-51: Don't assume langtag case is preserved

also test .equals() both ways


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/7046ea1e
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/7046ea1e
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/7046ea1e

Branch: refs/heads/master
Commit: 7046ea1e38a0da9b1c8ef8716ac7667fd96f7de7
Parents: 25cc1f1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:20:30 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:20:30 2017 +0000

----------------------------------------------------------------------
 .../apache/commons/rdf/api/AbstractRDFTest.java | 124 ++++++++++++-------
 1 file changed, 79 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/7046ea1e/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 52686d7..0032659 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -41,10 +41,10 @@ public abstract class AbstractRDFTest {
     private RDF factory;
 
     /**
-     * 
+     *
      * This method must be overridden by the implementing test to provide a
      * factory for the test to create {@link Literal}, {@link IRI} etc.
-     * 
+     *
      * @return {@link RDF} instance to be tested.
      */
     protected abstract RDF createFactory();
@@ -194,55 +194,67 @@ public abstract class AbstractRDFTest {
         assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
     }
 
+
+    private void assertEqualsBothWays(Object a, Object b) {
+        assertEquals(a, b);
+        assertEquals(b, a);
+        // hashCode must match as well
+        assertEquals(a.hashCode(), b.hashCode());
+    }
+
     @Test
     public void testCreateLiteralLangCaseInsensitive() throws Exception {
-        // COMMONSRDF-51: Literal langtag may not be in lowercase, but
-        // must be COMPARED (aka .equals and .hashCode()) in lowercase
-        // as the language space is lower case.       
-        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
-        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        /*
+         * COMMONSRDF-51: Literal langtag may not be in lowercase, but must be
+         * COMPARED (aka .equals and .hashCode()) in lowercase as the language
+         * space is lower case.
+         */
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
 
-        
-        assertEquals("en-gb", lower.getLanguageTag().get());
-     
-        // NOTE: the RDF framework is free to lowercase the language tag 
-        // or leave it as-is, so we can't assume: 
         /*
-         assertEquals("en-gb", upper.getLanguageTag().get());
-         assertEquals("en-gb", mixed.getLanguageTag().get());
-        */
-        // ..unless we do a case-insensitive comparison:
+         * Disabled as some RDF frameworks (namely RDF4J) can be c configured to
+         * do BCP47 normalization (e.g. "en-GB"), so we can't guarantee
+         * lowercase language tags are preserved.
+         */
+        // assertEquals("en-gb", lower.getLanguageTag().get());
+
+        /*
+         * NOTE: the RDF framework is free to lowercase the language tag or
+         * leave it as-is, so we can't assume:
+         */
+        // assertEquals("en-gb", upper.getLanguageTag().get());
+        // assertEquals("en-gb", mixed.getLanguageTag().get());
+
+        /* ..unless we do a case-insensitive comparison: */
+        assertEquals("en-gb",
+                lower.getLanguageTag().get().toLowerCase(Locale.ROOT));
         assertEquals("en-gb",
                 upper.getLanguageTag().get().toLowerCase(Locale.ROOT));
         assertEquals("en-gb",
                 mixed.getLanguageTag().get().toLowerCase(Locale.ROOT));
-                
-        // However these should all be true
+
+        // However these should all be true using .equals
         assertEquals(lower, lower);
-        assertEquals(lower, upper);
-        assertEquals(lower, mixed);
-        assertEquals(upper, lower);
+        assertEqualsBothWays(lower, upper);
+        assertEqualsBothWays(lower, mixed);
         assertEquals(upper, upper);
-        assertEquals(upper, mixed);
-        assertEquals(mixed, lower);
-        assertEquals(mixed, upper);
+        assertEqualsBothWays(upper, mixed);
         assertEquals(mixed, mixed);
-
-        // And then by java.lang.Object contract, also the hashcode:
-        assertEquals(lower.hashCode(), upper.hashCode());
-        assertEquals(lower.hashCode(), mixed.hashCode());        
+        // Note that assertEqualsBothWays also checks
+        // that .hashCode() matches
     }
 
     @Test
     public void testCreateLiteralLangCaseInsensitiveOther() throws Exception {
         // COMMONSRDF-51: Ensure the Literal is using case insensitive
-        // comparison against more 'liberal' literal implementations
+        // comparison against any literal implementation
         // which may not have done .toLowerString() in their constructor
-        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
-        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
-        
+
         Literal otherLiteral = new Literal() {
             @Override
             public String ntriplesString() {
@@ -266,6 +278,8 @@ public abstract class AbstractRDFTest {
             }
         };
 
+        // NOTE: Our fake Literal can't do .equals() or .hashCode(),
+        // so don't check the wrong way around!
         assertEquals(mixed, otherLiteral);
         assertEquals(lower, otherLiteral);
         assertEquals(upper, otherLiteral);
@@ -273,36 +287,56 @@ public abstract class AbstractRDFTest {
 
     @Test
     public void testCreateLiteralLangCaseInsensitiveInTurkish() throws Exception {
-        // COMMONSRDF-51: Special test for Turkish issue where 
+        // COMMONSRDF-51: Special test for Turkish issue where
         // "i".toLowerCase() != "i"
         // See also:
         // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
         Locale defaultLocale = Locale.getDefault();
-        try { 
+        try {
+            Locale.setDefault(Locale.ROOT);
+            final Literal lowerROOT = factory.createLiteral("moi", "fi");
+            final Literal upperROOT = factory.createLiteral("moi", "FI");
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
+
             Locale turkish = Locale.forLanguageTag("TR");
             Locale.setDefault(turkish);
+            // If the below assertion fails, then the Turkish
+            // locale no longer have this peculiarity that
+            // we want to test.
             Assume.assumeFalse("FI".toLowerCase().equals("fi"));
 
-            final Literal lower = factory.createLiteral("moi", "fi"); 
-            final Literal upper = factory.createLiteral("moi", "FI"); 
+            final Literal lower = factory.createLiteral("moi", "fi");
+            final Literal upper = factory.createLiteral("moi", "FI");
             final Literal mixed = factory.createLiteral("moi", "fI");
 
             assertEquals(lower, lower);
-            assertEquals(lower, upper);
-            assertEquals(lower, mixed);
-            assertEquals(upper, lower);
+            assertEqualsBothWays(lower, upper);
+            assertEqualsBothWays(lower, mixed);
+
             assertEquals(upper, upper);
-            assertEquals(upper, mixed);
-            assertEquals(mixed, lower);
-            assertEquals(mixed, upper);
+            assertEqualsBothWays(upper, mixed);
+
             assertEquals(mixed, mixed);
-            assertEquals(lower.hashCode(), upper.hashCode());
-            assertEquals(lower.hashCode(), mixed.hashCode());        
+
+            // And our instance created previously in ROOT locale
+            // should still be equal to the instance created in TR locale
+            // (e.g. test constructor is not doing a naive .toLowerCase())
+            assertEqualsBothWays(lower, lowerROOT);
+            assertEqualsBothWays(upper, lowerROOT);
+            assertEqualsBothWays(mixed, lowerROOT);
+
+            assertEqualsBothWays(lower, upperROOT);
+            assertEqualsBothWays(upper, upperROOT);
+            assertEqualsBothWays(mixed, upperROOT);
+
+            assertEqualsBothWays(lower, mixedROOT);
+            assertEqualsBothWays(upper, mixedROOT);
+            assertEqualsBothWays(mixed, mixedROOT);
         } finally {
             Locale.setDefault(defaultLocale);
         }
     }
-    
+
     @Test
     public void testCreateLiteralString() throws Exception {
         final Literal example = factory.createLiteral("Example",


[05/16] commons-rdf git commit: COMMONSRDF-51: Check langtag equals also graph.add/contains/remove

Posted by st...@apache.org.
COMMONSRDF-51: Check langtag equals also graph.add/contains/remove


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/50dc8861
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/50dc8861
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/50dc8861

Branch: refs/heads/master
Commit: 50dc8861f3a0824168c8484d1c7a3535e49de57c
Parents: 7046ea1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:37:19 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:37:19 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractGraphTest.java      | 105 ++++++++++++++++++-
 1 file changed, 100 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/50dc8861/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 7e32676..eba8888 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
@@ -46,7 +47,7 @@ import org.junit.Test;
  * <p>
  * This test uses try-with-resources blocks for calls to {@link Graph#stream()}
  * and {@link Graph#iterate()}.
- * 
+ *
  * @see Graph
  * @see RDF
  */
@@ -68,10 +69,10 @@ public abstract class AbstractGraphTest {
     protected Triple bobNameTriple;
 
     /**
-     * 
+     *
      * This method must be overridden by the implementing test to provide a
      * factory for the test to create {@link Graph}, {@link IRI} etc.
-     * 
+     *
      * @return {@link RDF} instance to be tested.
      */
     protected abstract RDF createFactory();
@@ -385,6 +386,100 @@ public abstract class AbstractGraphTest {
         }
     }
 
+    @Test
+    public void containsLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        final Graph graph = factory.createGraph();
+        graph.add(example1, greeting, upper);
+
+        assertTrue(graph.contains(factory.createTriple(example1, greeting, upper)));
+        assertTrue(graph.contains(factory.createTriple(example1, greeting, lower)));
+        assertTrue(graph.contains(factory.createTriple(example1, greeting, mixed)));
+
+        // or as patterns
+        assertTrue(graph.contains(null, null, upper));
+        assertTrue(graph.contains(null, null, lower));
+        assertTrue(graph.contains(null, null, mixed));
+
+        // Remove should also honour any case
+        graph.remove(example1, greeting, mixed);
+        assertFalse(graph.contains(null, greeting, null));
+    }
+
+    @Test
+    public void containsLanguageTagsCaseInsensitiveTurkish() {
+        // COMMONSRDF-51: Special test for Turkish issue where
+        // "i".toLowerCase() != "i"
+        // See also:
+        // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+
+        // This is similar to the test in AbstractRDFTest, but on a graph
+        Locale defaultLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.ROOT);
+            final Literal lowerROOT = factory.createLiteral("moi", "fi");
+            final Literal upperROOT = factory.createLiteral("moi", "FI");
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
+            final Graph g = factory.createGraph();
+            final IRI exampleROOT = factory.createIRI("http://example.com/s1");
+            final IRI greeting = factory.createIRI("http://example.com/greeting");
+            g.add(exampleROOT, greeting, mixedROOT);
+
+            Locale turkish = Locale.forLanguageTag("TR");
+            Locale.setDefault(turkish);
+            // If the below assertion fails, then the Turkish
+            // locale no longer have this peculiarity that
+            // we want to test.
+            Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+            // Below is pretty much the same as in
+            // containsLanguageTagsCaseInsensitive()
+            final Literal lower = factory.createLiteral("moi", "fi");
+            final Literal upper = factory.createLiteral("moi", "FI");
+            final Literal mixed = factory.createLiteral("moi", "fI");
+
+            final IRI exampleTR = factory.createIRI("http://example.com/s2");
+            g.add(exampleTR, greeting, upper);
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, upper)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, upperROOT)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, lower)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, lowerROOT)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, mixed)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, mixedROOT)));
+            assertTrue(g.contains(exampleTR, null, upper));
+            assertTrue(g.contains(exampleTR, null, upperROOT));
+            assertTrue(g.contains(exampleTR, null, lower));
+            assertTrue(g.contains(exampleTR, null, lowerROOT));
+            assertTrue(g.contains(exampleTR, null, mixed));
+            assertTrue(g.contains(exampleTR, null, mixedROOT));
+            g.remove(exampleTR, greeting, mixed);
+            assertFalse(g.contains(exampleTR, null, null));
+
+            // What about the triple we added while in ROOT locale?
+            assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, upper)));
+            assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, lower)));
+            assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, mixed)));
+            assertTrue(g.contains(exampleROOT, null, upper));
+            assertTrue(g.contains(exampleROOT, null, lower));
+            assertTrue(g.contains(exampleROOT, null, mixed));
+            g.remove(exampleROOT, greeting, mixed);
+            assertFalse(g.contains(exampleROOT, null, null));
+
+
+        } finally {
+            Locale.setDefault(defaultLocale);
+        }
+
+    }
+
     private void notEquals(final BlankNodeOrIRI node1, final BlankNodeOrIRI node2) {
         assertFalse(node1.equals(node2));
         // in which case we should be able to assume
@@ -439,7 +534,7 @@ public abstract class AbstractGraphTest {
      * Create a different implementation of BlankNode to be tested with
      * graph.add(a,b,c); (the implementation may or may not then choose to
      * translate such to its own instances)
-     * 
+     *
      * @param name
      * @return
      */
@@ -493,7 +588,7 @@ public abstract class AbstractGraphTest {
      * An attempt to use the Java 8 streams to look up a more complicated query.
      * <p>
      * FYI, the equivalent SPARQL version (untested):
-     * 
+     *
      * <pre>
      *     SELECT ?orgName WHERE {
      *             ?org foaf:name ?orgName .


[07/16] commons-rdf git commit: COMMONSRDF-51: Use patterns for remove/contains

Posted by st...@apache.org.
COMMONSRDF-51: Use patterns for remove/contains


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/c729469a
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/c729469a
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/c729469a

Branch: refs/heads/master
Commit: c729469aed46349b927d4038e67ff4fb5fa8ebd2
Parents: 448c20b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:50:23 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:50:23 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/AbstractGraphTest.java    | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/c729469a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index eba8888..e18ca08 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -410,7 +410,8 @@ public abstract class AbstractGraphTest {
         assertTrue(graph.contains(null, null, mixed));
 
         // Remove should also honour any case
-        graph.remove(example1, greeting, mixed);
+        graph.remove(example1, null, mixed);
+        // no more greetings of any kind
         assertFalse(graph.contains(null, greeting, null));
     }
 
@@ -460,7 +461,8 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleTR, null, lowerROOT));
             assertTrue(g.contains(exampleTR, null, mixed));
             assertTrue(g.contains(exampleTR, null, mixedROOT));
-            g.remove(exampleTR, greeting, mixed);
+            g.remove(exampleTR, null, mixed);
+            // No more greetings for exampleTR
             assertFalse(g.contains(exampleTR, null, null));
 
             // What about the triple we added while in ROOT locale?
@@ -470,8 +472,9 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleROOT, null, upper));
             assertTrue(g.contains(exampleROOT, null, lower));
             assertTrue(g.contains(exampleROOT, null, mixed));
-            g.remove(exampleROOT, greeting, mixed);
-            assertFalse(g.contains(exampleROOT, null, null));
+            g.remove(exampleROOT, null, mixed);
+            // No more greetings of any kind
+            assertFalse(g.contains(null, null, null));
 
 
         } finally {


[16/16] commons-rdf git commit: COMMONSRDF-51: compare language tags in lower case

Posted by st...@apache.org.
COMMONSRDF-51: compare language tags in lower case


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/4c69d42f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/4c69d42f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/4c69d42f

Branch: refs/heads/master
Commit: 4c69d42f40028a2faa613be04ff0d8a0d20b6ec3
Parents: 6d4e333 202a8c6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:43:18 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:43:18 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/Literal.java     |  27 +++-
 .../commons/rdf/api/AbstractDatasetTest.java    | 139 ++++++++++++++++
 .../commons/rdf/api/AbstractGraphTest.java      | 153 +++++++++++++++++-
 .../apache/commons/rdf/api/AbstractRDFTest.java | 158 ++++++++++++++++++-
 .../commons/rdf/jena/impl/JenaDatasetImpl.java  |   7 +-
 .../commons/rdf/jena/impl/JenaGraphImpl.java    |  18 ++-
 .../commons/rdf/jena/impl/JenaLiteralImpl.java  |  13 +-
 .../commons/rdf/jsonldjava/JsonLdLiteral.java   |  13 +-
 .../commons/rdf/rdf4j/impl/LiteralImpl.java     |  15 +-
 .../apache/commons/rdf/simple/LiteralImpl.java  |   8 +-
 10 files changed, 515 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/4c69d42f/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------


[13/16] commons-rdf git commit: COMMONSRDF-51: Make sure graph.remove(Triple) ignores langtag case

Posted by st...@apache.org.
COMMONSRDF-51: Make sure graph.remove(Triple) ignores langtag case

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3cf27116
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3cf27116
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3cf27116

Branch: refs/heads/master
Commit: 3cf271162416df98e63b4e40eb08007a3a754f5a
Parents: 0470e7c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:33:35 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:33:35 2017 +0000

----------------------------------------------------------------------
 .../test/java/org/apache/commons/rdf/api/AbstractGraphTest.java | 5 ++++-
 .../java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java    | 1 -
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3cf27116/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 8245b5d..3020704 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -399,7 +399,8 @@ public abstract class AbstractGraphTest {
 
         final Graph graph = factory.createGraph();
         graph.add(example1, greeting, upper);
-
+        
+        // any kind of Triple should match
         assertTrue(graph.contains(factory.createTriple(example1, greeting, upper)));
         assertTrue(graph.contains(factory.createTriple(example1, greeting, lower)));
         assertTrue(graph.contains(factory.createTriple(example1, greeting, mixed)));
@@ -491,8 +492,10 @@ public abstract class AbstractGraphTest {
         graph.add(example1, greeting, lower);
         graph.remove(example1, null, upper);
 
+        // Check with Triple
         graph.add(factory.createTriple(example1, greeting, mixed));
         graph.remove(factory.createTriple(example1, greeting, upper));
+        assertFalse(graph.contains(null, greeting, null));
     }
 
     private static Optional<? extends Triple> closableFindAny(Stream<? extends Triple> stream) {

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3cf27116/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
index 76e92f7..55256e2 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
@@ -29,7 +29,6 @@ import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.jena.JenaGraph;
 import org.apache.commons.rdf.jena.JenaRDF;
-import org.apache.commons.rdf.jena.JenaTriple;
 import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.graph.Node;
 import org.apache.jena.rdf.model.Model;


[14/16] commons-rdf git commit: COMMONSRDF-51: Avoid deleting directly from Quad

Posted by st...@apache.org.
COMMONSRDF-51: Avoid deleting directly from Quad

.. so that langtags are compared case insensitrive


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f8745ef5
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f8745ef5
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f8745ef5

Branch: refs/heads/master
Commit: f8745ef5f1e8cb2b392f5dc88938a65980a72170
Parents: 3cf2711
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:38:11 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:38:11 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java     | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f8745ef5/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
index 9e4eac2..a5f4e36 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
@@ -117,7 +117,12 @@ class JenaDatasetImpl implements JenaDataset {
 
     @Override
     public void remove(final Quad quad) {
-        graph.delete(factory.asJenaQuad(quad));
+        graph.deleteAny(
+                toJenaPattern(quad.getGraphName()),
+                toJenaPattern(quad.getSubject()),
+                toJenaPattern(quad.getPredicate()),
+                toJenaPattern(quad.getObject()));
+//        graph.delete(factory.asJenaQuad(quad));
     }
 
     @Override


[03/16] commons-rdf git commit: Merge remote-tracking branch 'origin/master' into COMMONSRDF-51-langtag-lcase

Posted by st...@apache.org.
Merge remote-tracking branch 'origin/master' into COMMONSRDF-51-langtag-lcase


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/25cc1f18
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/25cc1f18
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/25cc1f18

Branch: refs/heads/master
Commit: 25cc1f1839c9d99adbaf92ab740d482eaf0f4606
Parents: 6f11372 42363cf
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 10:58:51 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 10:58:51 2017 +0000

----------------------------------------------------------------------
 jena/pom.xml        |  19 +++-
 jsonld-java/pom.xml |  19 +++-
 pom.xml             | 271 +++++++++++++++++++++++------------------------
 rdf4j/pom.xml       |   7 +-
 simple/pom.xml      |  19 +++-
 5 files changed, 180 insertions(+), 155 deletions(-)
----------------------------------------------------------------------



[12/16] commons-rdf git commit: COMMONSRDF-51 Added langtag case tests for dataset

Posted by st...@apache.org.
COMMONSRDF-51 Added langtag case tests for dataset

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/0470e7c0
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/0470e7c0
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/0470e7c0

Branch: refs/heads/master
Commit: 0470e7c06ab9b8de927c185caf7d56f3f11fc51b
Parents: 6b07abf
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:32:55 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:32:55 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractDatasetTest.java    | 139 +++++++++++++++++++
 1 file changed, 139 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/0470e7c0/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
index 505994f..9e2e192 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -542,7 +543,145 @@ public abstract class AbstractDatasetTest {
     }
     
 
+    @Test
+    public void containsLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        
+        dataset.add(null, example1, greeting, upper);
+        
+        // any kind of Triple should match
+        assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, upper)));
+        assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, lower)));
+        assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, mixed)));
+
+        // or as patterns
+        assertTrue(dataset.contains(null, null, null, upper));
+        assertTrue(dataset.contains(null, null, null, lower));
+        assertTrue(dataset.contains(null, null, null, mixed));
+    }
+
+    @Test
+    public void containsLanguageTagsCaseInsensitiveTurkish() {
+        // COMMONSRDF-51: Special test for Turkish issue where
+        // "i".toLowerCase() != "i"
+        // See also:
+        // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+
+        // This is similar to the test in AbstractRDFTest, but on a graph
+        Locale defaultLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.ROOT);
+            final Literal lowerROOT = factory.createLiteral("moi", "fi");
+            final Literal upperROOT = factory.createLiteral("moi", "FI");
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
+            final IRI exampleROOT = factory.createIRI("http://example.com/s1");
+            final IRI greeting = factory.createIRI("http://example.com/greeting");
+            dataset.add(null, exampleROOT, greeting, mixedROOT);
+
+            Locale turkish = Locale.forLanguageTag("TR");
+            Locale.setDefault(turkish);
+            // If the below assertion fails, then the Turkish
+            // locale no longer have this peculiarity that
+            // we want to test.
+            Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+            // Below is pretty much the same as in
+            // containsLanguageTagsCaseInsensitive()
+            final Literal lower = factory.createLiteral("moi", "fi");
+            final Literal upper = factory.createLiteral("moi", "FI");
+            final Literal mixed = factory.createLiteral("moi", "fI");
+
+            final IRI exampleTR = factory.createIRI("http://example.com/s2");
+            dataset.add(null, exampleTR, greeting, upper);
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, upper)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, upperROOT)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, lower)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, lowerROOT)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, mixed)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, mixedROOT)));
+            assertTrue(dataset.contains(null, exampleTR, null, upper));
+            assertTrue(dataset.contains(null, exampleTR, null, upperROOT));
+            assertTrue(dataset.contains(null, exampleTR, null, lower));
+            assertTrue(dataset.contains(null, exampleTR, null, lowerROOT));
+            assertTrue(dataset.contains(null, exampleTR, null, mixed));
+            assertTrue(dataset.contains(null, exampleTR, null, mixedROOT));
+
+            // What about the triple we added while in ROOT locale?
+            assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, upper)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, lower)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, mixed)));
+            assertTrue(dataset.contains(null, exampleROOT, null, upper));
+            assertTrue(dataset.contains(null, exampleROOT, null, lower));
+            assertTrue(dataset.contains(null, exampleROOT, null, mixed));
+        } finally {
+            Locale.setDefault(defaultLocale);
+        }
+    }
+    
+
+    @Test
+    public void removeLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        dataset.add(null, example1, greeting, upper);
+
+        // Remove should also honour any case
+        dataset.remove(null, example1, null, mixed);
+        assertFalse(dataset.contains(null, null, greeting, null));
+        
+        dataset.add(null, example1, greeting, lower);
+        dataset.remove(null, example1, null, upper);
+
+        // Check with Triple
+        dataset.add(factory.createQuad(null, example1, greeting, mixed));
+        dataset.remove(factory.createQuad(null, example1, greeting, upper));
+        assertFalse(dataset.contains(null, null, greeting, null));
+    }
+
+    private static Optional<? extends Quad> closableFindAny(Stream<? extends Quad> stream) {
+        try (Stream<? extends Quad> s = stream) {
+            return s.findAny();
+        }
+    }
     
+    @Test
+    public void streamLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        dataset.add(null, example1, greeting, upper);
+
+        // or as patterns
+        assertTrue(closableFindAny(dataset.stream(null, null, null, upper)).isPresent());
+        assertTrue(closableFindAny(dataset.stream(null, null, null, lower)).isPresent());
+        assertTrue(closableFindAny(dataset.stream(null, null, null, mixed)).isPresent());
+        
+        // Check the quad returned equal a new quad
+        Quad q = closableFindAny(dataset.stream(null, null, null, lower)).get();
+        assertEquals(q, factory.createQuad(null, example1, greeting, mixed));
+    }
+
     /**
      * An attempt to use the Java 8 streams to look up a more complicated query.
      * <p>


[08/16] commons-rdf git commit: commented out debug statement

Posted by st...@apache.org.
commented out debug statement


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/4bc08f6e
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/4bc08f6e
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/4bc08f6e

Branch: refs/heads/master
Commit: 4bc08f6e31cec45179b8c99b9905a39ddeaac746
Parents: c729469
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:57:45 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:57:45 2017 +0000

----------------------------------------------------------------------
 .../test/java/org/apache/commons/rdf/api/AbstractGraphTest.java    | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/4bc08f6e/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index e18ca08..89e91f2 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -411,6 +411,8 @@ public abstract class AbstractGraphTest {
 
         // Remove should also honour any case
         graph.remove(example1, null, mixed);
+//        Triple t = graph.stream().findAny().get();
+//        System.out.println(t);
         // no more greetings of any kind
         assertFalse(graph.contains(null, greeting, null));
     }


[11/16] commons-rdf git commit: Test removal of Triple as well

Posted by st...@apache.org.
Test removal of Triple as well

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6b07abf4
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6b07abf4
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6b07abf4

Branch: refs/heads/master
Commit: 6b07abf49be486d6985de3c9fe8425adaabc1c38
Parents: d5964a1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:24:13 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:24:13 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/jena/impl/JenaGraphImpl.java     | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/6b07abf4/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
index e3805b6..76e92f7 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
@@ -24,10 +24,12 @@ import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.Literal;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.jena.JenaGraph;
 import org.apache.commons.rdf.jena.JenaRDF;
+import org.apache.commons.rdf.jena.JenaTriple;
 import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.graph.Node;
 import org.apache.jena.rdf.model.Model;
@@ -93,8 +95,8 @@ class JenaGraphImpl implements JenaGraph {
 
     @Override
     public void remove(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
-        graph.delete(org.apache.jena.graph.Triple.create(toJenaPattern(subject), toJenaPattern(predicate),
-                toJenaPattern(object)));
+        graph.remove(toJenaPattern(subject), toJenaPattern(predicate),
+                toJenaPattern(object));
     }
 
     private Node toJenaPattern(final RDFTerm pattern) {
@@ -106,7 +108,18 @@ class JenaGraphImpl implements JenaGraph {
 
     @Override
     public void remove(final Triple triple) {
-        graph.delete(factory.asJenaTriple(triple));
+        if ((triple.getObject() instanceof Literal) && 
+                ((Literal) triple.getObject()).getLanguageTag().isPresent()) {
+            // COMMONSRDF-51: graph.delete(Triple) would be too restrictive
+            // as it won't delete triples with different lang tag - so 
+            // we'll need to use the pattern matching graph.remove instead()
+            graph.remove(
+                    factory.asJenaNode(triple.getSubject()), 
+                    factory.asJenaNode(triple.getPredicate()),
+                    factory.asJenaNode(triple.getObject()));
+        } else {
+            graph.delete(factory.asJenaTriple(triple));
+        }
     }
 
     @Override


[02/16] commons-rdf git commit: COMMONSRDF-51: annotated missing test

Posted by st...@apache.org.
COMMONSRDF-51: annotated missing test


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6f11372b
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6f11372b
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6f11372b

Branch: refs/heads/master
Commit: 6f11372bb98dbbbb1f9e4ca00921725080cac341
Parents: 3064d21
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 08:34:11 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 08:34:11 2017 +0100

----------------------------------------------------------------------
 api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/6f11372b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 5efcee1..52686d7 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -194,6 +194,7 @@ public abstract class AbstractRDFTest {
         assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
     }
 
+    @Test
     public void testCreateLiteralLangCaseInsensitive() throws Exception {
         // COMMONSRDF-51: Literal langtag may not be in lowercase, but
         // must be COMPARED (aka .equals and .hashCode()) in lowercase
@@ -415,4 +416,5 @@ public abstract class AbstractRDFTest {
         final Triple triple = factory.createTriple(iri, iri, iri);
         assertEquals(Objects.hash(iri, iri, iri), triple.hashCode());
     }
+
 }


[06/16] commons-rdf git commit: Ensure we don't create @en-gb first with the factory (in case it caches)

Posted by st...@apache.org.
Ensure we don't create @en-gb first with the factory (in case it caches)


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/448c20b1
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/448c20b1
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/448c20b1

Branch: refs/heads/master
Commit: 448c20b1fe9241ffcd3955c235db0c35d24bb940
Parents: 50dc886
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:50:05 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:50:05 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/AbstractRDFTest.java     | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/448c20b1/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 0032659..bb4dc5b 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -209,8 +209,8 @@ public abstract class AbstractRDFTest {
          * COMPARED (aka .equals and .hashCode()) in lowercase as the language
          * space is lower case.
          */
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
 
         /*
@@ -251,14 +251,14 @@ public abstract class AbstractRDFTest {
         // COMMONSRDF-51: Ensure the Literal is using case insensitive
         // comparison against any literal implementation
         // which may not have done .toLowerString() in their constructor
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
 
         Literal otherLiteral = new Literal() {
             @Override
             public String ntriplesString() {
-                return "Hello@en-GB";
+                return "Hello@eN-Gb";
             }
             @Override
             public String getLexicalForm() {
@@ -266,7 +266,7 @@ public abstract class AbstractRDFTest {
             }
             @Override
             public Optional<String> getLanguageTag() {
-                return Optional.of("en-GB");
+                return Optional.of("eN-Gb");
             }
             @Override
             public IRI getDatatype() {
@@ -294,9 +294,9 @@ public abstract class AbstractRDFTest {
         Locale defaultLocale = Locale.getDefault();
         try {
             Locale.setDefault(Locale.ROOT);
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
             final Literal lowerROOT = factory.createLiteral("moi", "fi");
             final Literal upperROOT = factory.createLiteral("moi", "FI");
-            final Literal mixedROOT = factory.createLiteral("moi", "fI");
 
             Locale turkish = Locale.forLanguageTag("TR");
             Locale.setDefault(turkish);
@@ -305,9 +305,9 @@ public abstract class AbstractRDFTest {
             // we want to test.
             Assume.assumeFalse("FI".toLowerCase().equals("fi"));
 
+            final Literal mixed = factory.createLiteral("moi", "fI");
             final Literal lower = factory.createLiteral("moi", "fi");
             final Literal upper = factory.createLiteral("moi", "FI");
-            final Literal mixed = factory.createLiteral("moi", "fI");
 
             assertEquals(lower, lower);
             assertEqualsBothWays(lower, upper);


[10/16] commons-rdf git commit: COMMONSRDF-51: Ensure RDF4J stream closes in test

Posted by st...@apache.org.
COMMONSRDF-51: Ensure RDF4J stream closes in test


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/d5964a19
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/d5964a19
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/d5964a19

Branch: refs/heads/master
Commit: d5964a19b274d60a0301680961dce087641623ce
Parents: f5766fe
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 12:10:32 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 12:10:32 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/AbstractGraphTest.java | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/d5964a19/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 4856ed4..8245b5d 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -495,6 +495,12 @@ public abstract class AbstractGraphTest {
         graph.remove(factory.createTriple(example1, greeting, upper));
     }
 
+    private static Optional<? extends Triple> closableFindAny(Stream<? extends Triple> stream) {
+        try (Stream<? extends Triple> s = stream) {
+            return s.findAny();
+        }
+    }
+    
     @Test
     public void streamLanguageTagsCaseInsensitive() {
         // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
@@ -510,12 +516,12 @@ public abstract class AbstractGraphTest {
         graph.add(example1, greeting, upper);
 
         // or as patterns
-        assertTrue(graph.stream(null, null, upper).findAny().isPresent());
-        assertTrue(graph.stream(null, null, lower).findAny().isPresent());
-        assertTrue(graph.stream(null, null, mixed).findAny().isPresent());
+        assertTrue(closableFindAny(graph.stream(null, null, upper)).isPresent());
+        assertTrue(closableFindAny(graph.stream(null, null, lower)).isPresent());
+        assertTrue(closableFindAny(graph.stream(null, null, mixed)).isPresent());
         
         // Check the triples returned equal a new triple
-        Triple t = graph.stream(null, null, lower).findAny().get();
+        Triple t = closableFindAny(graph.stream(null, null, lower)).get();
         assertEquals(t, factory.createTriple(example1, greeting, mixed));
     }