]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/CollectionSupportImpl.java
Multiple reader thread support for db client
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / CollectionSupportImpl.java
index c8560bad89ae1257c2f0987a722f4e0fa962b7d5..8b4df608f2eda9755f9636be2d5d79903d3d4ec1 100644 (file)
@@ -28,11 +28,8 @@ import gnu.trove.iterator.TIntIterator;
 import gnu.trove.list.array.TIntArrayList;
 import gnu.trove.map.hash.TIntIntHashMap;
 import gnu.trove.map.hash.TIntObjectHashMap;
-import gnu.trove.map.hash.TObjectIntHashMap;
 import gnu.trove.procedure.TIntObjectProcedure;
 import gnu.trove.procedure.TIntProcedure;
-import gnu.trove.procedure.TObjectIntProcedure;
-import gnu.trove.procedure.TObjectProcedure;
 import gnu.trove.set.hash.TIntHashSet;
 
 public class CollectionSupportImpl implements CollectionSupport {
@@ -117,196 +114,6 @@ public class CollectionSupportImpl implements CollectionSupport {
                return new IntResourceMap(session);
        }
 
-       static final class ObjectResourceMap<T> implements Map<T, Resource> {
-
-               final private SessionImplSocket session;
-               final private TObjectIntHashMap<T> backend;
-
-               ObjectResourceMap(SessionImplSocket session) {
-                       this.session = session;
-                       backend = new TObjectIntHashMap<T>(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR, 0);
-               }
-
-               ObjectResourceMap(SessionImplSocket session, int capacity) {
-                       this.session = session;
-                       backend = new TObjectIntHashMap<T>(capacity, Constants.DEFAULT_LOAD_FACTOR, 0);
-               }
-
-               @Override
-               public int size() {
-                       return backend.size();
-               }
-               @Override
-               public boolean isEmpty() {
-                       return backend.isEmpty();
-               }
-
-               @Override
-               public boolean containsKey(Object key) {
-                       return backend.contains(key);
-               }
-
-               @Override
-               public boolean containsValue(Object value) {
-                       ResourceImpl impl = (ResourceImpl) value;
-                       return backend.containsValue(impl.id);
-               }
-
-               @Override
-               public Resource get(Object key) {
-                       try {
-                               int result = backend.get(key);
-                               if (result == 0)
-                                       return null;
-                               return session.getResourceByKey(result);
-                       } catch (ResourceNotFoundException e) {
-                               e.printStackTrace();
-                       }
-                       return null;
-               }
-
-               @Override
-               public Resource put(T key, Resource value) {
-                       ResourceImpl impl = (ResourceImpl) value;
-                       int i = backend.put(key, impl.id);
-                       if (i == 0)
-                               return null;
-                       else
-                               try {
-                                       return session.getResourceByKey(i);
-                               } catch (ResourceNotFoundException e) {
-                                       e.printStackTrace();
-                               }
-                       return null;
-               }
-
-               @Override
-               public Resource remove(Object key) {
-                       throw new UnsupportedOperationException("remove not supported, structure is immutable");
-               }
-
-               @Override
-               public void putAll(Map<? extends T, ? extends Resource> map) {
-                       @SuppressWarnings("unchecked")
-                       ObjectResourceMap<T> other = (ObjectResourceMap<T>) map;
-                       other.backend.forEachEntry(new TObjectIntProcedure<T>() {
-
-                               @Override
-                               public boolean execute(T a, int b) {
-                                       backend.put(a, b);
-                                       return true;
-                               }
-                       });
-               }
-
-               @Override
-               public void clear() {
-                       throw new UnsupportedOperationException("clear not supported, structure is immutable");
-               }
-
-               @Override
-               public Set<T> keySet() {
-                       final Set<T> result = new HashSet<T>();
-                       backend.forEach(new TObjectProcedure<T>() {
-
-                               @Override
-                               public boolean execute(T object) {
-                                       result.add(object);
-                                       return true;
-                               }
-                       });
-                       return result;
-               }
-
-               @Override
-               public Collection<Resource> values() {
-                       ArrayList<Resource> result = new ArrayList<Resource>();
-                       for (int key : backend.values()) {
-                               try {
-                                       result.add(session.getResourceByKey(key));
-                               } catch (ResourceNotFoundException e) {
-                                       e.printStackTrace();
-                               }
-                       }
-                       return result;
-               }
-
-               @Override
-               public Set<java.util.Map.Entry<T, Resource>> entrySet() {
-                       final HashSet<java.util.Map.Entry<T, Resource>> result = new HashSet<java.util.Map.Entry<T, Resource>>();
-                       backend.forEachEntry(new TObjectIntProcedure<T>() {
-
-                               @Override
-                               public boolean execute(final T a, final int b) {
-                                       return result.add(new Map.Entry<T, Resource>() {
-
-                                               @Override
-                                               public T getKey() {
-                                                       return a;
-                                               }
-
-                                               @Override
-                                               public Resource getValue() {
-                                                       return new ResourceImpl(session.resourceSupport, b);
-                                               }
-
-                                               @Override
-                                               public Resource setValue(Resource value) {
-                                                       throw new UnsupportedOperationException("Map.Entry.setValue not supported, structure is immutable");
-                                               }
-
-                                       });
-                               }
-                       });
-                       return result;
-               }
-
-               @Override
-               public int hashCode() {
-                       return backend.hashCode();
-               }
-
-               @Override
-               public boolean equals(Object obj) {
-                       if (this == obj)
-                               return true;
-                       if (obj == null)
-                               return false;
-                       if (getClass() != obj.getClass()) {
-                               if (obj instanceof Map) {
-                                       // Nonoptimal fallback for comparing against generic Map
-                                       Map<?,?> m = (Map<?,?>) obj;
-                                       if (m.size() != size())
-                                               return false;
-                                       try {
-                                               Iterator<Entry<T,Resource>> i = entrySet().iterator();
-                                               while (i.hasNext()) {
-                                                       Entry<T,Resource> e = i.next();
-                                                       T key = e.getKey();
-                                                       Resource value = e.getValue();
-                                                       if (value == null) {
-                                                               if (!(m.get(key)==null && m.containsKey(key)))
-                                                                       return false;
-                                                       } else {
-                                                               if (!value.equals(m.get(key)))
-                                                                       return false;
-                                                       }
-                                               }
-                                               return true;
-                                       } catch (ClassCastException unused) {
-                                               return false;
-                                       } catch (NullPointerException unused) {
-                                               return false;
-                                       }
-                               }
-                               return false;
-                       }
-                       ObjectResourceMap<?> other = (ObjectResourceMap<?>) obj;
-                       return session == other.session && backend.equals(other.backend);
-               }
-
-       }
-
        @SuppressWarnings("unchecked")
        @Override
        public <T, I> T createObjectResourceMap(Class<I> clazz) {