Repository: incubator-rya Updated Branches: refs/heads/master 5db4c8234 -> 4666d92e6
RYA-385 Closes #232, Fixed the BindingSetDecorator and VisibilityBinidngSet hashCode() methods. Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/4666d92e Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/4666d92e Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/4666d92e Branch: refs/heads/master Commit: 4666d92e6c49d6b6737ad242200936bc241ea9f0 Parents: 5db4c82 Author: kchilton2 <[email protected]> Authored: Mon Oct 2 16:45:44 2017 -0400 Committer: pujav65 <[email protected]> Committed: Tue Oct 3 12:00:18 2017 -0400 ---------------------------------------------------------------------- .../AccumuloValueBindingSetIterator.java | 19 ++++---- .../storage/accumulo/BindingSetDecorator.java | 23 +++++---- .../storage/accumulo/VisibilityBindingSet.java | 18 +++---- .../accumulo/VisibilityBindingSetTest.java | 50 ++++++++++++++++++++ 4 files changed, 78 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/4666d92e/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloValueBindingSetIterator.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloValueBindingSetIterator.java b/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloValueBindingSetIterator.java index 946c712..ff8ff14 100644 --- a/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloValueBindingSetIterator.java +++ b/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloValueBindingSetIterator.java @@ -32,33 +32,32 @@ import org.openrdf.query.BindingSet; /** * Implementation of CloseableIterator for retrieving results from a {@link PeriodicQueryResultStorage} * table. - * */ public class AccumuloValueBindingSetIterator implements CloseableIterator<BindingSet>{ - + private final Scanner scanner; private final Iterator<Entry<Key, Value>> iter; private final VisibilityBindingSetSerDe bsSerDe = new VisibilityBindingSetSerDe(); - + public AccumuloValueBindingSetIterator(Scanner scanner) { this.scanner = scanner; iter = scanner.iterator(); } - + @Override public boolean hasNext() { return iter.hasNext(); } - - @Override + + @Override public BindingSet next() { try { - return bsSerDe.deserialize(Bytes.of(iter.next().getValue().get())).set; + return bsSerDe.deserialize(Bytes.of(iter.next().getValue().get())).getBindingSet(); } catch (Exception e) { throw new RuntimeException(e); } } - + @Override public void close() { scanner.close(); @@ -68,6 +67,4 @@ public class AccumuloValueBindingSetIterator implements CloseableIterator<Bindin public void remove() { throw new UnsupportedOperationException(); } - - -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/4666d92e/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetDecorator.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetDecorator.java b/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetDecorator.java index ddc7be5..a130219 100644 --- a/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetDecorator.java +++ b/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetDecorator.java @@ -18,7 +18,7 @@ */ package org.apache.rya.indexing.pcj.storage.accumulo; -import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Objects.requireNonNull; import java.util.Iterator; import java.util.Set; @@ -32,16 +32,24 @@ import org.openrdf.query.BindingSet; */ public abstract class BindingSetDecorator implements BindingSet { private static final long serialVersionUID = 1L; - protected final BindingSet set; - private volatile int hashCode; + + private final BindingSet set; /** * Constructs a new {@link BindingSetDecorator}, decorating the provided * {@link BindingSet}. + * * @param set - The {@link BindingSet} to be decorated. (not null) */ public BindingSetDecorator(final BindingSet set) { - this.set = checkNotNull(set); + this.set = requireNonNull(set); + } + + /** + * @return The decorated {@link BindingSet}. + */ + public BindingSet getBindingSet() { + return set; } @Override @@ -85,12 +93,7 @@ public abstract class BindingSetDecorator implements BindingSet { @Override public int hashCode() { - int result = hashCode; - if(result == 0) { - result = 31 * result + set.hashCode(); - hashCode = result; - } - return result; + return set.hashCode(); } @Override http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/4666d92e/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSet.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSet.java b/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSet.java index 740c41e..c8c3be4 100644 --- a/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSet.java +++ b/extras/rya.indexing.pcj/src/main/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSet.java @@ -20,19 +20,21 @@ package org.apache.rya.indexing.pcj.storage.accumulo; import static java.util.Objects.requireNonNull; -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; -import edu.umd.cs.findbugs.annotations.NonNull; +import java.util.Objects; import org.openrdf.query.BindingSet; +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; + /** * Decorates a {@link BindingSet} with a collection of visibilities. */ @DefaultAnnotation(NonNull.class) public class VisibilityBindingSet extends BindingSetDecorator { private static final long serialVersionUID = 1L; + private String visibility; - private volatile int hashCode; /** * Creates a new {@link VisibilityBindingSet} that does not have any visibilities @@ -76,20 +78,14 @@ public class VisibilityBindingSet extends BindingSetDecorator { return true; } else if(o instanceof VisibilityBindingSet) { final VisibilityBindingSet other = (VisibilityBindingSet) o; - return set.equals(other) && visibility.equals(other.getVisibility()); + return getBindingSet().equals(other) && visibility.equals(other.getVisibility()); } return false; } @Override public int hashCode() { - int result = hashCode; - if(result == 0) { - result = 31 * result + visibility.hashCode(); - result = 31 * result + super.hashCode(); - hashCode = result; - } - return result; + return Objects.hash(visibility, super.getBindingSet()); } @Override http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/4666d92e/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetTest.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetTest.java b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetTest.java new file mode 100644 index 0000000..681343f --- /dev/null +++ b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetTest.java @@ -0,0 +1,50 @@ +/* + * 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.rya.indexing.pcj.storage.accumulo; + +import static org.junit.Assert.assertNotEquals; + +import org.junit.Test; +import org.openrdf.model.ValueFactory; +import org.openrdf.model.impl.ValueFactoryImpl; +import org.openrdf.query.impl.MapBindingSet; + +/** + * Unit tests the methods of {@link VisibilityBindingSet}. + */ +public class VisibilityBindingSetTest { + + @Test + public void hashcode() { + // Create a BindingSet, decorate it, and grab its hash code. + final ValueFactory vf = new ValueFactoryImpl(); + final MapBindingSet bSet = new MapBindingSet(); + bSet.addBinding("name", vf.createLiteral("alice")); + + VisibilityBindingSet visSet = new VisibilityBindingSet(bSet); + int origHash = visSet.hashCode(); + + // Add another binding to the binding set and grab the new hash code. + bSet.addBinding("age", vf.createLiteral(37)); + int updatedHash = visSet.hashCode(); + + // Show those hashes are different. + assertNotEquals(origHash, updatedHash); + } +}
