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 2015/12/29 22:23:22 UTC

[01/12] jena git commit: JENA-1107: Rework Tuple

Repository: jena
Updated Branches:
  refs/heads/master 6fbecf1e3 -> d36034820


JENA-1107: Rework Tuple

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/571e9755
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/571e9755
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/571e9755

Branch: refs/heads/master
Commit: 571e97553c9d5ccb29818ed85afb70e4fe0318c2
Parents: c81557a
Author: Andy Seaborne <an...@seaborne.org>
Authored: Mon Dec 28 16:27:01 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Mon Dec 28 16:27:01 2015 +0000

----------------------------------------------------------------------
 .../java/org/apache/jena/atlas/lib/FileOps.java |   7 +-
 .../java/org/apache/jena/atlas/lib/Tuple.java   | 131 ------
 .../org/apache/jena/atlas/lib/tuple/Tuple.java  |  63 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple0.java |  37 ++
 .../org/apache/jena/atlas/lib/tuple/Tuple1.java |  42 ++
 .../org/apache/jena/atlas/lib/tuple/Tuple2.java |  46 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple3.java |  49 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple4.java |  52 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple5.java |  55 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple6.java |  58 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple7.java |  61 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple8.java |  64 +++
 .../apache/jena/atlas/lib/tuple/TupleBase.java  |  73 ++++
 .../jena/atlas/lib/tuple/TupleFactory.java      | 122 ++++++
 .../apache/jena/atlas/lib/tuple/TupleList.java  |  43 ++
 .../apache/jena/atlas/lib/tuple/TupleMap.java   | 404 +++++++++++++++++++
 .../org/apache/jena/atlas/lib/tuple/TupleN.java |  55 +++
 .../jena/atlas/lib/tuple/package-info.java      |  34 ++
 .../java/org/apache/jena/atlas/TC_Atlas.java    |   2 +
 .../org/apache/jena/atlas/lib/TestFileOps.java  |   2 +-
 .../apache/jena/atlas/lib/tuple/TS_Tuple.java   |  32 ++
 .../apache/jena/atlas/lib/tuple/TestTuple.java  | 201 +++++++++
 .../jena/atlas/lib/tuple/TestTupleMap.java      | 186 +++++++++
 23 files changed, 1685 insertions(+), 134 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
index cf2e6ee..8ede725 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
@@ -21,8 +21,11 @@ package org.apache.jena.atlas.lib ;
 import java.io.File ;
 import java.io.IOException ;
 import java.nio.file.Files;
+
 import org.apache.jena.atlas.AtlasException ;
 import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.atlas.logging.Log ;
 
 /** A library of utility operations on files and the filing system */
@@ -146,7 +149,7 @@ public class FileOps {
             basename = basename.substring(0, i) ;
         }
 
