You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2014/01/29 12:08:58 UTC

[1/3] git commit: CLEREZZA-871: introduced WeakBidiMap fot the newly introduced BNodes

Updated Branches:
  refs/heads/master 3bb78d843 -> d3d5430f0


CLEREZZA-871: introduced WeakBidiMap fot the newly introduced BNodes


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

Branch: refs/heads/master
Commit: 2e21cb3af6714c42ced0a8cabe896dcfbb5bdfaf
Parents: ecef9fa
Author: retobg <re...@apache.org>
Authored: Wed Jan 29 12:04:07 2014 +0100
Committer: retobg <re...@apache.org>
Committed: Wed Jan 29 12:04:07 2014 +0100

----------------------------------------------------------------------
 .../clerezza/rdf/jena/storage/WeakBidiMap.java  | 239 +++++++++++++++++++
 1 file changed, 239 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/clerezza/blob/2e21cb3a/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
----------------------------------------------------------------------
diff --git a/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java b/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
new file mode 100644
index 0000000..3c7e9b5
--- /dev/null
+++ b/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2014 The Apache Software Foundation.
+ *
+ * Licensed 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.clerezza.rdf.jena.storage;
+
+import java.lang.ref.WeakReference;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+import org.wymiwyg.commons.util.collections.BidiMap;
+
+/**
+ * Like a WeakHashMap but Bidirectional. Only weak references are kept to the
+ * key
+ *
+ * @author reto
+ *
+ */
+public class WeakBidiMap<K, V> implements BidiMap<K, V> {
+
+    private Map<K, V> forward = new WeakHashMap<K, V>();
+    private Map<V, WeakReference<K>> backward = new HashMap<V, WeakReference<K>>();
+
+    public WeakBidiMap() {
+        super();
+    }
+
+    @Override
+    public K getKey(V value) {
+        WeakReference<K> ref = backward.get(value);
+        if (ref == null) {
+            return null;
+        }
+        return ref.get();
+    }
+
+    @Override
+    public int size() {
+        return forward.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return forward.isEmpty();
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+        return forward.containsKey(key);
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+        return values().contains(value);
+    }
+
+    @Override
+    public V get(Object key) {
+        return forward.get(key);
+    }
+
+    @Override
+    public V put(K key, V value) {
+        //remove possible existing with same value
+
+        WeakReference<K> ref = backward.get(value);
+        if (ref != null) {
+            K oldKey = ref.get();
+            if (oldKey != null) {
+                forward.remove(oldKey);
+            }
+        }
+        if (forward.containsKey(key)) {
+            V oldValue = forward.get(key);
+            backward.remove(oldValue);
+        }
+        backward.put(value, new WeakReference<K>(key));
+        return forward.put(key, value);
+    }
+
+    @Override
+    public V remove(Object key) {
+        V value = forward.remove(key);
+        backward.remove(value);
+        return value;
+    }
+
+    @Override
+    public void putAll(Map<? extends K, ? extends V> m) {
+        for (Entry<? extends K, ? extends V> entry : m.entrySet()) {
+            put(entry.getKey(), entry.getValue());
+        }
+
+    }
+
+    @Override
+    public void clear() {
+        forward.clear();
+        backward.clear();
+
+    }
+
+    @Override
+    public Set<K> keySet() {
+        return forward.keySet();
+    }
+
+    @Override
+    public Collection<V> values() {
+        return backward.keySet();
+    }
+
+    @Override
+    public Set<Entry<K, V>> entrySet() {
+        return forward.entrySet();
+    }
+
+    public BidiMap<V, K> inverse() {
+        return new BidiMap<V,K>() {
+
+            @Override
+            public V getKey(K v) {
+                return WeakBidiMap.this.get(v);
+            }
+
+            @Override
+            public BidiMap<K, V> inverse() {
+                return WeakBidiMap.this;
+            }
+
+            @Override
+            public int size() {
+                return WeakBidiMap.this.size();
+            }
+
+            @Override
+            public boolean isEmpty() {
+                return WeakBidiMap.this.isEmpty();
+            }
+
+            @Override
+            public boolean containsKey(Object o) {
+                return WeakBidiMap.this.containsValue(o);
+            }
+
+            @Override
+            public boolean containsValue(Object o) {
+                return WeakBidiMap.this.containsKey(o);
+            }
+
+            @Override
+            public K get(Object o) {
+                try {
+                    return WeakBidiMap.this.getKey((V)o);
+                } catch (ClassCastException e) {
+                    return null;
+                }
+            }
+
+            @Override
+            public K put(V k, K v) {
+                K origValue = get(k);
+                WeakBidiMap.this.put(v, k);
+                return origValue;
+            }
+
+            @Override
+            public K remove(Object o) {
+                K key = get(o);
+                if (key != null) {
+                    WeakBidiMap.this.remove(key);
+                }
+                return key;
+            }
+
+            @Override
+            public void putAll(Map<? extends V, ? extends K> map) {
+                for (Entry<? extends V, ? extends K> entry : map.entrySet()) {
+                    put(entry.getKey(), entry.getValue());
+                }
+            }
+
+            @Override
+            public void clear() {
+                WeakBidiMap.this.clear();
+            }
+
+            @Override
+            public Set<V> keySet() {
+                return (Set<V>) WeakBidiMap.this.values();
+            }
+
+            @Override
+            public Collection<K> values() {
+                return WeakBidiMap.this.keySet();
+            }
+
+            @Override
+            public Set<Entry<V, K>> entrySet() {
+                Set<Entry<V, K>> result = new HashSet<Entry<V, K>>();
+                for (final Entry<K, V> e: WeakBidiMap.this.entrySet()) {
+                    result.add(new Entry<V, K>() {
+
+                        @Override
+                        public V getKey() {
+                            return e.getValue();
+                        }
+
+                        @Override
+                        public K getValue() {
+                            return e.getKey();
+                        }
+
+                        @Override
+                        public K setValue(K v) {
+                            throw new UnsupportedOperationException("Not supported.");
+                        }
+                    });
+                }
+                return result;
+            }
+        };
+    }
+}
\ No newline at end of file


