1 package org.sourceforge.jemm.database.memory;
2
3 import java.util.Arrays;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Set;
8 import java.util.concurrent.ConcurrentHashMap;
9 import java.util.concurrent.atomic.AtomicLong;
10
11 import org.sourceforge.jemm.database.components.se.StorageEngineObjectIF;
12 import org.sourceforge.jemm.database.components.types.StoredAtomicIntObject;
13 import org.sourceforge.jemm.database.components.types.StoredListObject;
14 import org.sourceforge.jemm.database.components.types.StoredMapObject;
15 import org.sourceforge.jemm.database.components.types.StoredObject;
16 import org.sourceforge.jemm.database.components.types.StoredSetObject;
17 import org.sourceforge.jemm.database.components.types.StoredUserObject;
18 import org.sourceforge.jemm.types.ID;
19
20 class ObjectIFImpl implements StorageEngineObjectIF {
21
22 @SuppressWarnings("unchecked")
23 private final List validTypeList = Arrays.asList(StoredUserObject.class,
24 StoredMapObject.class,
25 StoredListObject.class,
26 StoredAtomicIntObject.class,
27 StoredSetObject.class);
28
29 @SuppressWarnings("unchecked")
30 private final Set<Class<? extends StoredObject>> validTypeSet =
31 new HashSet<Class<? extends StoredObject>>(validTypeList);
32
33
34
35 private final AtomicLong idValueSource = new AtomicLong(1);
36 private final ConcurrentHashMap<ID, StoredObject> objects = new ConcurrentHashMap<ID, StoredObject>();
37
38 @Override
39 public ID generateId() {
40 return new ID(idValueSource.getAndIncrement());
41 }
42
43 @Override
44 public StoredObject getObject(ID id) {
45 return objects.get(id);
46 }
47
48 @Override
49 public void updateObject(StoredObject so) {
50
51 so.clearModified();
52 }
53
54 @Override
55 public boolean checkObjectExists(ID objectId) {
56 return objects.containsKey(objectId);
57 }
58
59 @Override
60 public int count() {
61 return objects.size();
62 }
63
64 @Override
65 public void removeObject(ID id) {
66 objects.remove(id);
67 }
68
69 @Override
70 public void save(StoredObject so) {
71 checkStorageType(so);
72 objects.put(so.getObjectId(), so);
73 }
74
75
76 private void checkStorageType(StoredObject so) {
77 if(so == null || !validTypeSet.contains(so.getClass()))
78 throw new IllegalArgumentException("Cannot convert type " + so);
79 }
80
81 @Override
82 public Iterator<ID> idIterator() {
83 return objects.keySet().iterator();
84 }
85
86
87 }