-        return Tuple.createTuple(path, basename, ext) ;
+        return TupleFactory.tuple(path, basename, ext) ;
     }
 
     /**
@@ -165,7 +168,7 @@ public class FileOps {
             path = filename.substring(0, j) ;
             fn = filename.substring(j + 1) ;
         }
-        return Tuple.createTuple(path, fn) ;
+        return TupleFactory.tuple(path, fn) ;
     }
 
     /** Return the basename (no path, no extension) */

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
deleted file mode 100644
index ec0e420..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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 org.apache.jena.atlas.lib ;
-
-import java.util.Arrays ;
-import java.util.Iterator ;
-import java.util.List ;
-import java.util.Objects;
-import java.util.function.Function;
-
-import org.apache.jena.atlas.iterator.Iter ;
-
-/** Tuple class - tuples are immutable and must be created initialized */
-public class Tuple<T> implements Iterable<T> {
-    // Interface this?
-    // Classes: TupleImpl, TupleSlice
-    public static <X> Tuple<X> createTuple(@SuppressWarnings("unchecked") X... elements) {
-        X[] els = elements ; // ArrayUtils.copy(elements) ;
-        return create(els) ;
-    }
-
-    /**
-     * Create a tuple from an array of elements. The array is not copied and
-     * should not be modified after this call.
-     */
-    public static <X> Tuple<X> create(X[] elements) {
-        return new Tuple<>(elements) ;
-    }
-
-    // TupleLib??
-    public static <T> Iterator<T> project(final int slot, Iterator<Tuple<T>> iter) {
-        return Iter.map(iter, t -> t.get(slot)) ;
-    }
-
-    public static <T> Iterator<Tuple<T>> prefix(final int prefixLength, Iterator<Tuple<T>> iter) {
-        Function<Tuple<T>, Tuple<T>> sub = t -> {
-                T[] x = ArrayUtils.copy(t.tuple, 0, prefixLength) ;
-                return Tuple.create(x) ;    
-        } ;
-        return Iter.map(iter, sub) ;
-    }
-
-    protected final T[] tuple ;
-
-    protected Tuple(@SuppressWarnings("unchecked") T... tuple) {
-        this.tuple = tuple ;
-    }
-
-    public T get(int idx) {
-        return tuple[idx] ;
-    }
-
-    public int countNotNull() {
-        int x = 0 ;
-        for ( T item : tuple )
-            if ( item != null )
-                x++ ;
-        return x ;
-    }
-
-    public List<T> asList() {
-        return Arrays.asList(tuple) ;
-    }
-
-    public T[] tuple() {
-        return tuple ;
-    }
-
-    public T[] tupleCopy() {
-        return ArrayUtils.copy(tuple) ;
-    }
-
-    @Override
-    public Iterator<T> iterator() {
-        return Arrays.asList(tuple).iterator() ;
-    }
-
-    public int size() {
-        return tuple.length ;
-    }
-
-    @Override
-    public int hashCode() {
-        int x = 99 ;
-        for ( T n : tuple ) {
-            if ( n != null )
-                x = x << 1 ^ n.hashCode() ;
-        }
-        return x ;
-    }
-
-    /** Equality of tuples is based on equality of the elements in the tuple */
-    @Override
-    public boolean equals(Object other) {
-        if ( this == other )
-            return true ;
-        if ( !(other instanceof Tuple<? >) )
-            return false ;
-        Tuple<? > x = (Tuple<? >)other ;
-        if ( x.size() != this.size() )
-            return false ;
-        for ( int i = 0 ; i < tuple.length ; i++ ) {
-            Object obj1 = tuple[i] ;
-            Object obj2 = x.tuple[i] ;
-            if ( !Objects.equals(obj1, obj2) )
-                return false ;
-        }
-        return true ;
-    }
-
-    @Override
-    public String toString() {
-        return "[" + Iter.asString(iterator(), ", ") + "]" ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
new file mode 100644
index 0000000..ec818b2
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
@@ -0,0 +1,63 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import java.util.List ;
+import java.util.function.Consumer ;
+import java.util.stream.Stream ;
+
+/** A Tuple is the same class of item */
+public interface Tuple<X> extends Iterable<X> {
+    /** Get the i'th element, for i in the range 0 to len()-1 
+     * @throws IndexOutOfBoundsException for i out of range 
+     */
+    public X get(int i) ;
+    
+    /** length : elements are 0 to len()-1 */ 
+    public int len() ;
+
+    /** Convert to a List */
+    public default List<X> asList() {
+        return new TupleList<>(this) ;
+    }
+    
+    /** stream */
+    public default Stream<X> stream() { 
+        return asList().stream() ;
+    }
+    
+    /** forEach */
+    @Override
+    public default void forEach(Consumer<? super X> action) { 
+        asList().forEach(action) ;
+    }
+    
+    /** Copy the Tuple into the array */ 
+    public default void copyInto(X[] array) {
+        copyInto(array, 0, len());
+    }
+
+    /** Copy the Tuple into the array */ 
+    public default void copyInto(X[] array, int start) {
+        copyInto(array, start, len());
+    }
+    
+    /** Copy the Tuple into the array */ 
+    public void copyInto(X[] array, int start, int length) ;
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
new file mode 100644
index 0000000..534bd50
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 0 items.
+ */
+public class Tuple0<X> extends TupleBase<X> {
+    
+    protected Tuple0() { }
+    
+    @Override
+    public final X get(int i) {
+        throw new IndexOutOfBoundsException() ;
+    }
+    
+    @Override
+    public final int len() {
+        return 0 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
new file mode 100644
index 0000000..9490732
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
@@ -0,0 +1,42 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 1 item.
+ */
+public class Tuple1<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    
+    protected Tuple1(X x1) {
+        this.x1 = x1 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        if ( i == 0 )
+            return x1 ;
+        throw new IndexOutOfBoundsException() ;
+    }
+    
+    @Override
+    public final int len() {
+        return 1 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
new file mode 100644
index 0000000..d90b730
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
@@ -0,0 +1,46 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 2 items.
+ */
+public class Tuple2<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    
+    protected Tuple2(X x1, X x2) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+    
+    @Override
+    public final int len() {
+        return 2 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
new file mode 100644
index 0000000..fceac41
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
@@ -0,0 +1,49 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 3 items.
+ */
+public class Tuple3<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    protected final X x3 ;
+    
+    protected Tuple3(X x1, X x2, X x3) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+        this.x3 = x3 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+            case 2: return x3 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+    
+    @Override
+    public final int len() {
+        return 3 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
new file mode 100644
index 0000000..04d5fe8
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
@@ -0,0 +1,52 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 4 items.
+ */
+public class Tuple4<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    protected final X x3 ;
+    protected final X x4 ;
+    
+    protected Tuple4(X x1, X x2, X x3, X x4) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+        this.x3 = x3 ;
+        this.x4 = x4 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+            case 2: return x3 ;
+            case 3: return x4 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+
+    @Override
+    public final int len() {
+        return 4 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
new file mode 100644
index 0000000..5c465464
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
@@ -0,0 +1,55 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 5 items.
+ */
+public class Tuple5<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    protected final X x3 ;
+    protected final X x4 ;
+    protected final X x5 ;
+    
+    protected Tuple5(X x1, X x2, X x3, X x4, X x5) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+        this.x3 = x3 ;
+        this.x4 = x4 ;
+        this.x5 = x5 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+            case 2: return x3 ;
+            case 3: return x4 ;
+            case 4: return x5 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+
+    @Override
+    public final int len() {
+        return 5 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
new file mode 100644
index 0000000..c3faf3a
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
@@ -0,0 +1,58 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 6 items.
+ */
+public class Tuple6<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    protected final X x3 ;
+    protected final X x4 ;
+    protected final X x5 ;
+    protected final X x6 ;
+    
+    protected Tuple6(X x1, X x2, X x3, X x4, X x5, X x6) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+        this.x3 = x3 ;
+        this.x4 = x4 ;
+        this.x5 = x5 ;
+        this.x6 = x6 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+            case 2: return x3 ;
+            case 3: return x4 ;
+            case 4: return x5 ;
+            case 5: return x6 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+
+    @Override
+    public final int len() {
+        return 6 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
new file mode 100644
index 0000000..c13d60c
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
@@ -0,0 +1,61 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 7 items.
+ */
+public class Tuple7<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    protected final X x3 ;
+    protected final X x4 ;
+    protected final X x5 ;
+    protected final X x6 ;
+    protected final X x7 ;
+    
+    protected Tuple7(X x1, X x2, X x3, X x4, X x5, X x6, X x7) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+        this.x3 = x3 ;
+        this.x4 = x4 ;
+        this.x5 = x5 ;
+        this.x6 = x6 ;
+        this.x7 = x7 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+            case 2: return x3 ;
+            case 3: return x4 ;
+            case 4: return x5 ;
+            case 5: return x6 ;
+            case 6: return x7 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+
+    @Override
+    public final int len() {
+        return 7 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
new file mode 100644
index 0000000..c233646
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
@@ -0,0 +1,64 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+/**
+ * A tuple of 8 items.
+ */
+public class Tuple8<X> extends TupleBase<X> {
+    protected final X x1 ; 
+    protected final X x2 ;
+    protected final X x3 ;
+    protected final X x4 ;
+    protected final X x5 ;
+    protected final X x6 ;
+    protected final X x7 ;
+    protected final X x8 ;
+    
+    protected Tuple8(X x1, X x2, X x3, X x4, X x5, X x6, X x7, X x8) {
+        this.x1 = x1 ;
+        this.x2 = x2 ;
+        this.x3 = x3 ;
+        this.x4 = x4 ;
+        this.x5 = x5 ;
+        this.x6 = x6 ;
+        this.x7 = x7 ;
+        this.x8 = x8 ;
+    }
+    
+    @Override
+    public final X get(int i) {
+        switch (i) {
+            case 0: return x1 ;
+            case 1: return x2 ;
+            case 2: return x3 ;
+            case 3: return x4 ;
+            case 4: return x5 ;
+            case 5: return x6 ;
+            case 6: return x7 ;
+            case 7: return x8 ;
+        }
+        throw new IndexOutOfBoundsException() ;
+    }
+    
+   @Override
+    public final int len() {
+        return 8 ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
new file mode 100644
index 0000000..9291137
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
@@ -0,0 +1,73 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import java.util.Iterator ;
+import java.util.Objects ;
+
+abstract class TupleBase<X> implements Tuple<X> {
+    protected TupleBase() {}
+
+    /** Iterable */
+    @Override
+    public Iterator<X> iterator() {
+        return asList().iterator() ;
+    }
+    
+
+    @Override
+    public void copyInto(X[] array, int start, int length) {
+        for ( int i = 0 ; i < Math.min(length, len()) ; i++ )
+            array[i+start] = get(i) ;
+    }
+
+    @Override
+    public final
+    int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        for ( int i = 0 ; i < len() ; i++ )
+            result = prime * result + Objects.hashCode(get(i)) ;
+        return result;
+    }
+    
+    @Override
+    public final
+    boolean equals(Object obj) {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false ;
+        if ( ! ( obj instanceof Tuple<?> ) ) 
+            return false ;
+        Tuple<?> other = (Tuple<?>)obj ;
+        if ( this.len() != other.len() )
+            return false ;
+        for ( int i = 0 ; i < this.len() ; i++ )
+            if ( ! Objects.equals(this.get(i), other.get(i)) ) 
+                return false ;
+        return true;
+    }
+    
+    @Override
+    public final String toString() {
+        return asList().toString() ;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
new file mode 100644
index 0000000..04ca9c0
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
@@ -0,0 +1,122 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import java.util.List ;
+
+/** Tuple creation */
+public class TupleFactory {
+    
+    private TupleFactory() {}
+    
+    /** Create a Tuple */ 
+    @SafeVarargs
+    public static <X> Tuple<X> tuple(X...xs) {
+        switch(xs.length) {
+            case 0 : return create0() ;
+            case 1 : return create1(xs[0]) ;
+            case 2 : return create2(xs[0], xs[1]) ;
+            case 3 : return create3(xs[0], xs[1], xs[2]) ;
+            case 4 : return create4(xs[0], xs[1], xs[2], xs[3]) ;
+            case 5 : return create5(xs[0], xs[1], xs[2], xs[3], xs[4]) ;
+            case 6 : return create6(xs[0], xs[1], xs[2], xs[3], xs[4], xs[5]) ;
+            case 7 : return create7(xs[0], xs[1], xs[2], xs[3], xs[4], xs[5], xs[6]) ;
+            case 8 : return create8(xs[0], xs[1], xs[2], xs[3], xs[4], xs[5], xs[6], xs[7]) ;
+            default:
+                // No need to copy.
+                return asTuple(xs) ;
+        }
+    }
+    
+    /** Create a Tuple from an array */ 
+    public static <X> Tuple<X> create(X[] xs) {
+        switch(xs.length) {
+            case 0 : return create0() ;
+            case 1 : return create1(xs[0]) ;
+            case 2 : return create2(xs[0], xs[1]) ;
+            case 3 : return create3(xs[0], xs[1], xs[2]) ;
+            case 4 : return create4(xs[0], xs[1], xs[2], xs[3]) ;
+            case 5 : return create5(xs[0], xs[1], xs[2], xs[3], xs[4]) ;
+            case 6 : return create6(xs[0], xs[1], xs[2], xs[3], xs[4], xs[5]) ;
+            case 7 : return create7(xs[0], xs[1], xs[2], xs[3], xs[4], xs[5], xs[6]) ;
+            case 8 : return create8(xs[0], xs[1], xs[2], xs[3], xs[4], xs[5], xs[6], xs[7]) ;
+            default:
+                return TupleN.create(xs) ;
+        }
+    }
+
+    /** Treat an array as a Tuple.  The array must not be mutated */ 
+    public static <X> Tuple<X> asTuple(X[] xs) {
+        return TupleN.wrap(xs) ;
+    }
+    
+    /** Create a Tuple from a list */ 
+    public static <X> Tuple<X> create(List<X> xs) {
+        @SuppressWarnings("unchecked")
+        X[] xa = (X[])(new Object[xs.size()]) ;
+        return TupleFactory.tuple(xs.toArray(xa)) ;
+    }
+
+    /** Create a Tuple of length 0 */
+    public static <X> Tuple0<X> create0() {
+        return new Tuple0<>() ;
+    }
+    
+    /** Create a Tuple of length 1 */
+    public static <X> Tuple1<X> create1(X x1) {
+        return new Tuple1<>(x1) ;
+    }
+
+    /** Create a Tuple of length 2 */
+    public static <X> Tuple2<X> create2(X x1, X x2) {
+        return new Tuple2<>(x1, x2) ;
+    }
+
+    /** Create a Tuple of length 3 */
+    public static <X> Tuple3<X> create3(X x1, X x2, X x3) {
+        return new Tuple3<>(x1, x2, x3) ;
+    }
+
+    /** Create a Tuple of length 4 */
+    public static <X> Tuple4<X> create4(X x1, X x2, X x3, X x4) {
+        return new Tuple4<>(x1, x2, x3, x4) ;
+    }
+    
+    /** Create a Tuple of length 5 */
+    public static <X> Tuple5<X> create5(X x1, X x2, X x3, X x4, X x5) {
+        return new Tuple5<>(x1, x2, x3, x4, x5) ;
+    }
+
+    /** Create a Tuple of length 6 */
+    public static <X> Tuple6<X> create6(X x1, X x2, X x3, X x4, X x5, X x6) {
+        return new Tuple6<>(x1, x2, x3, x4, x5, x6) ;
+    }
+
+    /** Create a Tuple of length 7 */
+    public static <X> Tuple7<X> create7(X x1, X x2, X x3, X x4, X x5, X x6, X x7) {
+        return new Tuple7<>(x1, x2, x3, x4, x5, x6, x7) ;
+    }
+
+    /** Create a Tuple of length 8 */
+    public static <X> Tuple8<X> create8(X x1, X x2, X x3, X x4, X x5, X x6, X x7, X x8) {
+        return new Tuple8<>(x1, x2, x3, x4, x5, x6, x7, x8) ;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
new file mode 100644
index 0000000..9e166cd
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
@@ -0,0 +1,43 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import java.util.AbstractList ;
+import java.util.List ;
+import java.util.RandomAccess ;
+
+/** Wrap a {@link Tuple} as an immutable Java collection {@link List} */
+public class TupleList<X> extends AbstractList<X> implements RandomAccess {
+
+    private final Tuple<X> tuple;
+
+    public TupleList(Tuple<X> tuple) {
+        this.tuple = tuple ;
+    }
+    
+    @Override
+    public X get(int index) {
+        return tuple.get(index) ;
+    }
+
+    @Override
+    public int size() {
+        return tuple.len() ;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
new file mode 100644
index 0000000..2a220ed
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
@@ -0,0 +1,404 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import static java.lang.String.format;
+
+import java.util.ArrayList ;
+import java.util.Arrays;
+import java.util.Collections ;
+import java.util.List;
+
+import org.apache.jena.atlas.AtlasException;
+import org.apache.jena.atlas.lib.ListUtils ;
+import org.apache.jena.atlas.lib.StrUtils ;
+
+/**
+ * General descriptor of a reordering (mapping) of slots in tuples
+ * <p>
+ * Naming: map is convert to the reordered form, unmap is get back.
+ * <p>
+ * 
+ * <pre>
+ * map(tuple) is equivalent to
+ *   create tuple(getSlotIdx(0) , getSlotIdx(1), ... getSlotIdx(n-1)) ;    
+ * </pre>
+ * 
+ * A {@code TupleMap} holds twp maps: the "getTransform" and the "putTransform".
+ * The "getTransform" is here to get the item from in the mapper Tuple.
+ * In the case is {@code SPO->POS} this is 
+ * {@code 0<-1, 1<-2, 2<-0} 
+ * and the "putTransform" is where to place the items: {@code 0->2, 1->0, 2->1}.
+ */
+final
+public class TupleMap {
+    /*
+     * Naming.  getTransform (from src), putTransform(into dst)
+     * And these are mutual inverses: unmap process is to swap use of getTransform and putTransform
+     * See getSlotIdx and putSlotIdx
+     * 
+     * These are then equivalent
+     * 
+     * int j = getTransform[i] ; elts[i] = src.get(j) ;
+     * int j = putTransform[i] ; elts[j] = src.get(i) ;
+     * 
+     * The code tends to use this style (getTransform)
+     *     int j = getTransform[i] ;
+     *     dst[i] = src[j] ;
+     * 
+     * See apply and applyArray
+     * 
+     * Warning : map and unmap here do not correspond to fetch and map in
+     * ColumnMap. That has confusing/inconsistent usage.
+     */
+    
+    // SPO->POS: get:{0<-1, 1<-2, 2<-0} put:{0->2, 1->0, 2->1}
+    
+    // Map by where to fetch from source.
+    // For SPO -> POS, get from 1 to go into 0 so (0->, 1->0 2->   
+    // POS->SPO, is (0->1, 1->2, 2->0)
+    // i.e. the location to fetch the mapped element from.
+    private final int[]  getTransform ;
+    
+    // Map by insertion into destination.
+    // So SPO->POS is (0->2, 1->0, 2->1)
+    // i.e. the location of the element after mapping.
+    private final int[]  putTransform ; // putTransform, insertOrder
+
+    private final int len ;
+    private final String label;
+
+    /**
+     * Construct a mapping that maps the input (one col, one char) to the output
+     */
+    public static TupleMap create(String input, String output) {
+        return new TupleMap(input + "->" + output, compileMapping(input, output));
+    }
+
+    /**
+     * Construct a mapping, with label, that maps the input (one col, one char) to the output
+     */
+    public static TupleMap create(String label, String input, String output) {
+        return new TupleMap(label, compileMapping(input, output));
+    }
+
+    /**
+     * Construct a mapping that maps the input to the output
+     */
+    public static <T> TupleMap create(String label, List<T> input, List<T> output) {
+        return new TupleMap(label, compileMapping(input, output));
+    }
+
+    /**
+     * Construct a mapping that maps the input to the output
+     */
+    public static <T> TupleMap create(String label, T[] input, T[] output) {
+        return new TupleMap(label, compileMapping(input, output));
+    }
+    
+    /**
+     * Construct a mapping - the elements are the mappings of a tuple
+     * originally in the order 0,1,2,... so SPO->POS is 2,0,1 (SPO->POS so S->2,
+     * P->0, O->1) and not 1,2,0 (which is the extraction mapping). The label is
+     * just a label and is not interpretted here.
+     */
+    private TupleMap(String label, int... elements) {
+        this.len = elements.length ; 
+        this.label = label;
+
+        this.putTransform = new int[elements.length];
+        Arrays.fill(putTransform, -1);
+
+        this.getTransform = new int[elements.length];
+        Arrays.fill(getTransform, -1);
+
+        for ( int i = 0 ; i < elements.length ; i++ ) {
+            int x = elements[i];
+            if ( x < 0 || x >= elements.length )
+                throw new IllegalArgumentException("Out of range: " + x);
+            // Checking
+            if ( putTransform[i] != -1 || getTransform[x] != -1 )
+                throw new IllegalArgumentException("Inconsistent: " + ListUtils.str(elements));
+
+            putTransform[i] = x;    // The elements are the putTransform.
+            getTransform[x] = i;
+        }
+    }
+
+    /** Length of mapping */
+    public int length() {
+        return len;
+    }
+
+    /** 
+     * Get the index of the i'th slot as it appears from a mapping : for
+     * SPO->POS : 0'th slot is P so 0 returns 1 (the location in the tuple before mapping)
+     * The 0'th mapped slot is {@code tuple.get(tupleMap.getSlotIdx(0))}.
+     */
+    public int getSlotIdx(int idx) {
+        return getTransform[idx];
+    }
+
+    /**
+     * Get the index of the i'th slot as it appears after unmapping : SPO->POS :
+     * 0'th slot is S from POS so 0 returns 2
+     */
+    public int putSlotIdx(int idx) {
+        return putTransform[idx]; 
+    }
+    
+    /** 
+     * Get the index of the i'th slot as it appears from a mapping : for
+     * SPO->POS : 0'th slot is P so 0 returns 1 (the location in the tuple before mapping)
+     * Equivalent to {@link #getSlotIdx}.
+     * The 0'th mapped slot is {@code tuple.get(tupleMap.mapIdx(0))}.
+     */
+    public int mapIdx(int idx) {
+        return getSlotIdx(idx) ;
+    }
+
+    /**
+     * Get the index of the i'th slot as it appears after unmapping : SPO->POS :
+     * 0'th slot is S from POS so 0 returns 2
+     * Equivalent to {@link #putSlotIdx}.
+     * The 0'th unmapped slot is {@code tuple.get(tupleMap.unmapIdx(0))}.
+     */
+    public int unmapIdx(int idx) {
+        return putSlotIdx(idx) ; 
+    }
+    
+    /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied.
+     */
+    public <T> Tuple<T> map(Tuple<T> src) {
+        return apply(src, getTransform) ;
+    }
+
+    /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied. */
+    public <T> Tuple<T> unmap(Tuple<T> src) {
+        return apply(src, putTransform) ;
+    }
+
+    // Does not work (java8) - assigning the return causes a runtime case exception 
+//    /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied */
+//    public <T> T[] map(T[] src) {
+//        @SuppressWarnings("unchecked")
+//        T[]dst = (T[])new Object[src.length] ;
+//        applyArray(src, dst, getTransform) ;
+//        return dst ;
+//    }
+
+    /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied.
+     * Returns the destination array.
+     */
+    public <T> T[] map(T[] src, T[] dst) {
+        if ( src == dst )
+            throw new IllegalArgumentException("Source and destination are the same array") ;
+        applyArray(src, dst, getTransform) ;
+        return dst ;
+    }
+
+    // Does not work (java8) - assigning the return causes a runtime case exception 
+//    /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied */
+//    public <T> T[] unmap(T[] src) {
+//        @SuppressWarnings("unchecked")
+//        T[]dst = (T[])new Object[src.length] ;
+//        applyArray(src, dst, putTransform) ;
+//        return dst ;
+//    }
+
+    /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied.
+     * Returns the destination array.
+     */
+    public <T> T[] unmap(T[] src, T[] dst) {
+        if ( src == dst )
+            throw new IllegalArgumentException("Source and destination are the same array") ;
+        applyArray(src, dst, putTransform) ;
+        return dst ;
+    }
+
+    /** Apply an index transformation
+     */
+    private static <T> Tuple<T> apply(Tuple<T> src, int[] getTransform) {
+        if ( src.len() != getTransform.length )
+            throw new IllegalArgumentException("Lengths do not match: Tuple:"+src.len()+"; transform:"+getTransform.length) ;
+        // Fast-track 1,2,3,4 ?
+//        // All this to avoid the temp array.
+//        switch(src.len()) {
+//            case 0: return src ;
+//            case 1: return src ;
+//            case 2: {
+//                T x1 = src.get(getTransform[0]);
+//                T x2 = src.get(getTransform[1]);
+//                return TupleFactory.create2(x1, x2) ;
+//            }
+//            case 3: {
+//                T x1 = src.get(getTransform[0]);
+//                T x2 = src.get(getTransform[1]);
+//                T x3 = src.get(getTransform[2]);
+//                return TupleFactory.create3(x1, x2, x3) ;
+//            }
+//            case 4: {
+//                T x1 = src.get(getTransform[0]);
+//                T x2 = src.get(getTransform[1]);
+//                T x3 = src.get(getTransform[2]);
+//                T x4 = src.get(getTransform[3]);
+//                return TupleFactory.create4(x1, x2, x3, x4) ;
+//            }
+//        }
+        
+        @SuppressWarnings("unchecked")
+        T[] elts = (T[])new Object[src.len()] ;
+        
+        for ( int i = 0 ; i < src.len() ; i++ ) {
+            int j = getTransform[i] ;
+            elts[i] = src.get(j) ;
+        }
+        return TupleFactory.tuple(elts) ;
+    }
+    
+    /** Apply an index transformation */
+    private <T> void applyArray(T[] src, T[] dst, int[] transform) {
+        for ( int i = 0 ; i < src.length ; i++ ) {
+            int j = transform[i] ;
+            dst[i] = src[j] ;
+        }
+    }
+    
+    /**
+     * Apply to an <em>unmapped</em> tuple to get the i'th slot after mapping :
+     * SPO->POS : 0'th slot is P from SPO
+     */
+    public <T> T mapSlot(int idx, Tuple<T> tuple) {
+        checkLength(tuple) ;
+        idx = getSlotIdx(idx) ;
+        return tuple.get(idx) ;
+    }
+
+    /**
+     * Apply to a <em>mapped</em> tuple to get the i'th slot as it appears after
+     * mapping : SPO->POS : 0'th slot is S from POS
+     */
+    public <T> T unmapSlot(int idx, Tuple<T> tuple) {
+        checkLength(tuple) ;
+        idx = putSlotIdx(idx) ;
+        return tuple.get(idx);
+    }
+
+    /**
+     * Apply to an <em>unmapped</em> tuple to get the i'th slot after mapping :
+     * SPO->POS : 0'th slot is P from SPO
+     */
+    public <T> T mapSlot(int idx, T[] tuple) {
+        return tuple[getSlotIdx(idx)] ;
+    }
+
+    /**
+     * Apply to a <em>mapped</em> tuple to get the i'th slot as it appears after
+     * mapping : SPO->POS : 0'th slot is S from POS
+     */
+    public <T> T unmapSlot(int idx, T[] tuple) {
+        return tuple[putSlotIdx(idx)] ;
+    }
+
+    /** Compile a mapping encoded as single charcaters e.g. "SPO", "POS" */
+    private static int[] compileMapping(String domain, String range) {
+        List<Character> input = StrUtils.toCharList(domain);
+        List<Character> output = StrUtils.toCharList(range);
+        return compileMapping(input, output);
+    }
+
+    /**
+     * Compile a mapping, encoded two list, the domain and range of the mapping
+     * function
+     */
+    private static <T> int[] compileMapping(T[] domain, T[] range) {
+        return compileMapping(Arrays.asList(domain), Arrays.asList(range));
+    }
+
+    /** Compile a mapping */
+    private static <T> int[] compileMapping(List<T> domain, List<T> range) {
+        if ( domain.size() != range.size() )
+            throw new AtlasException("Bad mapping: lengths not the same: " + domain + " -> " + range);
+
+        int[] cols = new int[domain.size()];
+        boolean[] mapped = new boolean[domain.size()];
+        // Arrays.fill(mapped, false) ;
+
+        for ( int i = 0 ; i < domain.size() ; i++ ) {
+            T input = domain.get(i);
+            int j = range.indexOf(input);
+            if ( j < 0 )
+                throw new AtlasException("Bad mapping: missing mapping: " + domain + " -> " + range);
+            if ( mapped[j] )
+                throw new AtlasException("Bad mapping: duplicate: " + domain + " -> " + range);
+            cols[i] = j;
+            mapped[j] = true;
+        }
+        return cols;
+    }
+
+    /** Access to the getTransform */
+    /*package-testing*/ List<Integer> transformGet() {
+        return arrayToList(getTransform) ;
+    }
+
+    /** Access to the putTransform */
+    /*package-testing*/ List<Integer> transformPut() {
+        return arrayToList(putTransform) ;
+    }
+
+    private List<Integer> arrayToList(int[] array) {
+        List<Integer> list = new ArrayList<>(array.length) ;
+        for ( int x : array ) 
+            list.add(x) ;
+        return  Collections.unmodifiableList(list) ;
+    }
+
+    @Override
+    public String toString() {
+        // return label ;
+        return format("%s:%s:%s", label, mapStr(putTransform, "->"), mapStr(getTransform, "<-"));
+    }
+
+    private Object mapStr(int[] map, String arrow) {
+        StringBuilder buff = new StringBuilder();
+        String sep = "{";
+
+        for ( int i = 0 ; i < map.length ; i++ ) {
+            buff.append(sep);
+            sep = ", ";
+            buff.append(format("%d%s%d", i, arrow, map[i]));
+        }
+        buff.append("}");
+
+        return buff.toString();
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    private static boolean CHECKING = true ; 
+    private final void checkLength(Tuple<?> tuple) {
+        if ( CHECKING ) {
+            if ( tuple.len() != length() )
+                throw new IllegalArgumentException("Tuple length "+tuple.len()+": not of length "+length()) ;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
new file mode 100644
index 0000000..58e455e
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
@@ -0,0 +1,55 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import java.util.Arrays ;
+
+/** A Tuple of N items */
+public class TupleN<X> extends TupleBase<X> {
+    private final X[] tuple ;
+
+    /** Create a TupleN - safely copy the input */ 
+    @SafeVarargs
+    public static <X> TupleN<X> create(X... xs) {
+        X[] xs2 = Arrays.copyOf(xs, xs.length) ;
+        return new TupleN<>(xs2) ;
+    }
+    
+    // When the array will not be modified.
+    /*package*/ static <X> TupleN<X> wrap(X[] xs) {
+        return new TupleN<>(xs) ;
+    }
+    
+    /** Put a TupleN wrapper around a X[].
+     * The statics {@link #create} and {@link wrap} determine whether to copy or not.
+     */
+    private TupleN(X[] xs) {
+        tuple = xs ;
+    }
+
+    @Override
+    public final X get(int i) {
+        return tuple[i] ;
+    }
+
+    @Override
+    public int len() {
+        return tuple.length;
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/package-info.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/package-info.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/package-info.java
new file mode 100644
index 0000000..4028b2d
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/package-info.java
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+/**
+ * Tuples.
+ * <p>
+ * A Tuple is a fixed length sequence of the objects of the same type. They are
+ * immutable and provide value-based {@code hashCode} and {@code .equals()}.
+ * <p>
+ * There are space-saving implementations for tuples of length 0 to small N and
+ * a general purpose implementation.
+ * <ul>
+ * <li>{@code Tuple} -- the interface 
+ * <li>{@code TupleFactory} -- creates {@code Tuples} 
+ * <li>{@code TupleMap} -- provides transformations of order of elements
+ * </ul>
+ */
+
+package org.apache.jena.atlas.lib.tuple;

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/test/java/org/apache/jena/atlas/TC_Atlas.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/TC_Atlas.java b/jena-base/src/test/java/org/apache/jena/atlas/TC_Atlas.java
index cbe2b33..1f3ddc5 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/TC_Atlas.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/TC_Atlas.java
@@ -22,6 +22,7 @@ import org.apache.jena.atlas.io.TS_IO ;
 import org.apache.jena.atlas.iterator.TS_Iterator ;
 import org.apache.jena.atlas.lib.TS_Lib ;
 import org.apache.jena.atlas.lib.persistent.TS_Persistent;
+import org.apache.jena.atlas.lib.tuple.TS_Tuple ;
 import org.junit.runner.RunWith ;
 import org.junit.runners.Suite ;
 
@@ -29,6 +30,7 @@ import org.junit.runners.Suite ;
 @Suite.SuiteClasses( {
     // Library
       TS_Lib.class
+    , TS_Tuple.class
     , TS_Iterator.class
     , TS_IO.class
     , TS_Persistent.class

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFileOps.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFileOps.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFileOps.java
index 92538f7..272d169 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFileOps.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestFileOps.java
@@ -20,7 +20,7 @@ package org.apache.jena.atlas.lib;
 
 import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.FileOps ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.junit.Test ;
 
 public class TestFileOps extends BaseTest

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TS_Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TS_Tuple.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TS_Tuple.java
new file mode 100644
index 0000000..30ba125
--- /dev/null
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TS_Tuple.java
@@ -0,0 +1,32 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import org.junit.runner.RunWith ;
+import org.junit.runners.Suite ;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+    TestTuple.class
+    , TestTupleMap.class
+})
+
+public class TS_Tuple {
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
new file mode 100644
index 0000000..4c31746
--- /dev/null
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
@@ -0,0 +1,201 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertNotEquals ;
+import static org.junit.Assert.fail ;
+
+import java.util.ArrayList ;
+import java.util.List ;
+
+import org.junit.Test ;
+
+public class TestTuple {
+    @Test public void tuple_0() {
+        Tuple<Integer> tuple = TupleFactory.create0() ;
+        assertEquals(0, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_1() {
+        Tuple<Integer> tuple = TupleFactory.create1(9) ;
+        assertEquals(1, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_2() {
+        Tuple<Integer> tuple = TupleFactory.create2(9,8) ;
+        assertEquals(2, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_3() {
+        Tuple<Integer> tuple = TupleFactory.create3(9,8,7) ;
+        assertEquals(3, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_4() {
+        Tuple<Integer> tuple = TupleFactory.create4(9,8,7,6) ;
+        assertEquals(4, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_5() {
+        Tuple<Integer> tuple = TupleFactory.create5(9,8,7,6,5) ;
+        assertEquals(5, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_6() {
+        Tuple<Integer> tuple = TupleFactory.create6(9,8,7,6,5,4) ;
+        assertEquals(6, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_7() {
+        Tuple<Integer> tuple = TupleFactory.create7(9,8,7,6,5,4,3) ;
+        assertEquals(7, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_8() {
+        Tuple<Integer> tuple = TupleFactory.create8(9,8,7,6,5,4,3,2) ;
+        assertEquals(8, tuple.len()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N0() {
+        Tuple<Integer> tuple = TupleFactory.tuple() ;
+        assertEquals(0, tuple.len()) ;
+        assertEquals(Tuple0.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N1() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9) ;
+        assertEquals(1, tuple.len()) ;
+        assertEquals(Tuple1.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N2() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8) ;
+        assertEquals(2, tuple.len()) ;
+        assertEquals(Tuple2.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N3() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7) ;
+        assertEquals(3, tuple.len()) ;
+        assertEquals(Tuple3.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N4() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7,6) ;
+        assertEquals(4, tuple.len()) ;
+        assertEquals(Tuple4.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N5() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7,6,5) ;
+        assertEquals(5, tuple.len()) ;
+        assertEquals(Tuple5.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N6() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7,6,5,4) ;
+        assertEquals(6, tuple.len()) ;
+        assertEquals(Tuple6.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N7() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7,6,5,4,3) ;
+        assertEquals(7, tuple.len()) ;
+        assertEquals(Tuple7.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N8() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7,6,5,4,3,2) ;
+        assertEquals(8, tuple.len()) ;
+        assertEquals(Tuple8.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_N() {
+        Tuple<Integer> tuple = TupleFactory.tuple(9,8,7,6,5,4,3,2,1,0) ;
+        assertEquals(10, tuple.len()) ;
+        assertEquals(TupleN.class, tuple.getClass()) ;
+        check(tuple) ;
+    }
+
+    @Test public void tuple_equals_1() {
+        Tuple<Integer> tuple1 = TupleFactory.tuple(9,8,7) ;
+        Tuple<Integer> tuple2 = TupleN.create(9,8,7) ;
+        assertEquals(tuple1.hashCode(), tuple2.hashCode()) ;
+        assertEquals(tuple1, tuple2) ;
+    }
+
+    @Test public void tuple_not_equals_1() {
+        Tuple<Integer> tuple1 = TupleFactory.tuple(9,8,7) ;
+        Tuple<Integer> tuple2 = TupleFactory.tuple(7,8,9) ;
+        assertNotEquals(tuple1.hashCode(), tuple2.hashCode()) ;
+        assertNotEquals(tuple1, tuple2) ;
+    }
+
+    @Test public void tuple_not_equals_2() {
+        Tuple<Integer> tuple1 = TupleFactory.tuple(9,8,7) ;
+        Tuple<Integer> tuple2 = TupleFactory.tuple(9,8) ;
+        assertNotEquals(tuple1.hashCode(), tuple2.hashCode()) ;
+        assertNotEquals(tuple1, tuple2) ;
+    }
+
+    private void check(Tuple<Integer> tuple) {
+        int val = 9 ;
+        for ( int i = 0 ; i < tuple.len() ; i++ ) {
+            assertEquals(val-i, tuple.get(i).intValue()) ; 
+        }
+        List<Integer> list = tuple.asList() ;
+        for ( int i = 0 ; i < tuple.len() ; i++ ) {
+            assertEquals(val-i, list.get(i).intValue()) ; 
+        }
+        try { tuple.get(-1) ; fail("Index -1 did not throw an exception") ; }
+        catch(IndexOutOfBoundsException ex) {}
+        try { tuple.get(tuple.len()) ; fail("Index len() did not throw an exception") ; }
+        catch(IndexOutOfBoundsException ex) {}
+
+        // Other constructors
+        List<Integer> list2 = new ArrayList<>(list) ;
+        Tuple<Integer> tuple2 = TupleFactory.create(list2) ;
+        assertEquals(tuple.hashCode(), tuple2.hashCode()) ;
+        assertEquals(tuple, tuple2) ;
+
+        // Other constructors
+        List<Integer> list3 = new ArrayList<>(list) ;
+        Tuple<Integer> tuple3 = TupleFactory.tuple(list3.toArray(new Integer[0])) ;
+        assertEquals(tuple, tuple3) ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/571e9755/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
new file mode 100644
index 0000000..75e1a05
--- /dev/null
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
@@ -0,0 +1,186 @@
+/*
+ * 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 org.apache.jena.atlas.lib.tuple;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays ;
+import java.util.List ;
+
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
+import org.apache.jena.atlas.lib.tuple.TupleMap ;
+import org.junit.Test;
+
+public class TestTupleMap {
+    // Check coverage
+    
+    @Test
+    public void map_tuple_01() {
+        TupleMap tmap = TupleMap.create("SPO", "POS");
+        Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
+        Tuple<String> tuple2 = tmap.map(tuple);
+        assertEquals(tuple2.get(0), "P");
+        assertEquals(tuple2.get(1), "O");
+        assertEquals(tuple2.get(2), "S");
+
+        Tuple<String> tuple3 = tmap.unmap(tuple2);
+        assertEquals(tuple, tuple3);
+    }
+
+
+    @Test
+    public void map_tuple_02() {
+        TupleMap x = TupleMap.create("SPO", "POS");
+        Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
+        Tuple<String> mapped = x.map(tuple);
+        Tuple<String> expected = TupleFactory.tuple("P", "O", "S");
+        assertEquals(expected, mapped);
+    }
+
+    @Test
+    public void map_tuple_03() {
+        TupleMap tmap = TupleMap.create("GSPO", "OSPG");
+        Tuple<String> tuple = TupleFactory.tuple("G", "S", "P", "O");
+        Tuple<String> mapped = tmap.map(tuple);
+        Tuple<String> expected = TupleFactory.tuple("O", "S", "P", "G");
+        assertEquals(expected, mapped);
+        Tuple<String> unmapped = tmap.unmap(mapped);
+        assertEquals(TupleFactory.tuple("G", "S", "P", "O"), unmapped);
+    }
+
+    @Test
+    public void map_tuple_04() {
+        String[] x = {"G", "S", "P", "O"};
+        String[] y = {"O", "S", "P", "G"};
+
+        TupleMap tmap = TupleMap.create("Test", x, y);
+        Tuple<String> tuple = TupleFactory.tuple(x);
+        Tuple<String> mapped = tmap.map(tuple);
+
+        Tuple<String> expected = TupleFactory.tuple(y);
+        assertEquals(expected, mapped);
+        Tuple<String> unmapped = tmap.unmap(mapped);
+        assertEquals(TupleFactory.tuple(x), unmapped);
+    }
+
+    @Test
+    public void compile1() {
+        TupleMap map = TupleMap.create("SPO", "POS");
+        // SPO -> POS 
+        // col 0 goes to col 2
+        // col 1 goes to col 0
+        // col 2 goes to col 1
+        Integer[] expectedPut = {2, 0, 1};
+        assertEquals(Arrays.asList(expectedPut), map.transformPut());
+        Integer[] expectedGet = {1, 2, 0};
+        assertEquals(Arrays.asList(expectedGet), map.transformGet());
+    }
+
+    @Test
+    public void compile2() {
+        TupleMap map = TupleMap.create("SPOG", "GOPS");
+        Integer[] expected = {3, 2, 1, 0};
+        assertEquals(Arrays.asList(expected), map.transformPut());
+    }
+
+    @Test
+    public void map_slot_01() {
+        TupleMap tmap = TupleMap.create("SPO", "POS");
+        Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
+        assertEquals("P", tmap.mapSlot(0, tuple));
+        assertEquals("O", tmap.mapSlot(1, tuple));
+        assertEquals("S", tmap.mapSlot(2, tuple));
+
+        Tuple<String> tuple1 = tmap.map(tuple);
+        assertEquals("S", tmap.unmapSlot(0, tuple1));
+        assertEquals("P", tmap.unmapSlot(1, tuple1));
+        assertEquals("O", tmap.unmapSlot(2, tuple1));
+    }
+
+    @Test
+    public void map_slot_02() {
+        TupleMap tmap = TupleMap.create("SPO", "POS");
+        Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
+        Tuple<String> tuple1 = TupleFactory.tuple
+            (tuple.get(tmap.mapIdx(0))
+            ,tuple.get(tmap.mapIdx(1))
+            ,tuple.get(tmap.mapIdx(2)) ) ;
+        Tuple<String> tuple2 = tmap.map(tuple);
+        assertEquals(tuple2, tuple1) ;
+    }        
+
+    @Test
+    public void map_slot_03() {
+        TupleMap tmap = TupleMap.create("POS", "SPO");
+        Tuple<String> tuple = TupleFactory.tuple("P", "O", "S");
+        Tuple<String> tuple1 = TupleFactory.tuple
+            (tuple.get(tmap.unmapIdx(0))
+            ,tuple.get(tmap.unmapIdx(1))
+            ,tuple.get(tmap.unmapIdx(2)) ) ;
+        Tuple<String> tuple2 = tmap.unmap(tuple);
+        assertEquals(tuple2, tuple1) ;
+    }        
+
+    @Test
+    public void map_transforms() {
+        TupleMap x = TupleMap.create("SPO","POS"); 
+        List<Integer> listGet = x.transformPut() ;
+        List<Integer> listGetExpected = Arrays.asList(2, 0, 1) ;
+        assertEquals(listGetExpected, listGet) ;
+
+        List<Integer> listPut = x.transformGet() ;
+        List<Integer> listPutExpected = Arrays.asList(1, 2, 0) ;
+        assertEquals(listGetExpected, listGet) ;
+        
+    }
+    
+    @Test
+    public void map_array_01() {
+        TupleMap x = TupleMap.create("SPO","POS"); 
+        Tuple<Integer> t = TupleFactory.tuple(2, 0, 1);
+        Tuple<Integer> t1 = x.map(t);
+
+        String[] array = {"X", "Y", "Z"};
+        
+        assertEquals("Y", x.mapSlot(0, array)); // The 0th item after mapping is the "1"
+        assertEquals("Z", x.mapSlot(1, array));
+        assertEquals("X", x.mapSlot(2, array));
+        
+        String[] array2 = new String[array.length] ;
+        x.map(array, array2) ;
+        assertArrayEquals(new String[] {"Y", "Z", "X"}, array2) ;
+        String[] array3 = new String[array.length] ;
+        x.unmap(array2, array3) ;
+        
+        assertArrayEquals(array, array3) ;
+    }
+    
+    @Test
+    public void map_array_02() {
+        // (0,1,2) -> (2,0,1) S->2 etc
+        // so (0,1,2) <- (1,2,0)
+        TupleMap x = TupleMap.create("SPO","POS");
+        String[] array = {"Y", "Z", "X"};
+        assertEquals("X", x.unmapSlot(0, array)); // The index 0 comes from position 3.
+        assertEquals("Y", x.unmapSlot(1, array));
+        assertEquals("Z", x.unmapSlot(2, array));
+    }
+}


[04/12] jena git commit: Tuple.asArray

Posted by an...@apache.org.
Tuple.asArray


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9687f836
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9687f836
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9687f836

Branch: refs/heads/master
Commit: 9687f8368960d6505d910313d752a68194dbea23
Parents: c665f63
Author: Andy Seaborne <an...@seaborne.org>
Authored: Mon Dec 28 16:57:39 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Mon Dec 28 16:57:39 2015 +0000

----------------------------------------------------------------------
 .../org/apache/jena/atlas/lib/tuple/Tuple.java  | 10 ++++++++
 .../apache/jena/atlas/lib/tuple/TestTuple.java  | 24 ++++++++++++++++++++
 2 files changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/9687f836/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
index ec818b2..1f60286 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
@@ -22,6 +22,8 @@ import java.util.List ;
 import java.util.function.Consumer ;
 import java.util.stream.Stream ;
 
+import org.apache.jena.atlas.lib.ArrayUtils ;
+
 /** A Tuple is the same class of item */
 public interface Tuple<X> extends Iterable<X> {
     /** Get the i'th element, for i in the range 0 to len()-1 
@@ -60,4 +62,12 @@ public interface Tuple<X> extends Iterable<X> {
     
     /** Copy the Tuple into the array */ 
     public void copyInto(X[] array, int start, int length) ;
+    
+    /** Copy the Tuple into the array */ 
+    public default X[] asArray(Class<X> cls) {
+        X[] elts = ArrayUtils.alloc(cls, len()) ;
+        for ( int i = 0 ; i < len() ; i++ )
+            elts[i] = get(i) ;
+        return elts ;
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/9687f836/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
index 4c31746..f74de38 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTuple.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.atlas.lib.tuple;
 
+import static org.junit.Assert.assertArrayEquals ;
 import static org.junit.Assert.assertEquals ;
 import static org.junit.Assert.assertNotEquals ;
 import static org.junit.Assert.fail ;
@@ -173,6 +174,29 @@ public class TestTuple {
         assertNotEquals(tuple1, tuple2) ;
     }
 
+    @Test public void tuple_array_1() {
+        Tuple<Integer> tuple1 = TupleFactory.tuple(9,8,7) ;
+        Integer[] array = tuple1.asArray(Integer.class) ;
+        Tuple<Integer> tuple2 = TupleFactory.create(array) ;
+        assertEquals(tuple1, tuple2) ;
+    }
+
+    @Test public void tuple_array_2() {
+        Tuple<Integer> tuple1 = TupleFactory.tuple(9,8,7) ;
+        Integer[] array = new Integer[2] ;
+        tuple1.copyInto(array, 0, 2) ;
+        Integer[] array1 = { 9, 8 } ;
+        assertArrayEquals(array1, array) ;
+    }
+
+    @Test public void tuple_array_3() {
+        Tuple<Integer> tuple1 = TupleFactory.tuple(9,8,7) ;
+        Integer[] array = new Integer[3] ;
+        tuple1.copyInto(array) ;
+        Integer[] array1 = { 9, 8, 7 } ;
+        assertArrayEquals(array1, array) ;
+    }
+
     private void check(Tuple<Integer> tuple) {
         int val = 9 ;
         for ( int i = 0 ; i < tuple.len() ; i++ ) {


[08/12] jena git commit: Cosmetic: rename args to "copy" so not hiding the parent expr1/expr2.

Posted by an...@apache.org.
Cosmetic: rename args to "copy" so not hiding the parent expr1/expr2.

Helps prevent accidentally using wrong arguments.

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

Branch: refs/heads/master
Commit: cf268309b44dc22ef925bdca17032c6eb586f975
Parents: 3d5909e
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 29 11:27:43 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Tue Dec 29 21:13:05 2015 +0000

----------------------------------------------------------------------
 jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Add.java    | 2 +-
 jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Divide.java | 2 +-
 jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Equals.java | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_GreaterThan.java | 2 +-
 .../java/org/apache/jena/sparql/expr/E_GreaterThanOrEqual.java   | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_LangMatches.java | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_LessThan.java    | 2 +-
 .../main/java/org/apache/jena/sparql/expr/E_LessThanOrEqual.java | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_StrAfter.java    | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_StrBefore.java   | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_StrContains.java | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_StrDatatype.java | 4 +---
 .../src/main/java/org/apache/jena/sparql/expr/E_StrEndsWith.java | 2 +-
 .../src/main/java/org/apache/jena/sparql/expr/E_StrLang.java     | 2 +-
 .../main/java/org/apache/jena/sparql/expr/E_StrStartsWith.java   | 2 +-
 15 files changed, 15 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Add.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Add.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Add.java
index 6a83cde..8d6fc9d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Add.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Add.java
@@ -43,5 +43,5 @@ public class E_Add extends ExprFunction2
     }
 
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_Add(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_Add(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Divide.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Divide.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Divide.java
index 95bd6cf..a41cf8c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Divide.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Divide.java
@@ -43,5 +43,5 @@ public class E_Divide extends ExprFunction2
     }
     
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_Divide(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_Divide(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Equals.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Equals.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Equals.java
index c3c3543..a57b278 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Equals.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Equals.java
@@ -42,5 +42,5 @@ public class E_Equals extends ExprFunction2
     }
     
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_Equals(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_Equals(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThan.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThan.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThan.java
index 9cd44c3..94a69ca 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThan.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThan.java
@@ -38,5 +38,5 @@ public class E_GreaterThan extends ExprFunction2
     }
     
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_GreaterThan(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_GreaterThan(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThanOrEqual.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThanOrEqual.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThanOrEqual.java
index 500f61b..1975eb8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThanOrEqual.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_GreaterThanOrEqual.java
@@ -39,5 +39,5 @@ public class E_GreaterThanOrEqual extends ExprFunction2
     }
 
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_GreaterThanOrEqual(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_GreaterThanOrEqual(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LangMatches.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LangMatches.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LangMatches.java
index 1442425..bb9cf8a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LangMatches.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LangMatches.java
@@ -37,5 +37,5 @@ public class E_LangMatches extends ExprFunction2
     }
     
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_LangMatches(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_LangMatches(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThan.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThan.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThan.java
index 62ade47..7b2fdae 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThan.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThan.java
@@ -38,5 +38,5 @@ public class E_LessThan extends ExprFunction2
     }
 
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_LessThan(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_LessThan(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThanOrEqual.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThanOrEqual.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThanOrEqual.java
index 7c23513..1c91cc0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThanOrEqual.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_LessThanOrEqual.java
@@ -38,5 +38,5 @@ public class E_LessThanOrEqual extends ExprFunction2
     }
     
     @Override
-    public Expr copy(Expr e1, Expr e2) {  return new E_LessThanOrEqual(e1 , e2 ) ; }
+    public Expr copy(Expr e1, Expr e2) {  return new E_LessThanOrEqual(e1 , e2) ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrAfter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrAfter.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrAfter.java
index c70927c..6af0ed8 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrAfter.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrAfter.java
@@ -34,5 +34,5 @@ public class E_StrAfter extends ExprFunction2
     public NodeValue eval(NodeValue v1, NodeValue v2) { return XSDFuncOp.strAfter(v1, v2) ; }
     
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrAfter(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrAfter(e1, e2) ; } 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrBefore.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrBefore.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrBefore.java
index 615ed51..e45b4a3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrBefore.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrBefore.java
@@ -34,5 +34,5 @@ public class E_StrBefore extends ExprFunction2
     public NodeValue eval(NodeValue v1, NodeValue v2) { return XSDFuncOp.strBefore(v1, v2) ; } 
     
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrBefore(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrBefore(e1, e2) ; } 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrContains.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrContains.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrContains.java
index da901f4..690dc03 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrContains.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrContains.java
@@ -34,5 +34,5 @@ public class E_StrContains extends ExprFunction2
     public NodeValue eval(NodeValue v1, NodeValue v2) { return XSDFuncOp.strContains(v1, v2) ; }
     
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrContains(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrContains(e1, e2) ; } 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrDatatype.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrDatatype.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrDatatype.java
index 58b8bc1..b48b7d1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrDatatype.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrDatatype.java
@@ -37,8 +37,6 @@ public class E_StrDatatype extends ExprFunction2
         return NodeFunctions.strDatatype(v1, v2) ;
     }
     
-   
-    
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrDatatype(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrDatatype(e1, e2) ; } 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrEndsWith.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrEndsWith.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrEndsWith.java
index 748ed3b..9aa484f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrEndsWith.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrEndsWith.java
@@ -34,5 +34,5 @@ public class E_StrEndsWith extends ExprFunction2
     public NodeValue eval(NodeValue v1, NodeValue v2) { return XSDFuncOp.strEndsWith(v1, v2) ; }
     
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrEndsWith(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrEndsWith(e1, e2) ; } 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrLang.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrLang.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrLang.java
index b9d4666..c3acb6a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrLang.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrLang.java
@@ -39,5 +39,5 @@ public class E_StrLang extends ExprFunction2
     
     
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrLang(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrLang(e1, e2) ; } 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/cf268309/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrStartsWith.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrStartsWith.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrStartsWith.java
index d2d974b..10a2be4 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrStartsWith.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_StrStartsWith.java
@@ -34,5 +34,5 @@ public class E_StrStartsWith extends ExprFunction2
     public NodeValue eval(NodeValue v1, NodeValue v2) { return XSDFuncOp.strStartsWith(v1, v2) ; }
     
     @Override
-    public Expr copy(Expr expr1, Expr expr2) { return new E_StrStartsWith(expr1, expr2) ; } 
+    public Expr copy(Expr e1, Expr e2) { return new E_StrStartsWith(e1, e2) ; } 
 }


[05/12] jena git commit: Clean up whitespace inconsistencies

Posted by an...@apache.org.
Clean up whitespace inconsistencies


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

Branch: refs/heads/master
Commit: c2b8f7cb3762eb86df0afa9b5242fd2185ca184d
Parents: 9687f83
Author: Andy Seaborne <an...@seaborne.org>
Authored: Mon Dec 28 17:34:56 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Mon Dec 28 17:40:27 2015 +0000

----------------------------------------------------------------------
 .../org/apache/jena/atlas/lib/tuple/Tuple.java  | 12 +--
 .../org/apache/jena/atlas/lib/tuple/Tuple0.java |  6 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple1.java |  6 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple2.java |  6 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple3.java |  6 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple4.java |  4 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple5.java |  4 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple6.java |  4 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple7.java |  4 +-
 .../org/apache/jena/atlas/lib/tuple/Tuple8.java |  8 +-
 .../apache/jena/atlas/lib/tuple/TupleBase.java  |  3 +-
 .../jena/atlas/lib/tuple/TupleFactory.java      | 12 +--
 .../apache/jena/atlas/lib/tuple/TupleList.java  |  2 +-
 .../apache/jena/atlas/lib/tuple/TupleMap.java   | 94 ++++++++++----------
 .../org/apache/jena/atlas/lib/tuple/TupleN.java |  4 +-
 15 files changed, 87 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
index 1f60286..e3aa7e3 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
@@ -30,7 +30,7 @@ public interface Tuple<X> extends Iterable<X> {
      * @throws IndexOutOfBoundsException for i out of range 
      */
     public X get(int i) ;
-    
+
     /** length : elements are 0 to len()-1 */ 
     public int len() ;
 
@@ -38,18 +38,18 @@ public interface Tuple<X> extends Iterable<X> {
     public default List<X> asList() {
         return new TupleList<>(this) ;
     }
-    
+
     /** stream */
     public default Stream<X> stream() { 
         return asList().stream() ;
     }
-    
+
     /** forEach */
     @Override
     public default void forEach(Consumer<? super X> action) { 
         asList().forEach(action) ;
     }
-    
+
     /** Copy the Tuple into the array */ 
     public default void copyInto(X[] array) {
         copyInto(array, 0, len());
@@ -59,10 +59,10 @@ public interface Tuple<X> extends Iterable<X> {
     public default void copyInto(X[] array, int start) {
         copyInto(array, start, len());
     }
-    
+
     /** Copy the Tuple into the array */ 
     public void copyInto(X[] array, int start, int length) ;
-    
+
     /** Copy the Tuple into the array */ 
     public default X[] asArray(Class<X> cls) {
         X[] elts = ArrayUtils.alloc(cls, len()) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
index 534bd50..94ba91c 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple0.java
@@ -22,14 +22,14 @@ package org.apache.jena.atlas.lib.tuple;
  * A tuple of 0 items.
  */
 public class Tuple0<X> extends TupleBase<X> {
-    
+
     protected Tuple0() { }
-    
+
     @Override
     public final X get(int i) {
         throw new IndexOutOfBoundsException() ;
     }
-    
+
     @Override
     public final int len() {
         return 0 ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
index 9490732..dfb8601 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple1.java
@@ -23,18 +23,18 @@ package org.apache.jena.atlas.lib.tuple;
  */
 public class Tuple1<X> extends TupleBase<X> {
     protected final X x1 ; 
-    
+
     protected Tuple1(X x1) {
         this.x1 = x1 ;
     }
-    
+
     @Override
     public final X get(int i) {
         if ( i == 0 )
             return x1 ;
         throw new IndexOutOfBoundsException() ;
     }
-    
+
     @Override
     public final int len() {
         return 1 ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
index d90b730..bdf6679 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple2.java
@@ -24,12 +24,12 @@ package org.apache.jena.atlas.lib.tuple;
 public class Tuple2<X> extends TupleBase<X> {
     protected final X x1 ; 
     protected final X x2 ;
-    
+
     protected Tuple2(X x1, X x2) {
         this.x1 = x1 ;
         this.x2 = x2 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {
@@ -38,7 +38,7 @@ public class Tuple2<X> extends TupleBase<X> {
         }
         throw new IndexOutOfBoundsException() ;
     }
-    
+
     @Override
     public final int len() {
         return 2 ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
index fceac41..3d2dd29 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple3.java
@@ -25,13 +25,13 @@ public class Tuple3<X> extends TupleBase<X> {
     protected final X x1 ; 
     protected final X x2 ;
     protected final X x3 ;
-    
+
     protected Tuple3(X x1, X x2, X x3) {
         this.x1 = x1 ;
         this.x2 = x2 ;
         this.x3 = x3 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {
@@ -41,7 +41,7 @@ public class Tuple3<X> extends TupleBase<X> {
         }
         throw new IndexOutOfBoundsException() ;
     }
-    
+
     @Override
     public final int len() {
         return 3 ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
index 04d5fe8..dcb5066 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple4.java
@@ -26,14 +26,14 @@ public class Tuple4<X> extends TupleBase<X> {
     protected final X x2 ;
     protected final X x3 ;
     protected final X x4 ;
-    
+
     protected Tuple4(X x1, X x2, X x3, X x4) {
         this.x1 = x1 ;
         this.x2 = x2 ;
         this.x3 = x3 ;
         this.x4 = x4 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
index 5c465464..1d87dea 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple5.java
@@ -27,7 +27,7 @@ public class Tuple5<X> extends TupleBase<X> {
     protected final X x3 ;
     protected final X x4 ;
     protected final X x5 ;
-    
+
     protected Tuple5(X x1, X x2, X x3, X x4, X x5) {
         this.x1 = x1 ;
         this.x2 = x2 ;
@@ -35,7 +35,7 @@ public class Tuple5<X> extends TupleBase<X> {
         this.x4 = x4 ;
         this.x5 = x5 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
index c3faf3a..a4ba6ce 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple6.java
@@ -28,7 +28,7 @@ public class Tuple6<X> extends TupleBase<X> {
     protected final X x4 ;
     protected final X x5 ;
     protected final X x6 ;
-    
+
     protected Tuple6(X x1, X x2, X x3, X x4, X x5, X x6) {
         this.x1 = x1 ;
         this.x2 = x2 ;
@@ -37,7 +37,7 @@ public class Tuple6<X> extends TupleBase<X> {
         this.x5 = x5 ;
         this.x6 = x6 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
index c13d60c..b001fd1 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple7.java
@@ -29,7 +29,7 @@ public class Tuple7<X> extends TupleBase<X> {
     protected final X x5 ;
     protected final X x6 ;
     protected final X x7 ;
-    
+
     protected Tuple7(X x1, X x2, X x3, X x4, X x5, X x6, X x7) {
         this.x1 = x1 ;
         this.x2 = x2 ;
@@ -39,7 +39,7 @@ public class Tuple7<X> extends TupleBase<X> {
         this.x6 = x6 ;
         this.x7 = x7 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
index c233646..7039478 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple8.java
@@ -30,7 +30,7 @@ public class Tuple8<X> extends TupleBase<X> {
     protected final X x6 ;
     protected final X x7 ;
     protected final X x8 ;
-    
+
     protected Tuple8(X x1, X x2, X x3, X x4, X x5, X x6, X x7, X x8) {
         this.x1 = x1 ;
         this.x2 = x2 ;
@@ -41,7 +41,7 @@ public class Tuple8<X> extends TupleBase<X> {
         this.x7 = x7 ;
         this.x8 = x8 ;
     }
-    
+
     @Override
     public final X get(int i) {
         switch (i) {
@@ -56,8 +56,8 @@ public class Tuple8<X> extends TupleBase<X> {
         }
         throw new IndexOutOfBoundsException() ;
     }
-    
-   @Override
+
+    @Override
     public final int len() {
         return 8 ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
index 9291137..6e174ac 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
@@ -29,7 +29,6 @@ abstract class TupleBase<X> implements Tuple<X> {
     public Iterator<X> iterator() {
         return asList().iterator() ;
     }
-    
 
     @Override
     public void copyInto(X[] array, int start, int length) {
@@ -64,7 +63,7 @@ abstract class TupleBase<X> implements Tuple<X> {
                 return false ;
         return true;
     }
-    
+
     @Override
     public final String toString() {
         return asList().toString() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
index 04ca9c0..7632960 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleFactory.java
@@ -22,9 +22,9 @@ import java.util.List ;
 
 /** Tuple creation */
 public class TupleFactory {
-    
+
     private TupleFactory() {}
-    
+
     /** Create a Tuple */ 
     @SafeVarargs
     public static <X> Tuple<X> tuple(X...xs) {
@@ -43,7 +43,7 @@ public class TupleFactory {
                 return asTuple(xs) ;
         }
     }
-    
+
     /** Create a Tuple from an array */ 
     public static <X> Tuple<X> create(X[] xs) {
         switch(xs.length) {
@@ -65,7 +65,7 @@ public class TupleFactory {
     public static <X> Tuple<X> asTuple(X[] xs) {
         return TupleN.wrap(xs) ;
     }
-    
+
     /** Create a Tuple from a list */ 
     public static <X> Tuple<X> create(List<X> xs) {
         @SuppressWarnings("unchecked")
@@ -77,7 +77,7 @@ public class TupleFactory {
     public static <X> Tuple0<X> create0() {
         return new Tuple0<>() ;
     }
-    
+
     /** Create a Tuple of length 1 */
     public static <X> Tuple1<X> create1(X x1) {
         return new Tuple1<>(x1) ;
@@ -97,7 +97,7 @@ public class TupleFactory {
     public static <X> Tuple4<X> create4(X x1, X x2, X x3, X x4) {
         return new Tuple4<>(x1, x2, x3, x4) ;
     }
-    
+
     /** Create a Tuple of length 5 */
     public static <X> Tuple5<X> create5(X x1, X x2, X x3, X x4, X x5) {
         return new Tuple5<>(x1, x2, x3, x4, x5) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
index 9e166cd..60552d3 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleList.java
@@ -30,7 +30,7 @@ public class TupleList<X> extends AbstractList<X> implements RandomAccess {
     public TupleList(Tuple<X> tuple) {
         this.tuple = tuple ;
     }
-    
+
     @Override
     public X get(int index) {
         return tuple.get(index) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
index 2a220ed..f07b745 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
@@ -67,15 +67,15 @@ public class TupleMap {
      * Warning : map and unmap here do not correspond to fetch and map in
      * ColumnMap. That has confusing/inconsistent usage.
      */
-    
+
     // SPO->POS: get:{0<-1, 1<-2, 2<-0} put:{0->2, 1->0, 2->1}
-    
+
     // Map by where to fetch from source.
     // For SPO -> POS, get from 1 to go into 0 so (0->, 1->0 2->   
     // POS->SPO, is (0->1, 1->2, 2->0)
     // i.e. the location to fetch the mapped element from.
     private final int[]  getTransform ;
-    
+
     // Map by insertion into destination.
     // So SPO->POS is (0->2, 1->0, 2->1)
     // i.e. the location of the element after mapping.
@@ -111,7 +111,7 @@ public class TupleMap {
     public static <T> TupleMap create(String label, T[] input, T[] output) {
         return new TupleMap(label, compileMapping(input, output));
     }
-    
+
     /**
      * Construct a mapping - the elements are the mappings of a tuple
      * originally in the order 0,1,2,... so SPO->POS is 2,0,1 (SPO->POS so S->2,
@@ -162,7 +162,7 @@ public class TupleMap {
     public int putSlotIdx(int idx) {
         return putTransform[idx]; 
     }
-    
+
     /** 
      * Get the index of the i'th slot as it appears from a mapping : for
      * SPO->POS : 0'th slot is P so 0 returns 1 (the location in the tuple before mapping)
@@ -182,7 +182,7 @@ public class TupleMap {
     public int unmapIdx(int idx) {
         return putSlotIdx(idx) ; 
     }
-    
+
     /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied.
      */
     public <T> Tuple<T> map(Tuple<T> src) {
@@ -195,13 +195,13 @@ public class TupleMap {
     }
 
     // Does not work (java8) - assigning the return causes a runtime case exception 
-//    /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied */
-//    public <T> T[] map(T[] src) {
-//        @SuppressWarnings("unchecked")
-//        T[]dst = (T[])new Object[src.length] ;
-//        applyArray(src, dst, getTransform) ;
-//        return dst ;
-//    }
+    //    /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied */
+    //    public <T> T[] map(T[] src) {
+    //        @SuppressWarnings("unchecked")
+    //        T[]dst = (T[])new Object[src.length] ;
+    //        applyArray(src, dst, getTransform) ;
+    //        return dst ;
+    //    }
 
     /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied.
      * Returns the destination array.
@@ -214,13 +214,13 @@ public class TupleMap {
     }
 
     // Does not work (java8) - assigning the return causes a runtime case exception 
-//    /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied */
-//    public <T> T[] unmap(T[] src) {
-//        @SuppressWarnings("unchecked")
-//        T[]dst = (T[])new Object[src.length] ;
-//        applyArray(src, dst, putTransform) ;
-//        return dst ;
-//    }
+    //    /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied */
+    //    public <T> T[] unmap(T[] src) {
+    //        @SuppressWarnings("unchecked")
+    //        T[]dst = (T[])new Object[src.length] ;
+    //        applyArray(src, dst, putTransform) ;
+    //        return dst ;
+    //    }
 
     /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied.
      * Returns the destination array.
@@ -238,40 +238,40 @@ public class TupleMap {
         if ( src.len() != getTransform.length )
             throw new IllegalArgumentException("Lengths do not match: Tuple:"+src.len()+"; transform:"+getTransform.length) ;
         // Fast-track 1,2,3,4 ?
-//        // All this to avoid the temp array.
-//        switch(src.len()) {
-//            case 0: return src ;
-//            case 1: return src ;
-//            case 2: {
-//                T x1 = src.get(getTransform[0]);
-//                T x2 = src.get(getTransform[1]);
-//                return TupleFactory.create2(x1, x2) ;
-//            }
-//            case 3: {
-//                T x1 = src.get(getTransform[0]);
-//                T x2 = src.get(getTransform[1]);
-//                T x3 = src.get(getTransform[2]);
-//                return TupleFactory.create3(x1, x2, x3) ;
-//            }
-//            case 4: {
-//                T x1 = src.get(getTransform[0]);
-//                T x2 = src.get(getTransform[1]);
-//                T x3 = src.get(getTransform[2]);
-//                T x4 = src.get(getTransform[3]);
-//                return TupleFactory.create4(x1, x2, x3, x4) ;
-//            }
-//        }
-        
+        //        // All this to avoid the temp array.
+        //        switch(src.len()) {
+        //            case 0: return src ;
+        //            case 1: return src ;
+        //            case 2: {
+        //                T x1 = src.get(getTransform[0]);
+        //                T x2 = src.get(getTransform[1]);
+        //                return TupleFactory.create2(x1, x2) ;
+        //            }
+        //            case 3: {
+        //                T x1 = src.get(getTransform[0]);
+        //                T x2 = src.get(getTransform[1]);
+        //                T x3 = src.get(getTransform[2]);
+        //                return TupleFactory.create3(x1, x2, x3) ;
+        //            }
+        //            case 4: {
+        //                T x1 = src.get(getTransform[0]);
+        //                T x2 = src.get(getTransform[1]);
+        //                T x3 = src.get(getTransform[2]);
+        //                T x4 = src.get(getTransform[3]);
+        //                return TupleFactory.create4(x1, x2, x3, x4) ;
+        //            }
+        //        }
+
         @SuppressWarnings("unchecked")
         T[] elts = (T[])new Object[src.len()] ;
-        
+
         for ( int i = 0 ; i < src.len() ; i++ ) {
             int j = getTransform[i] ;
             elts[i] = src.get(j) ;
         }
         return TupleFactory.tuple(elts) ;
     }
-    
+
     /** Apply an index transformation */
     private <T> void applyArray(T[] src, T[] dst, int[] transform) {
         for ( int i = 0 ; i < src.length ; i++ ) {
@@ -279,7 +279,7 @@ public class TupleMap {
             dst[i] = src[j] ;
         }
     }
-    
+
     /**
      * Apply to an <em>unmapped</em> tuple to get the i'th slot after mapping :
      * SPO->POS : 0'th slot is P from SPO

http://git-wip-us.apache.org/repos/asf/jena/blob/c2b8f7cb/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
index 58e455e..6136496 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleN.java
@@ -30,12 +30,12 @@ public class TupleN<X> extends TupleBase<X> {
         X[] xs2 = Arrays.copyOf(xs, xs.length) ;
         return new TupleN<>(xs2) ;
     }
-    
+
     // When the array will not be modified.
     /*package*/ static <X> TupleN<X> wrap(X[] xs) {
         return new TupleN<>(xs) ;
     }
-    
+
     /** Put a TupleN wrapper around a X[].
      * The statics {@link #create} and {@link wrap} determine whether to copy or not.
      */


[09/12] jena git commit: Isolate argument list by making it a copy every time.

Posted by an...@apache.org.
Isolate argument list by making it a copy every time.

Use the unmodifiable wrapper for ExprFunctionN.



Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/86dc2d46
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/86dc2d46
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/86dc2d46

Branch: refs/heads/master
Commit: 86dc2d46ed5ab4ce694ad809b06556e14a45a228
Parents: cf26830
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 29 12:11:09 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Tue Dec 29 21:13:05 2015 +0000

----------------------------------------------------------------------
 .../src/main/java/org/apache/jena/sparql/expr/ExprFunction.java | 5 +----
 .../main/java/org/apache/jena/sparql/expr/ExprFunctionN.java    | 1 -
 .../src/main/java/org/apache/jena/sparql/expr/ExprList.java     | 2 +-
 3 files changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/86dc2d46/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunction.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunction.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunction.java
index 442618a..785d184 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunction.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunction.java
@@ -33,7 +33,6 @@ public abstract class ExprFunction extends ExprNode
 {
     protected FunctionLabel funcSymbol ;
     protected String opSign ;
-    private List<Expr> argList = null ;
     
     protected ExprFunction(String fName) {
         funcSymbol = new FunctionLabel(fName) ;
@@ -51,9 +50,7 @@ public abstract class ExprFunction extends ExprNode
 
     // ExprFunctionN overrides this.
     public List<Expr> getArgs() {
-        if ( argList != null )
-            return argList ; 
-        argList = new ArrayList<>() ;
+        List<Expr> argList = new ArrayList<>(numArgs()) ;
         for ( int i = 1 ; i <= numArgs() ; i++ )
             argList.add(this.getArg(i)) ;
         return argList ;        

http://git-wip-us.apache.org/repos/asf/jena/blob/86dc2d46/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunctionN.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunctionN.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunctionN.java
index 76300ad..e9916ee 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunctionN.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprFunctionN.java
@@ -50,7 +50,6 @@ public abstract class ExprFunctionN extends ExprFunction
         return exprList ;
     }
 
-
     @Override
     public Expr getArg(int i)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/86dc2d46/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
index 59fcb3a..a0125fb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/ExprList.java
@@ -93,7 +93,7 @@ public class ExprList implements Iterable<Expr>
 
     public void addAll(ExprList exprs)      { expressions.addAll(exprs.getList()) ; }
     public void add(Expr expr)              { expressions.add(expr) ; }
-    public List<Expr> getList()             { return expressions ; }
+    public List<Expr> getList()             { return Collections.unmodifiableList(expressions) ; }
     @Override
     public Iterator<Expr> iterator()        { return expressions.iterator() ; }
     


[11/12] jena git commit: From review of Tuple PR

Posted by an...@apache.org.
>From review of Tuple PR


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9b5aec9c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9b5aec9c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9b5aec9c

Branch: refs/heads/master
Commit: 9b5aec9c38110069cd2f33cdd0d7866e952902bb
Parents: 068113e
Author: Andy Seaborne <an...@seaborne.org>
Authored: Tue Dec 29 21:19:21 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Tue Dec 29 21:19:21 2015 +0000

----------------------------------------------------------------------
 .../org/apache/jena/atlas/lib/tuple/Tuple.java  | 27 +++++++++++++++-----
 .../apache/jena/atlas/lib/tuple/TupleBase.java  | 13 ----------
 2 files changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/9b5aec9c/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
index e3aa7e3..016e878d 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/Tuple.java
@@ -18,13 +18,17 @@
 
 package org.apache.jena.atlas.lib.tuple;
 
+import java.util.Iterator ;
 import java.util.List ;
 import java.util.function.Consumer ;
 import java.util.stream.Stream ;
+import java.util.stream.StreamSupport ;
 
 import org.apache.jena.atlas.lib.ArrayUtils ;
 
-/** A Tuple is the same class of item */
+/** A Tuple is a sequence of items of the same class of item.
+ *  Tuples are immutable.  .equals is "by value".
+ */
 public interface Tuple<X> extends Iterable<X> {
     /** Get the i'th element, for i in the range 0 to len()-1 
      * @throws IndexOutOfBoundsException for i out of range 
@@ -41,7 +45,7 @@ public interface Tuple<X> extends Iterable<X> {
 
     /** stream */
     public default Stream<X> stream() { 
-        return asList().stream() ;
+        return StreamSupport.stream(spliterator(), false) ;
     }
 
     /** forEach */
@@ -50,20 +54,29 @@ public interface Tuple<X> extends Iterable<X> {
         asList().forEach(action) ;
     }
 
-    /** Copy the Tuple into the array */ 
+    /** Iterable */
+    @Override
+    public default Iterator<X> iterator() {
+        return asList().iterator() ;
+    }
+
+    /** Copy the elements of this Tuple into the array */ 
     public default void copyInto(X[] array) {
         copyInto(array, 0, len());
     }
 
-    /** Copy the Tuple into the array */ 
+    /** Copy the elements of this Tuple into the array */ 
     public default void copyInto(X[] array, int start) {
         copyInto(array, start, len());
     }
 
-    /** Copy the Tuple into the array */ 
-    public void copyInto(X[] array, int start, int length) ;
+    /** Copy the elements of this Tuple into the array */ 
+    public default void copyInto(X[] array, int start, int length) {
+        for ( int i = 0 ; i < Math.min(length, len()) ; i++ )
+            array[i+start] = get(i) ;
+    }
 
-    /** Copy the Tuple into the array */ 
+    /** Copy the elements of this Tuple into a newly created array */ 
     public default X[] asArray(Class<X> cls) {
         X[] elts = ArrayUtils.alloc(cls, len()) ;
         for ( int i = 0 ; i < len() ; i++ )

http://git-wip-us.apache.org/repos/asf/jena/blob/9b5aec9c/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
index 6e174ac..90cdbf3 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleBase.java
@@ -18,24 +18,11 @@
 
 package org.apache.jena.atlas.lib.tuple;
 
-import java.util.Iterator ;
 import java.util.Objects ;
 
 abstract class TupleBase<X> implements Tuple<X> {
     protected TupleBase() {}
 
-    /** Iterable */
-    @Override
-    public Iterator<X> iterator() {
-        return asList().iterator() ;
-    }
-
-    @Override
-    public void copyInto(X[] array, int start, int length) {
-        for ( int i = 0 ; i < Math.min(length, len()) ; i++ )
-            array[i+start] = get(i) ;
-    }
-
     @Override
     public final
     int hashCode() {


[10/12] jena git commit: Align with jena-core change (JENA-1082)

Posted by an...@apache.org.
Align with jena-core change (JENA-1082)


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/068113ec
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/068113ec
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/068113ec

Branch: refs/heads/master
Commit: 068113ec9c16bea6bb4409e348c8b3de40148e93
Parents: 86dc2d4
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 29 21:09:06 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Tue Dec 29 21:13:05 2015 +0000

----------------------------------------------------------------------
 .../jena/permissions/model/impl/SecuredModelImpl.java     | 10 ++++++++++
 1 file changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/068113ec/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
----------------------------------------------------------------------
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
index 1e11238..ca1a52c 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
@@ -1529,6 +1529,16 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 				.listLiteralStatements(subject, predicate, object));
 	}
 
+    @Override
+    public SecuredStatementIterator listLiteralStatements(
+            final Resource subject, final Property predicate, final int object)
+            throws ReadDeniedException, AuthenticationRequiredException {
+        checkRead();
+        return new SecuredStatementIterator(holder.getSecuredItem(), holder
+                .getBaseItem()
+                .listLiteralStatements(subject, predicate, object));
+    }
+
 	@Override
 	public NsIterator listNameSpaces() throws ReadDeniedException,
 			AuthenticationRequiredException {


[12/12] jena git commit: JENA-1107: Improve Tuple. Merge commit 'refs/pull/115/head'

Posted by an...@apache.org.
JENA-1107: Improve Tuple. Merge commit 'refs/pull/115/head'

This closes #115.


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

Branch: refs/heads/master
Commit: d3603482019d9bfd0295f96f5a767f4cebc3e71a
Parents: 6fbecf1 9b5aec9
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 29 21:20:50 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Dec 29 21:20:50 2015 +0000

----------------------------------------------------------------------
 .../atlas/web/auth/ScopedNTAuthenticator.java   |   9 +-
 .../jena/riot/lang/PipedTuplesStream.java       |   2 +-
 .../org/apache/jena/sparql/algebra/OpVars.java  |   9 +-
 .../optimize/TransformFilterImplicitJoin.java   |   4 +-
 .../optimize/TransformImplicitLeftJoin.java     |   4 +-
 .../org/apache/jena/sparql/util/IsoMatcher.java |  12 +-
 .../org/apache/jena/common/TestIsoMatcher.java  |   6 +-
 .../java/org/apache/jena/atlas/lib/FileOps.java |   7 +-
 .../java/org/apache/jena/atlas/lib/Tuple.java   | 131 ------
 .../org/apache/jena/atlas/lib/tuple/Tuple.java  |  86 ++++
 .../org/apache/jena/atlas/lib/tuple/Tuple0.java |  37 ++
 .../org/apache/jena/atlas/lib/tuple/Tuple1.java |  42 ++
 .../org/apache/jena/atlas/lib/tuple/Tuple2.java |  46 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple3.java |  49 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple4.java |  52 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple5.java |  55 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple6.java |  58 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple7.java |  61 +++
 .../org/apache/jena/atlas/lib/tuple/Tuple8.java |  64 +++
 .../apache/jena/atlas/lib/tuple/TupleBase.java  |  59 +++
 .../jena/atlas/lib/tuple/TupleFactory.java      | 122 ++++++
 .../apache/jena/atlas/lib/tuple/TupleList.java  |  43 ++
 .../apache/jena/atlas/lib/tuple/TupleMap.java   | 404 +++++++++++++++++++
 .../org/apache/jena/atlas/lib/tuple/TupleN.java |  55 +++
 .../jena/atlas/lib/tuple/package-info.java      |  34 ++
 .../java/org/apache/jena/atlas/TC_Atlas.java    |   2 +
 .../org/apache/jena/atlas/lib/TestFileOps.java  |   2 +-
 .../apache/jena/atlas/lib/tuple/TS_Tuple.java   |  32 ++
 .../apache/jena/atlas/lib/tuple/TestTuple.java  | 225 +++++++++++
 .../jena/atlas/lib/tuple/TestTupleMap.java      | 186 +++++++++
 .../hadoop/rdf/types/NodeTupleWritable.java     |  15 +-
 .../jena/hadoop/rdf/io/types/RdfTypesTest.java  |  16 +-
 .../io/output/writers/AbstractNodeWriter.java   |   6 +-
 .../org/apache/jena/tdb/base/file/FileSet.java  |   2 +-
 .../org/apache/jena/tdb/index/IndexLib.java     |   2 +-
 .../java/org/apache/jena/tdb/lib/ColumnMap.java |  11 +-
 .../java/org/apache/jena/tdb/lib/DumpOps.java   |   5 +-
 .../java/org/apache/jena/tdb/lib/TupleLib.java  |  30 +-
 .../apache/jena/tdb/solver/OpExecutorTDB1.java  |   2 +-
 .../java/org/apache/jena/tdb/solver/QC2.java    |   2 +-
 .../org/apache/jena/tdb/solver/SolverLib.java   |  23 +-
 .../tdb/solver/StageGeneratorDirectTDB.java     |   2 +-
 .../apache/jena/tdb/solver/StageMatchTuple.java |  24 +-
 .../apache/jena/tdb/store/DatasetGraphTDB.java  |   2 +-
 .../jena/tdb/store/DatasetPrefixesTDB.java      |   2 +-
 .../org/apache/jena/tdb/store/GraphTDB.java     |   7 +-
 .../org/apache/jena/tdb/store/QuadTable.java    |   2 +-
 .../org/apache/jena/tdb/store/TripleTable.java  |   2 +-
 .../store/bulkloader/LoaderNodeTupleTable.java  |   2 +-
 .../tdb/store/bulkloader2/CmdIndexCopy.java     |   2 +-
 .../store/nodetupletable/NodeTupleTable.java    |   2 +-
 .../nodetupletable/NodeTupleTableConcrete.java  |   9 +-
 .../nodetupletable/NodeTupleTableView.java      |  13 +-
 .../nodetupletable/NodeTupleTableWrapper.java   |   2 +-
 .../jena/tdb/store/tupletable/TupleIndex.java   |   4 +-
 .../tdb/store/tupletable/TupleIndexBase.java    |  14 +-
 .../tdb/store/tupletable/TupleIndexRecord.java  |  12 +-
 .../tdb/store/tupletable/TupleIndexWrapper.java |   2 +-
 .../jena/tdb/store/tupletable/TupleTable.java   |  14 +-
 .../java/org/apache/jena/tdb/sys/DebugTDB.java  |   2 +-
 .../java/org/apache/jena/tdb/sys/FileRef.java   |   2 +-
 jena-tdb/src/main/java/tdb/tdbstats.java        |   2 +-
 jena-tdb/src/main/java/tdb/tools/dumpbpt.java   |   2 +-
 .../src/main/java/tdb/tools/tdbgenindex.java    |   2 +-
 .../org/apache/jena/tdb/lib/TestColumnMap.java  |  24 +-
 .../org/apache/jena/tdb/solver/TestStats.java   |   2 +-
 .../apache/jena/tdb/store/TestQuadFilter.java   |   4 +-
 .../tupletable/AbstractTestTupleIndex.java      |  96 ++---
 .../store/tupletable/TestTupleIndexRecord.java  |   2 +-
 .../tupletable/TestTupleIndexRecordDirect.java  |  64 ++-
 .../tdb/store/tupletable/TestTupleTable.java    |  30 +-
 71 files changed, 1978 insertions(+), 383 deletions(-)
----------------------------------------------------------------------



[03/12] jena git commit: JENA-1107: Changes due to reworking Tuple.

Posted by an...@apache.org.
JENA-1107: Changes due to reworking Tuple.

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

Branch: refs/heads/master
Commit: c665f63004fee2d465f2cbcb48d2defd17e12858
Parents: 571e975
Author: Andy Seaborne <an...@seaborne.org>
Authored: Mon Dec 28 16:27:48 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Mon Dec 28 16:27:48 2015 +0000

----------------------------------------------------------------------
 .../atlas/web/auth/ScopedNTAuthenticator.java   |  9 +-
 .../jena/riot/lang/PipedTuplesStream.java       |  2 +-
 .../org/apache/jena/sparql/algebra/OpVars.java  |  9 +-
 .../optimize/TransformFilterImplicitJoin.java   |  4 +-
 .../optimize/TransformImplicitLeftJoin.java     |  4 +-
 .../org/apache/jena/sparql/util/IsoMatcher.java | 12 +--
 .../org/apache/jena/common/TestIsoMatcher.java  |  6 +-
 .../hadoop/rdf/types/NodeTupleWritable.java     | 15 +--
 .../jena/hadoop/rdf/io/types/RdfTypesTest.java  | 16 ++--
 .../io/output/writers/AbstractNodeWriter.java   |  6 +-
 .../org/apache/jena/tdb/base/file/FileSet.java  |  2 +-
 .../org/apache/jena/tdb/index/IndexLib.java     |  2 +-
 .../java/org/apache/jena/tdb/lib/ColumnMap.java | 11 ++-
 .../java/org/apache/jena/tdb/lib/DumpOps.java   |  5 +-
 .../java/org/apache/jena/tdb/lib/TupleLib.java  | 30 +++---
 .../apache/jena/tdb/solver/OpExecutorTDB1.java  |  2 +-
 .../java/org/apache/jena/tdb/solver/QC2.java    |  2 +-
 .../org/apache/jena/tdb/solver/SolverLib.java   | 23 +++--
 .../tdb/solver/StageGeneratorDirectTDB.java     |  2 +-
 .../apache/jena/tdb/solver/StageMatchTuple.java | 24 +++--
 .../apache/jena/tdb/store/DatasetGraphTDB.java  |  2 +-
 .../jena/tdb/store/DatasetPrefixesTDB.java      |  2 +-
 .../org/apache/jena/tdb/store/GraphTDB.java     |  7 +-
 .../org/apache/jena/tdb/store/QuadTable.java    |  2 +-
 .../org/apache/jena/tdb/store/TripleTable.java  |  2 +-
 .../store/bulkloader/LoaderNodeTupleTable.java  |  2 +-
 .../tdb/store/bulkloader2/CmdIndexCopy.java     |  2 +-
 .../store/nodetupletable/NodeTupleTable.java    |  2 +-
 .../nodetupletable/NodeTupleTableConcrete.java  |  9 +-
 .../nodetupletable/NodeTupleTableView.java      | 13 ++-
 .../nodetupletable/NodeTupleTableWrapper.java   |  2 +-
 .../jena/tdb/store/tupletable/TupleIndex.java   |  4 +-
 .../tdb/store/tupletable/TupleIndexBase.java    | 14 +--
 .../tdb/store/tupletable/TupleIndexRecord.java  | 12 +--
 .../tdb/store/tupletable/TupleIndexWrapper.java |  2 +-
 .../jena/tdb/store/tupletable/TupleTable.java   | 14 +--
 .../java/org/apache/jena/tdb/sys/DebugTDB.java  |  2 +-
 .../java/org/apache/jena/tdb/sys/FileRef.java   |  2 +-
 jena-tdb/src/main/java/tdb/tdbstats.java        |  2 +-
 jena-tdb/src/main/java/tdb/tools/dumpbpt.java   |  2 +-
 .../src/main/java/tdb/tools/tdbgenindex.java    |  2 +-
 .../org/apache/jena/tdb/lib/TestColumnMap.java  | 24 ++---
 .../org/apache/jena/tdb/solver/TestStats.java   |  2 +-
 .../apache/jena/tdb/store/TestQuadFilter.java   |  4 +-
 .../tupletable/AbstractTestTupleIndex.java      | 96 ++++++++++----------
 .../store/tupletable/TestTupleIndexRecord.java  |  2 +-
 .../tupletable/TestTupleIndexRecordDirect.java  | 64 +++++++------
 .../tdb/store/tupletable/TestTupleTable.java    | 30 +++---
 48 files changed, 260 insertions(+), 249 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/main/java/org/apache/jena/atlas/web/auth/ScopedNTAuthenticator.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/web/auth/ScopedNTAuthenticator.java b/jena-arq/src/main/java/org/apache/jena/atlas/web/auth/ScopedNTAuthenticator.java
index 84f10f5..f389855 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/web/auth/ScopedNTAuthenticator.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/web/auth/ScopedNTAuthenticator.java
@@ -26,7 +26,8 @@ import java.util.Map.Entry;
 import org.apache.http.auth.Credentials;
 import org.apache.http.auth.NTCredentials;
 import org.apache.jena.atlas.lib.Pair;
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 
 /**
  * <p>
@@ -62,7 +63,7 @@ public class ScopedNTAuthenticator extends AbstractScopedAuthenticator<Pair<Tupl
     public ScopedNTAuthenticator(URI target, String username, char[] password, String workstation, String domain) {
         if (target == null)
             throw new IllegalArgumentException("Target URI cannot be null");
-        this.credentials.put(target, Pair.create(Tuple.createTuple(username, workstation, domain), password));
+        this.credentials.put(target, Pair.create(TupleFactory.tuple(username, workstation, domain), password));
     }
 
     /**
@@ -80,7 +81,7 @@ public class ScopedNTAuthenticator extends AbstractScopedAuthenticator<Pair<Tupl
                 continue;
             if (entry.getValue().getLeft() == null)
                 throw new IllegalArgumentException("Credentials tuple should be non-null");
-            if (entry.getValue().getLeft().size() < 3)
+            if (entry.getValue().getLeft().len() < 3)
                 throw new IllegalArgumentException(
                         "Credentials tuple should contain at least three fields, 0 = user name, 1 = workstation, 2 = domain");
             this.credentials.put(entry.getKey(), entry.getValue());
@@ -105,7 +106,7 @@ public class ScopedNTAuthenticator extends AbstractScopedAuthenticator<Pair<Tupl
     public void addCredentials(URI target, String username, char[] password, String workstation, String domain) {
         if (target == null)
             throw new IllegalArgumentException("Target URI cannot be null");
-        this.credentials.put(target, Pair.create(Tuple.createTuple(username, workstation, domain), password));
+        this.credentials.put(target, Pair.create(TupleFactory.tuple(username, workstation, domain), password));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedTuplesStream.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedTuplesStream.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedTuplesStream.java
index 599d9ec..4bdb728 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedTuplesStream.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/PipedTuplesStream.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.lang ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.riot.system.StreamRDF ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
index 79fb69a..c2d9905 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
@@ -23,7 +23,8 @@ import static org.apache.jena.sparql.core.Vars.addVar ;
 import java.util.* ;
 
 import org.apache.jena.atlas.lib.SetUtils ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.sparql.algebra.OpWalker.WalkerVisitor ;
@@ -67,7 +68,6 @@ public class OpVars
         OpWalker.walk(new WalkerVisitorFixed(visitor, acc), op) ;
     }
     
-    @SuppressWarnings("unchecked")
     public static Tuple<Set<Var>> mentionedVarsByPosition(Op op) {
         Set<Var> graphAcc = collector() ;
         Set<Var> subjAcc = collector() ;
@@ -76,10 +76,9 @@ public class OpVars
         Set<Var> unknownAcc = collector() ;
         OpVarsPatternWithPositions visitor = new OpVarsPatternWithPositions(graphAcc, subjAcc, predAcc, objAcc, unknownAcc, false);
         OpWalker.walk(op, visitor);
-        return Tuple.createTuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc);
+        return TupleFactory.tuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc);
     }
     
-    @SuppressWarnings("unchecked")
     public static Tuple<Set<Var>> mentionedVarsByPosition(Op... ops) {
         Set<Var> graphAcc = collector() ;
         Set<Var> subjAcc = collector() ;
@@ -89,7 +88,7 @@ public class OpVars
         OpVarsPatternWithPositions visitor = new OpVarsPatternWithPositions(graphAcc, subjAcc, predAcc, objAcc, unknownAcc, false);
         for (Op op : ops)
             OpWalker.walk(op, visitor);
-        return Tuple.createTuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc);
+        return TupleFactory.tuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc);
     }
 
     // All mentioned variables regardless of scope/visibility.

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterImplicitJoin.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterImplicitJoin.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterImplicitJoin.java
index 48de6f0..93bceba 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterImplicitJoin.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterImplicitJoin.java
@@ -27,7 +27,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.jena.atlas.lib.Pair;
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.sparql.algebra.Op ;
 import org.apache.jena.sparql.algebra.OpVars ;
 import org.apache.jena.sparql.algebra.TransformCopy ;
@@ -217,7 +217,7 @@ public class TransformFilterImplicitJoin extends TransformCopy {
         // substitution will be safe
 
         // Should get 5 sets
-        if (varsByPosition.size() != 5)
+        if (varsByPosition.len() != 5)
             return false;
 
         // If anything is used in the object/unknown position then we

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformImplicitLeftJoin.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformImplicitLeftJoin.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformImplicitLeftJoin.java
index cfb0215..b785a51 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformImplicitLeftJoin.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformImplicitLeftJoin.java
@@ -27,7 +27,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.jena.atlas.lib.Pair;
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.sparql.algebra.Op ;
 import org.apache.jena.sparql.algebra.OpVars ;
 import org.apache.jena.sparql.algebra.TransformCopy ;
@@ -261,7 +261,7 @@ public class TransformImplicitLeftJoin extends TransformCopy {
         // substitution will be safe
 
         // Should get 5 sets
-        if (varsByPosition.size() != 5)
+        if (varsByPosition.len() != 5)
             return false;
 
         // If anything is used in the object/unknown position then we

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/main/java/org/apache/jena/sparql/util/IsoMatcher.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/IsoMatcher.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/IsoMatcher.java
index 4656039..57a84a6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/IsoMatcher.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/IsoMatcher.java
@@ -18,14 +18,14 @@
 
 package org.apache.jena.sparql.util ;
 
-import static org.apache.jena.atlas.lib.Tuple.createTuple ;
+import static org.apache.jena.atlas.lib.tuple.TupleFactory.tuple ;
 
 import java.util.ArrayList ;
 import java.util.Collection ;
 import java.util.Iterator ;
 import java.util.List ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
@@ -148,7 +148,7 @@ public class IsoMatcher
         List<Tuple<Node>> tuples = new ArrayList<>() ;
         for ( ; iter.hasNext() ; ) {
             Triple t = iter.next() ;
-            Tuple<Node> tuple = createTuple(t.getSubject(), t.getPredicate(), t.getObject()) ;
+            Tuple<Node> tuple = tuple(t.getSubject(), t.getPredicate(), t.getObject()) ;
             tuples.add(tuple) ;
         }
         return tuples ;
@@ -158,7 +158,7 @@ public class IsoMatcher
         List<Tuple<Node>> tuples = new ArrayList<>() ;
         for ( ; iter.hasNext() ; ) {
             Quad q = iter.next() ;
-            Tuple<Node> tuple = createTuple(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject()) ;
+            Tuple<Node> tuple = tuple(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject()) ;
             tuples.add(tuple) ;
         }
         return tuples ;
@@ -229,11 +229,11 @@ public class IsoMatcher
 
     // Maybe several mappings!
     private Mapping gen(Tuple<Node> t1, Tuple<Node> t2, Mapping _mapping) {
-        if ( t1.size() != t2.size() )
+        if ( t1.len() != t2.len() )
             return null ;
         
         Mapping mapping = _mapping ;
-        for ( int i = 0 ; i < t1.size() ; i++ ) {
+        for ( int i = 0 ; i < t1.len() ; i++ ) {
             Node n1 = t1.get(i) ;
             Node n2 = t2.get(i) ;
             if ( ! nodeTest.equal(n1, n2) ) {

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-arq/src/test/java/org/apache/jena/common/TestIsoMatcher.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/common/TestIsoMatcher.java b/jena-arq/src/test/java/org/apache/jena/common/TestIsoMatcher.java
index a955432..1bc26f0 100644
--- a/jena-arq/src/test/java/org/apache/jena/common/TestIsoMatcher.java
+++ b/jena-arq/src/test/java/org/apache/jena/common/TestIsoMatcher.java
@@ -22,7 +22,8 @@ import java.util.ArrayList ;
 import java.util.List ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.sparql.core.DatasetGraph ;
@@ -191,13 +192,12 @@ public class TestIsoMatcher extends BaseTest
         {
             Item item = SSE.parse(s) ;
             List<Node> list = BuilderNode.buildNodeList(item) ;
-            Tuple<Node> tuple = Tuple.create(list.toArray(T)) ;
+            Tuple<Node> tuple = TupleFactory.tuple(list.toArray(T)) ;
             tuples.add(tuple) ;
         }
         return tuples ;
     }
 
-
     private void testGraph(String s1, String s2, boolean iso) {
         testGraph$(s1, s2, iso) ;
         testGraph$(s2, s1, iso) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-elephas/jena-elephas-common/src/main/java/org/apache/jena/hadoop/rdf/types/NodeTupleWritable.java
----------------------------------------------------------------------
diff --git a/jena-elephas/jena-elephas-common/src/main/java/org/apache/jena/hadoop/rdf/types/NodeTupleWritable.java b/jena-elephas/jena-elephas-common/src/main/java/org/apache/jena/hadoop/rdf/types/NodeTupleWritable.java
index f069191..9bf7309 100644
--- a/jena-elephas/jena-elephas-common/src/main/java/org/apache/jena/hadoop/rdf/types/NodeTupleWritable.java
+++ b/jena-elephas/jena-elephas-common/src/main/java/org/apache/jena/hadoop/rdf/types/NodeTupleWritable.java
@@ -18,10 +18,11 @@
 
 package org.apache.jena.hadoop.rdf.types;
 
-import java.io.DataInput;
-import java.io.IOException;
+import java.io.DataInput;
+import java.io.IOException;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 
 /**
@@ -70,11 +71,13 @@ public class NodeTupleWritable extends AbstractNodeTupleWritable<Tuple<Node>> {
 
     @Override
     protected Tuple<Node> createTuple(Node[] ns) {
-        return Tuple.create(ns);
+        return TupleFactory.create(ns);
     }
 
     @Override
-    protected Node[] createNodes(Tuple<Node> tuple) {
-        return tuple.tuple();
+    protected Node[] createNodes(Tuple<Node> tuple) {
+        Node n[] = new Node[tuple.len()] ;
+        tuple.copyInto(n);
+        return n ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-elephas/jena-elephas-common/src/test/java/org/apache/jena/hadoop/rdf/io/types/RdfTypesTest.java
----------------------------------------------------------------------
diff --git a/jena-elephas/jena-elephas-common/src/test/java/org/apache/jena/hadoop/rdf/io/types/RdfTypesTest.java b/jena-elephas/jena-elephas-common/src/test/java/org/apache/jena/hadoop/rdf/io/types/RdfTypesTest.java
index 176ccd5..9918f2b 100644
--- a/jena-elephas/jena-elephas-common/src/test/java/org/apache/jena/hadoop/rdf/io/types/RdfTypesTest.java
+++ b/jena-elephas/jena-elephas-common/src/test/java/org/apache/jena/hadoop/rdf/io/types/RdfTypesTest.java
@@ -18,16 +18,11 @@
 
 package org.apache.jena.hadoop.rdf.io.types;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.IOException;
+import java.io.* ;
 
 import org.apache.hadoop.io.WritableComparable;
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import static org.apache.jena.atlas.lib.tuple.TupleFactory.tuple ;
 import org.apache.jena.datatypes.xsd.XSDDatatype ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
@@ -397,8 +392,9 @@ public class RdfTypesTest {
      */
     @Test
     public void tuple_writable_01() throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException {
-        Tuple<Node> t = Tuple.createTuple(NodeFactory.createURI("http://one"), NodeFactory.createURI("http://two"), NodeFactory.createLiteral("value"),
-                NodeFactory.createLiteral("foo"), NodeFactory.createURI("http://three"));
+        Tuple<Node> t = tuple(NodeFactory.createURI("http://one"), NodeFactory.createURI("http://two"),
+                              NodeFactory.createLiteral("value"),
+                              NodeFactory.createLiteral("foo"), NodeFactory.createURI("http://three"));
         NodeTupleWritable tw = new NodeTupleWritable(t);
         testWriteRead(tw, tw);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/output/writers/AbstractNodeWriter.java
----------------------------------------------------------------------
diff --git a/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/output/writers/AbstractNodeWriter.java b/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/output/writers/AbstractNodeWriter.java
index 4ab238f..e46b3e1 100644
--- a/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/output/writers/AbstractNodeWriter.java
+++ b/jena-elephas/jena-elephas-io/src/main/java/org/apache/jena/hadoop/rdf/io/output/writers/AbstractNodeWriter.java
@@ -25,7 +25,7 @@ import org.apache.hadoop.mapreduce.RecordWriter;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 import org.apache.jena.atlas.io.AWriter;
 import org.apache.jena.atlas.io.Writer2;
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.hadoop.rdf.types.NodeTupleWritable;
@@ -157,7 +157,9 @@ public abstract class AbstractNodeWriter<TValue> extends RecordWriter<NodeWritab
             this.writeNodes(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject());
         } else if (value instanceof NodeTupleWritable) {
             Tuple<Node> tuple = ((NodeTupleWritable) value).get();
-            this.writeNodes(tuple.tuple());
+            Node[] n = new Node[tuple.len()] ;
+            tuple.copyInto(n);
+            this.writeNodes(n);
         } else {
             // For arbitrary values just toString() them
             this.writer.write(value.toString());

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/base/file/FileSet.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/base/file/FileSet.java b/jena-tdb/src/main/java/org/apache/jena/tdb/base/file/FileSet.java
index 048c6e6..46c0b57 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/base/file/FileSet.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/base/file/FileSet.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.base.file ;
 import java.io.File ;
 
 import org.apache.jena.atlas.lib.FileOps ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
 

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/index/IndexLib.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/index/IndexLib.java b/jena-tdb/src/main/java/org/apache/jena/tdb/index/IndexLib.java
index aed4bb3..2d8b33e 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/index/IndexLib.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/index/IndexLib.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.index;
 
 import java.util.Iterator;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.store.NodeId ;
 
 public class IndexLib

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/lib/ColumnMap.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/lib/ColumnMap.java b/jena-tdb/src/main/java/org/apache/jena/tdb/lib/ColumnMap.java
index a98ac28..dd0571b 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/lib/ColumnMap.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/lib/ColumnMap.java
@@ -26,7 +26,8 @@ import java.util.List ;
 import org.apache.jena.atlas.AtlasException ;
 import org.apache.jena.atlas.lib.ListUtils ;
 import org.apache.jena.atlas.lib.StrUtils ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 
 
 
@@ -155,17 +156,17 @@ public class ColumnMap
     private <T> Tuple<T> map(Tuple<T> src, int[] map)
     {
         @SuppressWarnings("unchecked")
-        T[] elts = (T[])new Object[src.size()] ;
+        T[] elts = (T[])new Object[src.len()] ;
         
-        for ( int i = 0 ; i < src.size() ; i++ )
+        for ( int i = 0 ; i < src.len() ; i++ )
         {
             int j = map[i] ;
             elts[j] = src.get(i) ;
         }
-        return Tuple.create(elts) ;
+        return TupleFactory.asTuple(elts) ;
     }
     
-    /** Compile a mapping encoded as single charcaters e.g. "SPO", "POS" */
+    /** Compile a mapping encoded as single characters e.g. "SPO", "POS" */
     static int[] compileMapping(String domain, String range)
     {
         List<Character> input = StrUtils.toCharList(domain) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/lib/DumpOps.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/lib/DumpOps.java b/jena-tdb/src/main/java/org/apache/jena/tdb/lib/DumpOps.java
index 9622cef..8265d33 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/lib/DumpOps.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/lib/DumpOps.java
@@ -29,7 +29,8 @@ import jena.cmd.CmdException;
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.lib.ByteBufferLib ;
 import org.apache.jena.atlas.lib.Pair ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Dataset ;
 import org.apache.jena.riot.out.NodeFmtLib ;
@@ -172,7 +173,7 @@ public class DumpOps
         NodeId[] nodeIds = new NodeId[N] ;
         Arrays.fill(nodeIds, NodeId.NodeIdAny) ;
         
-        Tuple<NodeId> t = Tuple.create(nodeIds) ;
+        Tuple<NodeId> t = TupleFactory.asTuple(nodeIds) ;
 
         Iterator<Tuple<NodeId>> iter = tupleTable.find(t) ;
         for ( ; iter.hasNext() ; )

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/lib/TupleLib.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/lib/TupleLib.java b/jena-tdb/src/main/java/org/apache/jena/tdb/lib/TupleLib.java
index 9549d6c..dd42a67 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/lib/TupleLib.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/lib/TupleLib.java
@@ -21,14 +21,12 @@ package org.apache.jena.tdb.lib;
 import static org.apache.jena.tdb.sys.SystemTDB.SizeOfLong ;
 
 import java.util.Iterator;
+
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Bytes ;
 import org.apache.jena.atlas.lib.InternalErrorException ;
-import org.apache.jena.atlas.lib.Tuple ;
-
-
-
-
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.sparql.core.Quad ;
@@ -63,25 +61,25 @@ public class TupleLib
     
     public static Tuple<Node> tupleNodes(NodeTable nodeTable, Tuple<NodeId> ids) 
     {
-        int N = ids.size() ;
+        int N = ids.len() ;
         Node[] n = new Node[N] ;
         for ( int i = 0 ; i < N ; i++ )
             n[i] = nodeTable.getNodeForNodeId(ids.get(i)) ;
-        return Tuple.create(n) ;
+        return TupleFactory.asTuple(n) ;
     }
     
     public static Tuple<NodeId> tupleNodeIds(NodeTable nodeTable, Tuple<Node> nodes) 
     {
-        int N = nodes.size() ;
+        int N = nodes.len() ;
         NodeId[] n = new NodeId[N] ;
         for ( int i = 0 ; i < N ; i++ )
             n[i] = nodeTable.getNodeIdForNode(nodes.get(i)) ;
-        return Tuple.create(n) ;
+        return TupleFactory.asTuple(n) ;
     }
     
     private static Triple triple(NodeTable nodeTable, Tuple<NodeId> tuple) 
     {
-        if ( tuple.size() != 3 )
+        if ( tuple.len() != 3 )
             throw new TDBException("Tuple is not of length 3: "+tuple) ;
         return triple(nodeTable, tuple.get(0), tuple.get(1), tuple.get(2)) ;
     }
@@ -120,7 +118,7 @@ public class TupleLib
     
     private static Quad quad(NodeTable nodeTable, Tuple<NodeId> tuple) 
     {
-        if ( tuple.size() != 4 )
+        if ( tuple.len() != 4 )
             throw new TDBException("Tuple is not of length 4: "+tuple) ;
         return quad(nodeTable, tuple.get(0), tuple.get(1), tuple.get(2), tuple.get(3)) ;
     }
@@ -147,14 +145,13 @@ public class TupleLib
                 j = cMap.fetchSlotIdx(i) ;
             nodeIds[j] = id ;
         }
-        return Tuple.create(nodeIds) ;
+        return TupleFactory.asTuple(nodeIds) ;
     }
 
-
     public static Record record(RecordFactory factory, Tuple<NodeId> tuple, ColumnMap cMap) 
     {
-        byte[] b = new byte[tuple.size()*NodeId.SIZE] ;
-        for ( int i = 0 ; i < tuple.size() ; i++ )
+        byte[] b = new byte[tuple.len()*NodeId.SIZE] ;
+        for ( int i = 0 ; i < tuple.len() ; i++ )
         {
             int j = cMap.mapSlotIdx(i) ;
             // i'th Nodeid goes to j'th bytes slot.
@@ -163,7 +160,4 @@ public class TupleLib
             
         return factory.create(b) ;
     }
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/solver/OpExecutorTDB1.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/OpExecutorTDB1.java b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/OpExecutorTDB1.java
index eeff69c..f039baa 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/OpExecutorTDB1.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/OpExecutorTDB1.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.solver;
 
 import java.util.function.Predicate;
 
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/solver/QC2.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/QC2.java b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/QC2.java
index 331ac59..ac05a76 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/QC2.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/QC2.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.solver;
 
 import java.util.function.Predicate;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.sparql.util.Context ;
 import org.apache.jena.tdb.TDBException ;
 import org.apache.jena.tdb.store.NodeId ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/solver/SolverLib.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/SolverLib.java b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/SolverLib.java
index cf813e1..d9d469d 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/SolverLib.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/SolverLib.java
@@ -18,15 +18,17 @@
 
 package org.apache.jena.tdb.solver;
 
+import static org.apache.jena.atlas.lib.tuple.TupleFactory.tuple ;
 import static org.apache.jena.tdb.lib.Lib2.printAbbrev ;
 
 import java.util.* ;
-import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
-import org.apache.jena.atlas.iterator.* ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.iterator.IteratorWrapper ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.query.QueryCancelledException ;
@@ -122,10 +124,10 @@ public class SolverLib
             Tuple<Node> tuple = null ;
             if ( graphNode == null )
                 // 3-tuples
-                tuple = Tuple.createTuple(triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
+                tuple = tuple(triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
             else
                 // 4-tuples.
-                tuple = Tuple.createTuple(graphNode, triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
+                tuple = tuple(graphNode, triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
             chain = solve(nodeTupleTable, tuple, anyGraph, chain, filter, execCxt) ;
             chain = makeAbortable(chain, killList) ; 
         }
@@ -296,8 +298,7 @@ public class SolverLib
         if ( filter != null )
             iter1 = Iter.filter(iter1, filter) ;
 
-        Iterator<NodeId> iter2 = Tuple.project(0, iter1) ;
-        // Project is cheap - don't brother wrapping iter1
+        Iterator<NodeId> iter2 = Iter.map(iter1, (t) -> t.get(0)) ;
         iter2 = makeAbortable(iter2, killList) ;
 
         Iterator<NodeId> iter3 = Iter.distinct(iter2) ;
@@ -331,7 +332,7 @@ public class SolverLib
     public static Iterator<Tuple<NodeId>> unionGraph(NodeTupleTable ntt)
     {
         Iterator<Tuple<NodeId>> iter = ntt.find((NodeId)null, null, null, null) ;
-        iter = Iter.operate(iter, quadsToAnyTriples) ;
+        iter = Iter.map(iter, quadsToAnyTriples) ;
         //iterMatches = Iter.distinct(iterMatches) ;
         
         // This depends on the way indexes are choose and
@@ -343,7 +344,9 @@ public class SolverLib
         return iter ;
     }
     
+    
     // -- Mutating "transform in place"
-    private static Consumer<Tuple<NodeId>> quadsToAnyTriples = item -> item.tuple()[0] = NodeId.NodeIdAny ;
-
+    private static Function<Tuple<NodeId>, Tuple<NodeId>> quadsToAnyTriples = item -> {
+        return TupleFactory.create4(NodeId.NodeIdAny, item.get(1), item.get(2), item.get(3) ) ;
+    } ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageGeneratorDirectTDB.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageGeneratorDirectTDB.java b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageGeneratorDirectTDB.java
index 78bd791..061662f 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageGeneratorDirectTDB.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageGeneratorDirectTDB.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.solver;
 
 import java.util.function.Predicate;
 
-import org.apache.jena.atlas.lib.Tuple;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.sparql.core.BasicPattern ;
 import org.apache.jena.sparql.engine.ExecutionContext ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageMatchTuple.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageMatchTuple.java b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageMatchTuple.java
index 398502e..3a25b48 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageMatchTuple.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/solver/StageMatchTuple.java
@@ -19,14 +19,18 @@
 package org.apache.jena.tdb.solver;
 
 
+import static org.apache.jena.atlas.lib.tuple.TupleFactory.* ;
+
 import java.util.Iterator;
 import java.util.List;
-import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
-import org.apache.jena.atlas.iterator.* ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.iterator.NullIterator ;
+import org.apache.jena.atlas.iterator.RepeatApplyIterator ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.ExecutionContext ;
@@ -64,7 +68,7 @@ public class StageMatchTuple extends RepeatApplyIterator<BindingNodeId>
     {
         // Process the Node to NodeId conversion ourselves because
         // we wish to abort if an unknown node is seen.
-        for ( int i = 0 ; i < patternTuple.size() ; i++ )
+        for ( int i = 0 ; i < patternTuple.len() ; i++ )
         {
             Node n = patternTuple.get(i) ;
             // Substitution and turning into NodeIds
@@ -82,13 +86,13 @@ public class StageMatchTuple extends RepeatApplyIterator<BindingNodeId>
     protected Iterator<BindingNodeId> makeNextStage(final BindingNodeId input)
     {
         // ---- Convert to NodeIds 
-        NodeId ids[] = new NodeId[patternTuple.size()] ;
+        NodeId ids[] = new NodeId[patternTuple.len()] ;
         // Variables for this tuple after subsitution
-        final Var[] var = new Var[patternTuple.size()] ;
+        final Var[] var = new Var[patternTuple.len()] ;
 
         prepare(nodeTupleTable.getNodeTable(), patternTuple, input, ids, var) ;
         
-        Iterator<Tuple<NodeId>> iterMatches = nodeTupleTable.find(Tuple.create(ids)) ;  
+        Iterator<Tuple<NodeId>> iterMatches = nodeTupleTable.find(asTuple(ids)) ;  
         
         // ** Allow a triple or quad filter here.
         if ( filter != null )
@@ -102,7 +106,7 @@ public class StageMatchTuple extends RepeatApplyIterator<BindingNodeId>
         // Assumes that tuples are not shared.
         if ( anyGraphs )
         {
-            iterMatches = Iter.operate(iterMatches, quadsToAnyTriples) ;
+            iterMatches = Iter.map(iterMatches, quadsToAnyTriples) ;
             //Guaranteed 
             //iterMatches = Iter.distinct(iterMatches) ;
             
@@ -186,5 +190,7 @@ public class StageMatchTuple extends RepeatApplyIterator<BindingNodeId>
     }
     
     // -- Mutating "transform in place"
-    private static Consumer<Tuple<NodeId>> quadsToAnyTriples = item -> item.tuple()[0] = NodeId.NodeIdAny ;
+    private static Function<Tuple<NodeId>, Tuple<NodeId>> quadsToAnyTriples = item -> {
+        return TupleFactory.create4(NodeId.NodeIdAny, item.get(1), item.get(2), item.get(3) ) ;
+    } ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetGraphTDB.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetGraphTDB.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetGraphTDB.java
index c35862a..41d8781 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetGraphTDB.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetGraphTDB.java
@@ -24,7 +24,7 @@ import java.util.Iterator ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetPrefixesTDB.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetPrefixesTDB.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetPrefixesTDB.java
index 03e5b0b..bb7ba33 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetPrefixesTDB.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/DatasetPrefixesTDB.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.store;
 import java.util.* ;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/GraphTDB.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/GraphTDB.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/GraphTDB.java
index 012b206..72a5ec9 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/GraphTDB.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/GraphTDB.java
@@ -24,7 +24,8 @@ import java.util.function.Function;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.* ;
 import org.apache.jena.riot.other.GLib ;
 import org.apache.jena.shared.PrefixMapping ;
@@ -169,9 +170,9 @@ public class GraphTDB extends GraphView implements Closeable, Sync {
     }
 
 	private static Function<Tuple<NodeId>, Tuple<NodeId>> project4TupleTo3Tuple = item -> {
-		if (item.size() != 4)
+		if (item.len() != 4)
 			throw new TDBException("Expected a Tuple of 4, got: " + item);
-		return Tuple.createTuple(item.get(1), item.get(2), item.get(3));
+		return TupleFactory.tuple(item.get(1), item.get(2), item.get(3));
 	};
 
     // Convert from Iterator<Quad> to Iterator<Triple>

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/QuadTable.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/QuadTable.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/QuadTable.java
index 313d8d5..582ec98 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/QuadTable.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/QuadTable.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.store;
 
 import java.util.Iterator ;
 import org.apache.jena.atlas.iterator.NullIterator ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.sparql.core.Quad ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/TripleTable.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/TripleTable.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/TripleTable.java
index 5dfc17e..22b9925 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/TripleTable.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/TripleTable.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.store;
 
 import java.util.Iterator ;
 import org.apache.jena.atlas.iterator.NullIterator ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.tdb.lib.TupleLib ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader/LoaderNodeTupleTable.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader/LoaderNodeTupleTable.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader/LoaderNodeTupleTable.java
index 3307f1d..71c3b30 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader/LoaderNodeTupleTable.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader/LoaderNodeTupleTable.java
@@ -23,7 +23,7 @@ import java.util.Iterator ;
 import org.apache.jena.atlas.lib.ArrayUtils ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.nodetupletable.NodeTupleTable ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/CmdIndexCopy.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/CmdIndexCopy.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/CmdIndexCopy.java
index 4cb191c..efcda1a 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/CmdIndexCopy.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/CmdIndexCopy.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.store.bulkloader2;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.lib.DateTimeUtils ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.LogCtl ;
 import org.apache.jena.atlas.logging.ProgressLogger ;
 import org.apache.jena.tdb.base.file.Location ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTable.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTable.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTable.java
index cc8c915..fc85bc2 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTable.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTable.java
@@ -22,7 +22,7 @@ import java.util.Iterator ;
 
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.nodetable.NodeTable ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableConcrete.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableConcrete.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableConcrete.java
index 2c9a579..4aa4d07 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableConcrete.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableConcrete.java
@@ -24,7 +24,8 @@ import java.util.Iterator ;
 
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.iterator.NullIterator ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.tdb.TDBException ;
 import org.apache.jena.tdb.lib.TupleLib ;
@@ -83,7 +84,7 @@ public class NodeTupleTableConcrete implements NodeTupleTable
             for (int i = 0; i < nodes.length; i++)
                 n[i] = nodeTable.getAllocateNodeId(nodes[i]) ;
 
-            Tuple<NodeId> t = Tuple.create(n) ;
+            Tuple<NodeId> t = TupleFactory.tuple(n) ;
             return tupleTable.add(t) ;
         } finally
         {
@@ -105,7 +106,7 @@ public class NodeTupleTableConcrete implements NodeTupleTable
                 n[i] = id ;
             }
 
-            Tuple<NodeId> t = Tuple.create(n) ;
+            Tuple<NodeId> t = TupleFactory.tuple(n) ;
             return tupleTable.delete(t) ;
         } finally
         {
@@ -151,7 +152,7 @@ public class NodeTupleTableConcrete implements NodeTupleTable
     @Override
     public Iterator<Tuple<NodeId>> find(NodeId... ids)
     {
-        Tuple<NodeId> tuple = Tuple.create(ids) ;
+        Tuple<NodeId> tuple = TupleFactory.tuple(ids) ;
         return find(tuple) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableView.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableView.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableView.java
index f5cacf4..83244fd 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableView.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableView.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.store.nodetupletable;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.lib.ArrayUtils ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.tupletable.TupleTable ;
@@ -71,6 +71,15 @@ public class NodeTupleTableView extends NodeTupleTableWrapper
         return array2 ;
     }
 
+    private static <T> T[] push(Class<T> cls, T x,  Tuple<T> tuple)
+    {
+        T[] array2 = ArrayUtils.alloc(cls, tuple.len()+1) ;
+        tuple.copyInto(array2, 1);
+        array2[0] = x ;
+        return array2 ;
+    }
+
+
     @Override
     public Iterator<Tuple<NodeId>> find(NodeId... ids)
     {
@@ -81,7 +90,7 @@ public class NodeTupleTableView extends NodeTupleTableWrapper
     @Override
     public Iterator<Tuple<NodeId>> find(Tuple<NodeId> ids)
     {
-        NodeId[] ids2 = push(NodeId.class, prefixId, ids.tuple()) ;
+        NodeId[] ids2 = push(NodeId.class, prefixId, ids) ;
         return nodeTupleTable.find(ids2) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableWrapper.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableWrapper.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableWrapper.java
index 35e5111..172e1d9 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableWrapper.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetupletable/NodeTupleTableWrapper.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.store.nodetupletable;
 
 import java.util.Iterator ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.nodetable.NodeTable ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndex.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndex.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndex.java
index 17bfb2d..92e82b5 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndex.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndex.java
@@ -24,7 +24,7 @@ import java.util.function.Predicate ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.lib.ColumnMap ;
 import org.apache.jena.tdb.store.NodeId ;
 
@@ -70,7 +70,7 @@ public interface TupleIndex extends Sync, Closeable
     public void clear() ;
     
     public static Iterator<Tuple<NodeId>> scan(Iterator<Tuple<NodeId>> iter, Tuple<NodeId> pattern) {
-        int tupleLength = pattern.size() ; 
+        int tupleLength = pattern.len() ; 
         Predicate<Tuple<NodeId>> filter = new Predicate<Tuple<NodeId>>()
         {
             @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexBase.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexBase.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexBase.java
index 601b971..fa5dcef 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexBase.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexBase.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.store.tupletable;
 
 import java.util.Iterator ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.TDBException ;
 import org.apache.jena.tdb.lib.ColumnMap ;
 import org.apache.jena.tdb.store.NodeId ;
@@ -56,8 +56,8 @@ public abstract class TupleIndexBase implements TupleIndex
     { 
         if ( Check )
         {
-            if ( tupleLength != tuple.size() )
-            throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", tuple.size(), tupleLength)) ;
+            if ( tupleLength != tuple.len() )
+            throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", tuple.len(), tupleLength)) ;
         }
         return performAdd(tuple) ;
     }
@@ -67,8 +67,8 @@ public abstract class TupleIndexBase implements TupleIndex
     { 
         if ( Check )
         {
-            if ( tupleLength != tuple.size() )
-            throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", tuple.size(), tupleLength)) ;
+            if ( tupleLength != tuple.len() )
+            throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", tuple.len(), tupleLength)) ;
         }
 
         return performDelete(tuple) ;
@@ -82,8 +82,8 @@ public abstract class TupleIndexBase implements TupleIndex
     {
         if ( Check )
         {
-            if ( tupleLength != pattern.size() )
-            throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", pattern.size(), tupleLength)) ;
+            if ( tupleLength != pattern.len() )
+            throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", pattern.len(), tupleLength)) ;
         } 
         // null to NodeId.NodIdAny ??
         return performFind(pattern) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexRecord.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexRecord.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexRecord.java
index 6042563..9f721d5 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexRecord.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexRecord.java
@@ -25,9 +25,7 @@ import java.util.Iterator;
 
 import org.apache.jena.atlas.iterator.* ;
 import org.apache.jena.atlas.lib.Bytes ;
-import org.apache.jena.atlas.lib.Tuple ;
-
-
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.TDBException ;
 import org.apache.jena.tdb.base.record.Record ;
 import org.apache.jena.tdb.base.record.RecordFactory ;
@@ -96,8 +94,8 @@ public class TupleIndexRecord extends TupleIndexBase
 
     private Iterator<Tuple<NodeId>> findWorker(Tuple<NodeId> patternNaturalOrder, boolean partialScanAllowed, boolean fullScanAllowed) {
         if ( Check ) {
-            if ( tupleLength != patternNaturalOrder.size() )
-                throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", patternNaturalOrder.size(),
+            if ( tupleLength != patternNaturalOrder.len() )
+                throw new TDBException(String.format("Mismatch: tuple length %d / index for length %d", patternNaturalOrder.len(),
                                                      tupleLength));
         }
 
@@ -115,7 +113,7 @@ public class TupleIndexRecord extends TupleIndexBase
         Record maxRec = factory.createKeyOnly();
 
         // Set the prefixes.
-        for ( int i = 0 ; i < pattern.size() ; i++ ) {
+        for ( int i = 0 ; i < pattern.len() ; i++ ) {
             NodeId X = pattern.get(i);
             if ( NodeId.isAny(X) ) {
                 X = null;
@@ -133,7 +131,7 @@ public class TupleIndexRecord extends TupleIndexBase
         }
 
         // Is it a simple existence test?
-        if ( numSlots == pattern.size() ) {
+        if ( numSlots == pattern.len() ) {
             if ( index.contains(minRec) )
                 return new SingletonIterator<>(pattern);
             else

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexWrapper.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexWrapper.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexWrapper.java
index 1b86a90..ef0fd4e 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexWrapper.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleIndexWrapper.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.store.tupletable;
 
 import java.util.Iterator ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.lib.ColumnMap ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.tupletable.TupleIndex ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleTable.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleTable.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleTable.java
index 2f7e372..40cc878 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleTable.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/tupletable/TupleTable.java
@@ -24,7 +24,7 @@ import java.util.Iterator ;
 
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.tdb.TDBException ;
 import org.apache.jena.tdb.store.NodeId ;
@@ -85,8 +85,8 @@ public class TupleTable implements Sync, Closeable
     /** Insert a tuple - return true if it was really added, false if it was a duplicate */
     public boolean add(Tuple<NodeId> t) 
     { 
-        if ( tupleLen != t.size() )
-            throw new TDBException(format("Mismatch: inserting tuple of length %d into a table of tuples of length %d", t.size(), tupleLen)) ;
+        if ( tupleLen != t.len() )
+            throw new TDBException(format("Mismatch: inserting tuple of length %d into a table of tuples of length %d", t.len(), tupleLen)) ;
 
         for ( int i = 0 ; i < indexes.length ; i++ )
         {
@@ -134,8 +134,8 @@ public class TupleTable implements Sync, Closeable
     /** Delete a tuple - return true if it was deleted, false if it didn't exist */
     public boolean delete( Tuple<NodeId> t ) 
     { 
-        if ( tupleLen != t.size() )
-            throw new TDBException(format("Mismatch: deleting tuple of length %d from a table of tuples of length %d", t.size(), tupleLen)) ;
+        if ( tupleLen != t.len() )
+            throw new TDBException(format("Mismatch: deleting tuple of length %d from a table of tuples of length %d", t.len(), tupleLen)) ;
 
         boolean rc = false ;
         for ( TupleIndex indexe : indexes )
@@ -164,8 +164,8 @@ public class TupleTable implements Sync, Closeable
 //                log.warn("find(Tuple<NodeId> pattern): Null found: "+pattern) ;
 //        }
         
-        if ( tupleLen != pattern.size() )
-            throw new TDBException(format("Mismatch: finding tuple of length %d in a table of tuples of length %d", pattern.size(), tupleLen)) ;
+        if ( tupleLen != pattern.len() )
+            throw new TDBException(format("Mismatch: finding tuple of length %d in a table of tuples of length %d", pattern.len(), tupleLen)) ;
         
         int numSlots = 0 ;
         // Canonical form. 

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/sys/DebugTDB.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/sys/DebugTDB.java b/jena-tdb/src/main/java/org/apache/jena/tdb/sys/DebugTDB.java
index cb5db48..23aea77 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/sys/DebugTDB.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/sys/DebugTDB.java
@@ -20,7 +20,7 @@ package org.apache.jena.tdb.sys;
 
 import java.util.Iterator ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.tdb.base.file.Location ;
 import org.apache.jena.tdb.base.record.Record ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/org/apache/jena/tdb/sys/FileRef.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/sys/FileRef.java b/jena-tdb/src/main/java/org/apache/jena/tdb/sys/FileRef.java
index af70467..db0a8f6 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/sys/FileRef.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/sys/FileRef.java
@@ -24,7 +24,7 @@ import java.util.Objects;
 import java.util.TreeMap ;
 
 import org.apache.jena.atlas.lib.FileOps ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.tdb.TDBException ;
 import org.apache.jena.tdb.base.file.FileSet ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/tdb/tdbstats.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/tdb/tdbstats.java b/jena-tdb/src/main/java/tdb/tdbstats.java
index 60588fd..115c487 100644
--- a/jena-tdb/src/main/java/tdb/tdbstats.java
+++ b/jena-tdb/src/main/java/tdb/tdbstats.java
@@ -20,7 +20,7 @@ package tdb;
 
 import java.util.Iterator ;
 
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.sparql.core.Quad ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/tdb/tools/dumpbpt.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/tdb/tools/dumpbpt.java b/jena-tdb/src/main/java/tdb/tools/dumpbpt.java
index abe29d8..269150e 100644
--- a/jena-tdb/src/main/java/tdb/tools/dumpbpt.java
+++ b/jena-tdb/src/main/java/tdb/tools/dumpbpt.java
@@ -24,7 +24,7 @@ import java.util.Iterator ;
 import java.util.List ;
 
 import org.apache.jena.atlas.lib.Lib ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.atlas.logging.LogCtl ;
 import org.apache.jena.tdb.base.file.Location ;
 import org.apache.jena.tdb.base.record.Record ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/main/java/tdb/tools/tdbgenindex.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/tdb/tools/tdbgenindex.java b/jena-tdb/src/main/java/tdb/tools/tdbgenindex.java
index 2114ef7..9371ce2 100644
--- a/jena-tdb/src/main/java/tdb/tools/tdbgenindex.java
+++ b/jena-tdb/src/main/java/tdb/tools/tdbgenindex.java
@@ -21,7 +21,7 @@ package tdb.tools ;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.lib.Lib ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.base.file.Location ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.tupletable.TupleIndex ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/lib/TestColumnMap.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/lib/TestColumnMap.java b/jena-tdb/src/test/java/org/apache/jena/tdb/lib/TestColumnMap.java
index b14846a..bcd53c9 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/lib/TestColumnMap.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/lib/TestColumnMap.java
@@ -18,11 +18,11 @@
 
 package org.apache.jena.tdb.lib;
 
+import static org.apache.jena.atlas.lib.tuple.TupleFactory.* ;
+
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.tdb.lib.ColumnMap ;
-
-import static org.apache.jena.atlas.lib.Tuple.* ;
 import org.junit.Test ;
 
 public class TestColumnMap extends BaseTest
@@ -49,16 +49,16 @@ public class TestColumnMap extends BaseTest
     @Test public void remap3() 
     {
         ColumnMap x = new ColumnMap("POS", 2,0,1) ;
-        Tuple<String> tuple = createTuple("S", "P", "O") ;
+        Tuple<String> tuple = tuple("S", "P", "O") ;
         Tuple<String> mapped = x.map(tuple) ;
-        Tuple<String> expected = createTuple("P", "O", "S") ;
+        Tuple<String> expected = tuple("P", "O", "S") ;
         assertEquals(expected, mapped) ;
     }
     
     @Test public void remap4() 
     {
         ColumnMap x = new ColumnMap("POS", 2,0,1) ;
-        Tuple<String> tuple = createTuple("S", "P", "O") ;
+        Tuple<String> tuple = tuple("S", "P", "O") ;
         Tuple<String> tuple2 = x.map(tuple) ;
         tuple2 = x.unmap(tuple2) ;
         assertEquals(tuple, tuple2) ;
@@ -82,12 +82,12 @@ public class TestColumnMap extends BaseTest
     @Test public void map1()
     {
         ColumnMap cmap = new ColumnMap("GSPO", "OSPG") ;
-        Tuple<String> tuple = createTuple("G", "S", "P", "O") ;
+        Tuple<String> tuple = tuple("G", "S", "P", "O") ;
         Tuple<String> mapped = cmap.map(tuple) ;
-        Tuple<String> expected = createTuple("O", "S", "P", "G") ;
+        Tuple<String> expected = tuple("O", "S", "P", "G") ;
         assertEquals(expected, mapped) ;
         Tuple<String> unmapped = cmap.unmap(mapped) ;
-        assertEquals(createTuple("G", "S", "P", "O"), unmapped) ;
+        assertEquals(tuple("G", "S", "P", "O"), unmapped) ;
     }
 
     @Test public void map2()
@@ -96,13 +96,13 @@ public class TestColumnMap extends BaseTest
         String[] y = { "O", "S", "P", "G" } ;
         
         ColumnMap cmap = new ColumnMap("Test", x, y) ;
-        Tuple<String> tuple = Tuple.create(x) ;
+        Tuple<String> tuple = tuple(x) ;
         Tuple<String> mapped = cmap.map(tuple) ;
         
-        Tuple<String> expected = Tuple.create(y) ;
+        Tuple<String> expected = tuple(y) ;
         assertEquals(expected, mapped) ;
         Tuple<String> unmapped = cmap.unmap(mapped) ;
-        assertEquals(Tuple.create(x), unmapped) ;
+        assertEquals(tuple(x), unmapped) ;
     }
     
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/solver/TestStats.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/solver/TestStats.java b/jena-tdb/src/test/java/org/apache/jena/tdb/solver/TestStats.java
index 65a25e2..ff8e0e9 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/solver/TestStats.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/solver/TestStats.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.solver;
 import java.util.Iterator ;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.sparql.core.Quad ;
 import org.apache.jena.sparql.sse.SSE ;

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/store/TestQuadFilter.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/store/TestQuadFilter.java b/jena-tdb/src/test/java/org/apache/jena/tdb/store/TestQuadFilter.java
index 9752dac..a22bd03 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/store/TestQuadFilter.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/store/TestQuadFilter.java
@@ -21,7 +21,7 @@ package org.apache.jena.tdb.store;
 import java.util.function.Predicate;
 
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.query.* ;
 import org.apache.jena.sparql.core.Quad ;
@@ -67,7 +67,7 @@ public class TestQuadFilter extends BaseTest
         DatasetGraphTDB dsg = (DatasetGraphTDB)(ds.asDatasetGraph()) ;
         final NodeTable nodeTable = dsg.getQuadTable().getNodeTupleTable().getNodeTable() ;
         final NodeId target = nodeTable.getNodeIdForNode(NodeFactory.createURI(graphToHide)) ;
-        return item -> !( item.size() == 4 && item.get(0).equals(target) );
+        return item -> !( item.len() == 4 && item.get(0).equals(target) );
     }            
 
     @Test public void quad_filter_1()   { test("SELECT * { GRAPH ?g { ?s ?p ?o } }", 1, 2) ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/AbstractTestTupleIndex.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/AbstractTestTupleIndex.java b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/AbstractTestTupleIndex.java
index 45dc467..a2621aa 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/AbstractTestTupleIndex.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/AbstractTestTupleIndex.java
@@ -23,10 +23,10 @@ import java.util.Set ;
 
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.tdb.store.NodeId ;
 import org.apache.jena.tdb.store.tupletable.TupleIndex ;
-import static org.apache.jena.atlas.lib.Tuple.* ;
 import org.junit.Test ;
 
 /** Test TupleIndexes (general) */
@@ -39,26 +39,26 @@ public abstract class AbstractTestTupleIndex extends BaseTest
     protected static NodeId n5 = new NodeId(0x5555555555555555L) ;
     protected static NodeId n6 = new NodeId(0x6666666666666666L) ; 
     
-    protected abstract TupleIndex create(String description) ;
+    protected abstract TupleIndex createIndex(String description) ;
     
     protected static void add(TupleIndex index, NodeId x1, NodeId x2, NodeId x3)
     {
-        Tuple<NodeId> tuple = createTuple(x1, x2, x3) ;
+        Tuple<NodeId> tuple = TupleFactory.tuple(x1, x2, x3) ;
         index.add(tuple) ;
     }
     
     @Test public void TupleIndex_1()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
     }
     
     @Test public void TupleIndexRecordSPO_1()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -67,10 +67,10 @@ public abstract class AbstractTestTupleIndex extends BaseTest
  
     @Test public void TupleIndexRecordSPO_2()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, null) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, null) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -79,10 +79,10 @@ public abstract class AbstractTestTupleIndex extends BaseTest
     
     @Test public void TupleIndexRecordSPO_3()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n3) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -91,10 +91,10 @@ public abstract class AbstractTestTupleIndex extends BaseTest
     
     @Test public void TupleIndexRecordSPO_4()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -103,74 +103,74 @@ public abstract class AbstractTestTupleIndex extends BaseTest
     
     @Test public void TupleIndexRecordSPO_5()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n1, n2, n4) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
         assertEquals(1, x.size()) ;
-        assertTrue(x.contains(createTuple(n1, n2, n3))) ;
-        assertFalse(x.contains(createTuple(n1, n2, n4))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
+        assertFalse(x.contains(TupleFactory.tuple(n1, n2, n4))) ;
     }
 
     @Test public void TupleIndexRecordSPO_6()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n1, n2, n4) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, NodeId.NodeIdAny) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, NodeId.NodeIdAny) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
         assertEquals(2, x.size()) ;
-        assertTrue(x.contains(createTuple(n1, n2, n3))) ;
-        assertTrue(x.contains(createTuple(n1, n2, n4))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n4))) ;
     }
 
     @Test public void TupleIndexRecordSPO_7()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n1, n2, n4) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
         assertEquals(2, x.size()) ;
-        assertTrue(x.contains(createTuple(n1, n2, n3))) ;
-        assertTrue(x.contains(createTuple(n1, n2, n4))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n4))) ;
     }
 
     @Test public void TupleIndexRecordSPO_8()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n2, n3, n4) ;
 
         {
-            Tuple<NodeId> tuple2 = createTuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+            Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
             Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
             Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
             assertEquals(1, x.size()) ;
-            assertTrue(x.contains(createTuple(n1, n2, n3))) ;
+            assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
         }
 
         {
-            Tuple<NodeId> tuple2 = createTuple(n2, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+            Tuple<NodeId> tuple2 = TupleFactory.tuple(n2, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
             Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
             Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
             assertEquals(1, x.size()) ;
-            assertTrue(x.contains(createTuple(n2, n3, n4))) ;
+            assertTrue(x.contains(TupleFactory.tuple(n2, n3, n4))) ;
         }
     }
 
     @Test public void TupleIndexRecordPOS_1()
     {
-        TupleIndex index = create("POS") ;
+        TupleIndex index = createIndex("POS") ;
         add(index, n1, n2, n3) ;
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue("Can't find tuple", iter.hasNext()) ;
         iter.next();
@@ -179,10 +179,10 @@ public abstract class AbstractTestTupleIndex extends BaseTest
  
     @Test public void TupleIndexRecordPOS_2()
     {
-        TupleIndex index = create("POS") ;
+        TupleIndex index = createIndex("POS") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(null, n2, null) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(null, n2, null) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue("Can't find tuple",iter.hasNext()) ;
         iter.next();
@@ -192,10 +192,10 @@ public abstract class AbstractTestTupleIndex extends BaseTest
 
     @Test public void TupleIndexRecordPOS_3()
     {
-        TupleIndex index = create("POS") ;
+        TupleIndex index = createIndex("POS") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(null, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(null, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertTrue("Can't find tuple", iter.hasNext()) ;
         iter.next();
@@ -204,10 +204,10 @@ public abstract class AbstractTestTupleIndex extends BaseTest
 
     @Test public void TupleIndexRecordFindNot_1()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n4, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n4, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertNotNull(iter) ;
         assertFalse(iter.hasNext()) ;
@@ -215,53 +215,53 @@ public abstract class AbstractTestTupleIndex extends BaseTest
     
     @Test public void TupleIndexRecordFindNot_2()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
 
     @Test public void TupleIndexRecordFindNot_3()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n6) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
 
     @Test public void TupleIndexRecordFindNot_4()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n1, n5, n6) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n4, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n4, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
     
     @Test public void TupleIndexRecordFindNot_5()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n1, n5, n6) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n2, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n2, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
 
     @Test public void TupleIndexRecordFindNot_6()
     {
-        TupleIndex index = create("SPO") ;
+        TupleIndex index = createIndex("SPO") ;
         add(index, n1, n2, n3) ;
         add(index, n4, n5, n6) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n6) ;
         Iterator<Tuple<NodeId>> iter = index.find(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecord.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecord.java b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecord.java
index 9925f87..0d906d8 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecord.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecord.java
@@ -34,7 +34,7 @@ public class TestTupleIndexRecord extends AbstractTestTupleIndex
     static RecordFactory factory = new RecordFactory(3*SystemTDB.SizeOfNodeId, 0) ;
     
     @Override
-    protected TupleIndexRecord create(String description)
+    protected TupleIndexRecord createIndex(String description)
     {
         IndexParams indexParams = StoreParams.getDftStoreParams() ; 
         RangeIndex rIdx = IndexFactory.buildRangeIndex(FileSet.mem(), factory, indexParams) ;


[07/12] jena git commit: Fixes JENA-1082.

Posted by an...@apache.org.
Fixes JENA-1082.


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

Branch: refs/heads/master
Commit: bd9fdd2e40997b67e1f3f8ff755deb05400b1ca7
Parents: c2b8f7c
Author: Ramiro Pereira de Magalhães <ra...@gmail.com>
Authored: Tue Dec 29 16:00:07 2015 -0200
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Tue Dec 29 21:13:05 2015 +0000

----------------------------------------------------------------------
 .../src/main/java/org/apache/jena/rdf/model/ModelCon.java    | 8 ++++++++
 .../main/java/org/apache/jena/rdf/model/impl/ModelCom.java   | 4 ++++
 2 files changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/bd9fdd2e/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
index 87d6215..0a30710 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
@@ -639,6 +639,14 @@ public interface ModelCon {
         matches <code>predicate</code>, and O matches the typed literal
         corresponding to <code>object</code>.
     */ 
+    StmtIterator listLiteralStatements(Resource subject, Property predicate, int object );
+
+    /** 
+        Answer a statement iterator that will iterate over all the statements
+        (S, P, O) in this model where S matches <code>subject</code>, P
+        matches <code>predicate</code>, and O matches the typed literal
+        corresponding to <code>object</code>.
+    */ 
     StmtIterator listLiteralStatements( Resource subject, Property predicate, float object );
 
     /** 

http://git-wip-us.apache.org/repos/asf/jena/blob/bd9fdd2e/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
index 8e48855..4207962 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
@@ -538,6 +538,10 @@ implements Model, PrefixMapping, Lock
     { return listStatements( S, P, createTypedLiteral( O ) ); }
 
     @Override
+    public StmtIterator listLiteralStatements( Resource S, Property P, int O )
+    { return listStatements( S, P, createTypedLiteral( O ) ); }
+
+    @Override
     public StmtIterator listLiteralStatements( Resource S, Property P, char  O )
     { return listStatements( S, P, createTypedLiteral( O ) ); }
 


[06/12] jena git commit: Remove out of date and unhelpful comments.

Posted by an...@apache.org.
Remove out of date and unhelpful comments.

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

Branch: refs/heads/master
Commit: 3d5909e3bc71d101b80038c3706f539ee2573cab
Parents: bd9fdd2
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 29 11:26:26 2015 +0000
Committer: Andy Seaborne <an...@seaborne.org>
Committed: Tue Dec 29 21:13:05 2015 +0000

----------------------------------------------------------------------
 .../org/apache/jena/atlas/lib/ArrayUtils.java   | 34 ++++----------------
 1 file changed, 7 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/3d5909e3/jena-base/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java
index d45a107..200b82c 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java
@@ -28,37 +28,17 @@ public class ArrayUtils
     
     /** Allocate an array of generic type T (initialized to null) */
     @SuppressWarnings("unchecked")
-    public static <T> T[] alloc(Class<T> cls, int n)
-    {
-        return (T[])Array.newInstance(cls, n) ;
+    public static <T> T[] alloc(Class<T> cls, int n) {
+        return (T[])Array.newInstance(cls, n);
     }
-    
- // Compiles but fails at runtime (class cast exception if the reuls is assigned or accessed)
-//        @SuppressWarnings("unchecked")
-//        T[] array = (T[])new Object[n] ;
-// or is T known 
-//        @SuppressWarnings("unchecked")
-//        Set<T> x[] = new Set[length] ;
-//        return array ;
-        
-    /** Allocation space and copy */ 
-    public static <T> T[] copy(T[] array)
-    {
-        return copy(array, 0, array.length) ;
+
+    /** Allocation space and copy */
+    public static <T> T[] copy(T[] array) {
+        return copy(array, 0, array.length);
     }
     
     /** Allocation space and copy */ 
-    public static <T> T[] copy(T[] array, int start, int finish)
-    {    
+    public static <T> T[] copy(T[] array, int start, int finish) {
         return Arrays.copyOfRange(array, start, finish) ;
-
-//        // Java5.
-//        // Fails for arrays of length 0;
-//        if ( array.length <= start )
-//            throw new IllegalArgumentException("Zero length array not supported") ;
-//        @SuppressWarnings("unchecked")
-//        T[] array2 = (T[])Array.newInstance(array[start].getClass(), finish-start) ;
-//        System.arraycopy(array, start, array2, 0, finish-start) ;
-//        return array2 ;
     }
 }


[02/12] jena git commit: JENA-1107: Changes due to reworking Tuple.

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecordDirect.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecordDirect.java b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecordDirect.java
index 0099187..8d461ed 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecordDirect.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleIndexRecordDirect.java
@@ -18,14 +18,13 @@
 
 package org.apache.jena.tdb.store.tupletable;
 
-import static org.apache.jena.atlas.lib.Tuple.createTuple ;
-
 import java.util.Iterator ;
 import java.util.Set ;
 
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.tdb.base.file.FileSet ;
 import org.apache.jena.tdb.base.record.RecordFactory ;
 import org.apache.jena.tdb.index.IndexFactory ;
@@ -34,7 +33,6 @@ import org.apache.jena.tdb.index.RangeIndex ;
 import org.apache.jena.tdb.lib.ColumnMap ;
 import org.apache.jena.tdb.setup.StoreParams ;
 import org.apache.jena.tdb.store.NodeId ;
-import org.apache.jena.tdb.store.tupletable.TupleIndexRecord ;
 import org.apache.jena.tdb.sys.SystemTDB ;
 import org.junit.Test ;
 
@@ -59,7 +57,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
     
     static void add(TupleIndexRecord index, NodeId x1, NodeId x2, NodeId x3)
     {
-        Tuple<NodeId> tuple = createTuple(x1, x2, x3) ;
+        Tuple<NodeId> tuple = TupleFactory.tuple(x1, x2, x3) ;
         index.add(tuple) ;
     }
     
@@ -74,7 +72,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -86,7 +84,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, null) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, null) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -98,7 +96,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertNull(iter) ;
         iter = index.findOrPartialScan(tuple2) ;
@@ -112,7 +110,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertTrue(iter.hasNext()) ;
         iter.next();
@@ -125,12 +123,12 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n3) ;
         add(index, n1, n2, n4) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
         assertEquals(1, x.size()) ;
-        assertTrue(x.contains(createTuple(n1, n2, n3))) ;
-        assertFalse(x.contains(createTuple(n1, n2, n4))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
+        assertFalse(x.contains(TupleFactory.tuple(n1, n2, n4))) ;
     }
 
     @Test public void TupleIndexRecordSPO_6()
@@ -139,12 +137,12 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n3) ;
         add(index, n1, n2, n4) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, NodeId.NodeIdAny) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, NodeId.NodeIdAny) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
         assertEquals(2, x.size()) ;
-        assertTrue(x.contains(createTuple(n1, n2, n3))) ;
-        assertTrue(x.contains(createTuple(n1, n2, n4))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n4))) ;
     }
 
     @Test public void TupleIndexRecordSPO_7()
@@ -153,12 +151,12 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n3) ;
         add(index, n1, n2, n4) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
         assertEquals(2, x.size()) ;
-        assertTrue(x.contains(createTuple(n1, n2, n3))) ;
-        assertTrue(x.contains(createTuple(n1, n2, n4))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
+        assertTrue(x.contains(TupleFactory.tuple(n1, n2, n4))) ;
     }
 
     @Test public void TupleIndexRecordSPO_8()
@@ -168,19 +166,19 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n2, n3, n4) ;
 
         {
-            Tuple<NodeId> tuple2 = createTuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+            Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
             Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
             Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
             assertEquals(1, x.size()) ;
-            assertTrue(x.contains(createTuple(n1, n2, n3))) ;
+            assertTrue(x.contains(TupleFactory.tuple(n1, n2, n3))) ;
         }
 
         {
-            Tuple<NodeId> tuple2 = createTuple(n2, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
+            Tuple<NodeId> tuple2 = TupleFactory.tuple(n2, NodeId.NodeIdAny, NodeId.NodeIdAny) ;
             Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
             Set<Tuple<NodeId>> x = Iter.toSet(iter) ;
             assertEquals(1, x.size()) ;
-            assertTrue(x.contains(createTuple(n2, n3, n4))) ;
+            assertTrue(x.contains(TupleFactory.tuple(n2, n3, n4))) ;
         }
     }
 
@@ -188,7 +186,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
     {
         TupleIndexRecord index = create("POS") ;
         add(index, n1, n2, n3) ;
-        Tuple<NodeId> tuple2 = createTuple(n1, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertTrue("Can't find tuple", iter.hasNext()) ;
         iter.next();
@@ -200,7 +198,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("POS") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(null, n2, null) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(null, n2, null) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertTrue("Can't find tuple",iter.hasNext()) ;
         iter.next();
@@ -213,7 +211,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("POS") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(null, n2, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(null, n2, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertTrue("Can't find tuple", iter.hasNext()) ;
         iter.next();
@@ -224,7 +222,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
     {
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertNull(iter) ;
         iter = index.findOrPartialScan(tuple2) ;
@@ -240,7 +238,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n4) ;
         
         
-        Tuple<NodeId> tuple2 = createTuple(null, null, n3) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(null, null, n3) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertNull(iter) ;
         
@@ -258,7 +256,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n4, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n4, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertNotNull(iter) ;
         assertFalse(iter.hasNext()) ;
@@ -269,7 +267,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
@@ -279,7 +277,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         TupleIndexRecord index = create("SPO") ;
         add(index, n1, n2, n3) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n6) ;
         Iterator<Tuple<NodeId>> iter = index.findOrPartialScan(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
@@ -290,7 +288,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n3) ;
         add(index, n1, n5, n6) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n4, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n4, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
@@ -301,7 +299,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n3) ;
         add(index, n1, n5, n6) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n2, n5, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n2, n5, n6) ;
         Iterator<Tuple<NodeId>> iter = index.findByIndex(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }
@@ -312,7 +310,7 @@ public class TestTupleIndexRecordDirect extends BaseTest
         add(index, n1, n2, n3) ;
         add(index, n4, n5, n6) ;
         
-        Tuple<NodeId> tuple2 = createTuple(n1, null, n6) ;
+        Tuple<NodeId> tuple2 = TupleFactory.tuple(n1, null, n6) ;
         Iterator<Tuple<NodeId>> iter = index.findOrPartialScan(tuple2) ;
         assertFalse(iter.hasNext()) ;
    }

http://git-wip-us.apache.org/repos/asf/jena/blob/c665f630/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleTable.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleTable.java b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleTable.java
index 4664f2c..7fca005 100644
--- a/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleTable.java
+++ b/jena-tdb/src/test/java/org/apache/jena/tdb/store/tupletable/TestTupleTable.java
@@ -23,13 +23,11 @@ import java.util.List;
 
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.lib.tuple.Tuple ;
+import org.apache.jena.atlas.lib.tuple.TupleFactory ;
 import org.apache.jena.tdb.base.record.RecordFactory ;
 import org.apache.jena.tdb.store.NodeId ;
-import org.apache.jena.tdb.store.tupletable.TupleIndex ;
-import org.apache.jena.tdb.store.tupletable.TupleTable ;
 import org.apache.jena.tdb.sys.SystemTDB ;
-import static org.apache.jena.atlas.lib.Tuple.* ;
 import org.junit.Test;
 
 
@@ -63,7 +61,7 @@ public class TestTupleTable extends BaseTest
     
     static void add(TupleTable table, NodeId x1, NodeId x2, NodeId x3)
     {
-        Tuple<NodeId> tuple = createTuple(x1, x2, x3) ;
+        Tuple<NodeId> tuple = TupleFactory.tuple(x1, x2, x3) ;
         table.add(tuple) ;
     }
     
@@ -74,13 +72,13 @@ public class TestTupleTable extends BaseTest
         TupleTable table = create() ;
         add(table, n1, n2, n3) ;
         // Cast removes compile lint warning.
-        Tuple<NodeId> pat = createTuple((NodeId)null, null, null) ;
+        Tuple<NodeId> pat = TupleFactory.tuple((NodeId)null, null, null) ;
         Iterator<Tuple<NodeId>> iter = table.find(pat) ;
         List<Tuple<NodeId>> x = Iter.toList(iter) ;
         int z = x.size() ;
         assertEquals(1, z) ;
         Tuple<NodeId> e1 = x.get(0) ;
-        assertEquals(createTuple(n1, n2, n3) , e1) ;
+        assertEquals(TupleFactory.tuple(n1, n2, n3) , e1) ;
     }
     
     @Test public void createFind2()
@@ -89,7 +87,7 @@ public class TestTupleTable extends BaseTest
         add(table, n1, n2, n3) ;
         add(table, n1, n2, n4) ;
 
-        Tuple<NodeId> pat = createTuple(null, n2, null) ;
+        Tuple<NodeId> pat = TupleFactory.tuple(null, n2, null) ;
         Iterator<Tuple<NodeId>> iter = table.find(pat) ;
         assertNotNull(iter) ;
         List<Tuple<NodeId>> x = Iter.toList(iter) ;
@@ -98,8 +96,8 @@ public class TestTupleTable extends BaseTest
         
         Tuple<NodeId> e1 = x.get(0) ;
         Tuple<NodeId> e2 = x.get(1) ;
-        assertEquals(createTuple(n1, n2, n3) , e1) ;
-        assertEquals(createTuple(n1, n2, n4) , e2) ;
+        assertEquals(TupleFactory.tuple(n1, n2, n3) , e1) ;
+        assertEquals(TupleFactory.tuple(n1, n2, n4) , e2) ;
     }
     
     @Test public void createFind3()
@@ -109,7 +107,7 @@ public class TestTupleTable extends BaseTest
         add(table, n1, n2, n3) ;
         add(table, n1, n2, n4) ;
 
-        Tuple<NodeId> pat = createTuple(n1, null, n3) ;
+        Tuple<NodeId> pat = TupleFactory.tuple(n1, null, n3) ;
         Iterator<Tuple<NodeId>> iter = table.find(pat) ;
         assertNotNull(iter) ;
         List<Tuple<NodeId>> x = Iter.toList(iter) ;
@@ -117,7 +115,7 @@ public class TestTupleTable extends BaseTest
         assertEquals(1, z) ;
         
         Tuple<NodeId> e1 = x.get(0) ;
-        assertEquals(createTuple(n1, n2, n3) , e1) ;
+        assertEquals(TupleFactory.tuple(n1, n2, n3) , e1) ;
     }
     
     @Test public void createFind4()
@@ -127,7 +125,7 @@ public class TestTupleTable extends BaseTest
         add(table, n1, n2, n3) ;
         add(table, n1, n2, n4) ;
 
-        Tuple<NodeId> pat = createTuple(null, null, n3) ;
+        Tuple<NodeId> pat = TupleFactory.tuple(null, null, n3) ;
         Iterator<Tuple<NodeId>> iter = table.find(pat) ;
         assertNotNull(iter) ;
         List<Tuple<NodeId>> x = Iter.toList(iter) ;
@@ -135,7 +133,7 @@ public class TestTupleTable extends BaseTest
         assertEquals(1, z) ;
         
         Tuple<NodeId> e1 = x.get(0) ;
-        assertEquals(createTuple(n1, n2, n3) , e1) ;
+        assertEquals(TupleFactory.tuple(n1, n2, n3) , e1) ;
     }
     
     @Test public void createFind5()
@@ -145,7 +143,7 @@ public class TestTupleTable extends BaseTest
         add(table, n1, n2, n3) ;
         add(table, n1, n2, n4) ;
 
-        Tuple<NodeId> pat = createTuple(null, NodeId.NodeIdAny, n3) ;
+        Tuple<NodeId> pat = TupleFactory.tuple(null, NodeId.NodeIdAny, n3) ;
         Iterator<Tuple<NodeId>> iter = table.find(pat) ;
         assertNotNull(iter) ;
         List<Tuple<NodeId>> x = Iter.toList(iter) ;
@@ -153,7 +151,7 @@ public class TestTupleTable extends BaseTest
         assertEquals(1, z) ;
         
         Tuple<NodeId> e1 = x.get(0) ;
-        assertEquals(createTuple(n1, n2, n3) , e1) ;
+        assertEquals(TupleFactory.tuple(n1, n2, n3) , e1) ;
     }
 
 }