[2/3] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/clerezza.git

Posted by re...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/clerezza.git

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

Branch: refs/heads/master
Commit: 838df27f49346876a2ee422dc8568aeb18ffe7b9
Parents: 2e21cb3 3bb78d8
Author: retobg <re...@apache.org>
Authored: Wed Jan 29 12:05:13 2014 +0100
Committer: retobg <re...@apache.org>
Committed: Wed Jan 29 12:05:13 2014 +0100

----------------------------------------------------------------------
 .../rdf/virtuoso/storage/VirtuosoBNode.java     | 27 ++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------



[3/3] git commit: CLEREZZA-871: introduced WeakBidiMap fot the newly introduced BNodes

Posted by re...@apache.org.
CLEREZZA-871: introduced WeakBidiMap fot the newly introduced BNodes


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

Branch: refs/heads/master
Commit: d3d5430f0976b00045e87c81cd18fb5cda16ee2b
Parents: 838df27
Author: retobg <re...@apache.org>
Authored: Wed Jan 29 12:08:26 2014 +0100
Committer: retobg <re...@apache.org>
Committed: Wed Jan 29 12:08:26 2014 +0100

----------------------------------------------------------------------
 .../org/apache/clerezza/rdf/jena/storage/JenaGraphAdaptor.java   | 2 +-
 .../java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java   | 4 ++--
 .../java/org/apache/clerezza/rdf/jena/storage/RoundTripTest.java | 1 +
 3 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/clerezza/blob/d3d5430f/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/JenaGraphAdaptor.java
----------------------------------------------------------------------
diff --git a/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/JenaGraphAdaptor.java b/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/JenaGraphAdaptor.java
index c42f983..0edbb6c 100644
--- a/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/JenaGraphAdaptor.java
+++ b/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/JenaGraphAdaptor.java
@@ -44,7 +44,7 @@ import org.wymiwyg.commons.util.collections.BidiMapImpl;
 public class JenaGraphAdaptor extends AbstractMGraph {
 
     private final Graph jenaGraph;
-    final BidiMap<BNode, Node> tria2JenaBNodes = new BidiMapImpl<BNode, Node>();
+    final BidiMap<BNode, Node> tria2JenaBNodes = new WeakBidiMap<BNode, Node>();
     final Jena2TriaUtil jena2TriaUtil =
             new Jena2TriaUtil(tria2JenaBNodes.inverse());
     final Tria2JenaUtil tria2JenaUtil =

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d3d5430f/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
----------------------------------------------------------------------
diff --git a/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java b/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
index 3c7e9b5..277cd3a 100644
--- a/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
+++ b/rdf.jena.storage/src/main/java/org/apache/clerezza/rdf/jena/storage/WeakBidiMap.java
@@ -33,8 +33,8 @@ import org.wymiwyg.commons.util.collections.BidiMap;
  */
 public class WeakBidiMap<K, V> implements BidiMap<K, V> {
 
-    private Map<K, V> forward = new WeakHashMap<K, V>();
-    private Map<V, WeakReference<K>> backward = new HashMap<V, WeakReference<K>>();
+    private final Map<K, V> forward = new WeakHashMap<K, V>();
+    private final Map<V, WeakReference<K>> backward = new HashMap<V, WeakReference<K>>();
 
     public WeakBidiMap() {
         super();

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d3d5430f/rdf.jena.storage/src/test/java/org/apache/clerezza/rdf/jena/storage/RoundTripTest.java
----------------------------------------------------------------------
diff --git a/rdf.jena.storage/src/test/java/org/apache/clerezza/rdf/jena/storage/RoundTripTest.java b/rdf.jena.storage/src/test/java/org/apache/clerezza/rdf/jena/storage/RoundTripTest.java
index b3e2f0d..ab42f55 100644
--- a/rdf.jena.storage/src/test/java/org/apache/clerezza/rdf/jena/storage/RoundTripTest.java
+++ b/rdf.jena.storage/src/test/java/org/apache/clerezza/rdf/jena/storage/RoundTripTest.java
@@ -51,6 +51,7 @@ public class RoundTripTest {
                 LiteralFactory.getInstance().createTypedLiteral("foo")));
         Assert.assertEquals(2, rewrappedMGraph.size());
         Assert.assertEquals(2, mGraph.size());
+        Assert.assertEquals(mGraph.getGraph(), rewrappedMGraph.getGraph());
         rewrappedMGraph.clear();
         Assert.assertEquals(0, rewrappedMGraph.size());
     }