View Javadoc

1   package org.sourceforge.jemm.database.persistent.berkeley;
2   
3   import java.util.Iterator;
4   
5   import com.sleepycat.je.DatabaseException;
6   import com.sleepycat.persist.EntityStore;
7   import com.sleepycat.persist.PrimaryIndex;
8   
9   import org.sourceforge.jemm.database.components.StorageEngineException;
10  import org.sourceforge.jemm.database.components.se.StorageEngineObjectIF;
11  import org.sourceforge.jemm.database.components.types.StoredObject;
12  import org.sourceforge.jemm.database.persistent.berkeley.objects.BDbStoredData;
13  import org.sourceforge.jemm.types.ID;
14  
15  public class BDbStorageEngineObjectImpl implements StorageEngineObjectIF {
16  	public static final String ID_KEY = "object";
17  	
18  	private final PrimaryIndex<Long, BDbStoredData> pIdx;
19  	private final IDManager idManager;
20  	
21  	public BDbStorageEngineObjectImpl(EntityStore store, IDManager idManager) {
22  		try {
23  			pIdx = store.getPrimaryIndex(Long.class, BDbStoredData.class);
24  			this.idManager = idManager;
25  		} catch (DatabaseException de) {
26  			throw new StorageEngineException("Error intitalising index on StoredObject storage",de);
27  		}
28  	}
29  
30  	@Override
31  	public boolean checkObjectExists(ID objectId) {
32  		try {
33  			return pIdx.contains(objectId.getIDValue());
34  		} catch (DatabaseException de) {
35  			throw new StorageEngineException("Internal error calling checkObjectExists(" + objectId + ")",de);
36  		}
37  	}
38  
39  	@Override
40  	public int count() {
41  		try {
42  			return (int) pIdx.count();
43  		} catch (DatabaseException de) {
44  			throw new StorageEngineException("Internal error calling count()",de);
45  		}
46  	}
47  	@Override
48  	public ID generateId() {
49  		return idManager.getNextId();
50  	}
51  
52  
53  	@Override
54  	public StoredObject getObject(ID id) {
55  		try {
56  			BDbStoredData so = pIdx.get(id.getIDValue());			
57  			return so.convert();
58  		} catch (DatabaseException de) {
59  			throw new StorageEngineException("Internal error calling getObject(" + id + ")",de);
60  		}
61  	}
62  
63  	@Override
64  	public Iterator<ID> idIterator() {
65  		try {
66  			return new EnityCursorIterator<Long, ID>(pIdx.keys()) {
67  				@Override
68  				protected ID convert(Long internalValue) {
69  					return new ID(internalValue);
70  				}
71  				
72  			};
73  		} catch (DatabaseException de) {
74  			throw new StorageEngineException("error whilst calling idIterator()",de);
75  		}
76  	}
77  
78  	@Override
79  	public void removeObject(ID id) {
80  		try {
81  			pIdx.delete(id.getIDValue());
82  		} catch (DatabaseException de) {
83  			throw new StorageEngineException("Internal error calling removeObject(" + id + ")",de); 
84  		}
85  	}
86  
87  
88  	@Override
89  	public void save(StoredObject so) {
90  		
91  		BDbStoredData sd = new BDbStoredData(so.getObjectId().getIDValue(),so);
92  			
93  		try {
94  			pIdx.putNoReturn(sd);
95  		} catch (DatabaseException de) {
96  			throw new StorageEngineException("Internal error calling save on id " + so.getObjectId(),de); 
97  		}
98  	}
99  
100 	@Override
101 	public void updateObject(StoredObject so) {
102 		save(so);
103 	}
104 }