Return-Path: X-Original-To: apmail-commonsrdf-commits-archive@minotaur.apache.org Delivered-To: apmail-commonsrdf-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BD07119A6B for ; Fri, 8 Apr 2016 15:22:26 +0000 (UTC) Received: (qmail 90274 invoked by uid 500); 8 Apr 2016 15:22:26 -0000 Delivered-To: apmail-commonsrdf-commits-archive@commonsrdf.apache.org Received: (qmail 90245 invoked by uid 500); 8 Apr 2016 15:22:26 -0000 Mailing-List: contact commits-help@commonsrdf.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commonsrdf.incubator.apache.org Delivered-To: mailing list commits@commonsrdf.incubator.apache.org Received: (qmail 90236 invoked by uid 99); 8 Apr 2016 15:22:26 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Apr 2016 15:22:26 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 3CC35C021C for ; Fri, 8 Apr 2016 15:22:26 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -3.221 X-Spam-Level: X-Spam-Status: No, score=-3.221 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id 17nYRYH6bwU0 for ; Fri, 8 Apr 2016 15:22:24 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with SMTP id 2896F5F396 for ; Fri, 8 Apr 2016 15:22:22 +0000 (UTC) Received: (qmail 89952 invoked by uid 99); 8 Apr 2016 15:22:22 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Apr 2016 15:22:22 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CF8C6DFBED; Fri, 8 Apr 2016 15:22:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: stain@apache.org To: commits@commonsrdf.incubator.apache.org Date: Fri, 08 Apr 2016 15:22:21 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/3] incubator-commonsrdf git commit: Added SimpleRDFTerm marker interface Repository: incubator-commonsrdf Updated Branches: refs/heads/quad 220f75f19 -> 683a2bbdf Added SimpleRDFTerm marker interface Now internallyMap() will fail early on mapping any RDFTerm objects which are not IRI, BlankNode or Literal (before they would have been added 'as-is') This also fixes a bug in that Graph would have remapped any of the Types instances to an IRIImpl. I added SimpleRDFTerm interface as a package-protected interface within SimpleRDFTermFactory - thus it should not be easy to create any additional SimpleRDFTerm subclasses. Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/0a148cba Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/0a148cba Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/0a148cba Branch: refs/heads/quad Commit: 0a148cbab0c3c35aec9bd7dbd2b61029066d19a4 Parents: 73994db Author: Stian Soiland-Reyes Authored: Fri Apr 8 16:18:26 2016 +0100 Committer: Stian Soiland-Reyes Committed: Fri Apr 8 16:18:26 2016 +0100 ---------------------------------------------------------------------- .../apache/commons/rdf/simple/BlankNodeImpl.java | 3 ++- .../org/apache/commons/rdf/simple/GraphImpl.java | 18 +++++++++++------- .../org/apache/commons/rdf/simple/IRIImpl.java | 2 +- .../apache/commons/rdf/simple/LiteralImpl.java | 2 +- .../commons/rdf/simple/SimpleRDFTermFactory.java | 12 ++++++++++++ .../java/org/apache/commons/rdf/simple/Types.java | 2 +- 6 files changed, 28 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a148cba/simple/src/main/java/org/apache/commons/rdf/simple/BlankNodeImpl.java ---------------------------------------------------------------------- diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/BlankNodeImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/BlankNodeImpl.java index 6e9e217..81c6848 100644 --- a/simple/src/main/java/org/apache/commons/rdf/simple/BlankNodeImpl.java +++ b/simple/src/main/java/org/apache/commons/rdf/simple/BlankNodeImpl.java @@ -23,11 +23,12 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.rdf.api.BlankNode; +import org.apache.commons.rdf.simple.SimpleRDFTermFactory.SimpleRDFTerm; /** * A simple implementation of BlankNode. */ -final class BlankNodeImpl implements BlankNode { +final class BlankNodeImpl implements BlankNode, SimpleRDFTerm { private static final UUID SALT = UUID.randomUUID(); private static final AtomicLong COUNTER = new AtomicLong(); http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a148cba/simple/src/main/java/org/apache/commons/rdf/simple/GraphImpl.java ---------------------------------------------------------------------- diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/GraphImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/GraphImpl.java index 884f273..024da21 100644 --- a/simple/src/main/java/org/apache/commons/rdf/simple/GraphImpl.java +++ b/simple/src/main/java/org/apache/commons/rdf/simple/GraphImpl.java @@ -18,6 +18,7 @@ package org.apache.commons.rdf.simple; import org.apache.commons.rdf.api.*; +import org.apache.commons.rdf.simple.SimpleRDFTermFactory.SimpleRDFTerm; import java.util.HashSet; import java.util.Objects; @@ -72,18 +73,23 @@ final class GraphImpl implements Graph { } private RDFTerm internallyMap(T object) { - if (object instanceof BlankNode && !(object instanceof BlankNodeImpl)) { + if (object == null || object instanceof SimpleRDFTerm) { + // No need to re-map our own objects. + // We support null as internallyMap() is also used by the filters, and the + // factory constructors later do null checks + return object; + } + if (object instanceof BlankNode) { BlankNode blankNode = (BlankNode) object; // This guarantees that adding the same BlankNode multiple times to // this graph will generate a local object that is mapped to an // equivalent object, based on the code in the package private // BlankNodeImpl class return factory.createBlankNode(blankNode.uniqueReference()); - } else if (object instanceof IRI && !(object instanceof IRIImpl)) { + } else if (object instanceof IRI) { IRI iri = (IRI) object; return factory.createIRI(iri.getIRIString()); - } else if (object instanceof Literal - && !(object instanceof LiteralImpl)) { + } else if (object instanceof Literal) { Literal literal = (Literal) object; if (literal.getLanguageTag().isPresent()) { return factory.createLiteral(literal.getLexicalForm(), literal @@ -93,9 +99,7 @@ final class GraphImpl implements Graph { (IRI) internallyMap(literal.getDatatype())); } } else { - // The object is a local implementation, and is not a BlankNode, so - // can be returned directly - return object; + throw new IllegalArgumentException("RDFTerm was neither a BlankNode, IRI nor Literal: " + object); } } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a148cba/simple/src/main/java/org/apache/commons/rdf/simple/IRIImpl.java ---------------------------------------------------------------------- diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/IRIImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/IRIImpl.java index 0f6b065..fdec0ac 100644 --- a/simple/src/main/java/org/apache/commons/rdf/simple/IRIImpl.java +++ b/simple/src/main/java/org/apache/commons/rdf/simple/IRIImpl.java @@ -24,7 +24,7 @@ import java.net.URI; /** * A simple implementation of IRI. */ -final class IRIImpl implements IRI { +final class IRIImpl implements IRI, SimpleRDFTermFactory.SimpleRDFTerm { private final String iri; http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a148cba/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 7a7ed96..3d6874a 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 @@ -28,7 +28,7 @@ import org.apache.commons.rdf.api.Literal; /** * A simple implementation of Literal. */ -final class LiteralImpl implements Literal { +final class LiteralImpl implements Literal, SimpleRDFTermFactory.SimpleRDFTerm { private static final String QUOTE = "\""; http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a148cba/simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDFTermFactory.java ---------------------------------------------------------------------- diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDFTermFactory.java b/simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDFTermFactory.java index 97ad340..36694bf 100644 --- a/simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDFTermFactory.java +++ b/simple/src/main/java/org/apache/commons/rdf/simple/SimpleRDFTermFactory.java @@ -37,6 +37,18 @@ import org.apache.commons.rdf.api.Triple; */ public class SimpleRDFTermFactory implements RDFTermFactory { + /** + * Marker interface to say that this RDFTerm is part of the + * Simple implementation. Used by {@link GraphImpl} to avoid + * double remapping. + *

+ * This method is package protected to avoid any third-party + * subclasses. + * + */ + static interface SimpleRDFTerm extends RDFTerm { + } + /** Unique salt per instance, for {@link #createBlankNode(String)} */ private final UUID SALT = UUID.randomUUID(); http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0a148cba/simple/src/main/java/org/apache/commons/rdf/simple/Types.java ---------------------------------------------------------------------- diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/Types.java b/simple/src/main/java/org/apache/commons/rdf/simple/Types.java index d202b8b..3e3f640 100644 --- a/simple/src/main/java/org/apache/commons/rdf/simple/Types.java +++ b/simple/src/main/java/org/apache/commons/rdf/simple/Types.java @@ -27,7 +27,7 @@ import java.util.Set; /** * Types from the RDF and XML Schema vocabularies. */ -public final class Types implements IRI { +public final class Types implements IRI, SimpleRDFTermFactory.SimpleRDFTerm { /** * http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML