View Javadoc

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  		// do nothing, object is already in memory
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  }