1 package org.sourceforge.jemm.database.persistent.berkeley;
2
3 import com.sleepycat.je.DatabaseException;
4 import com.sleepycat.persist.EntityStore;
5 import com.sleepycat.persist.PrimaryIndex;
6 import com.sleepycat.persist.SecondaryIndex;
7
8 import org.sourceforge.jemm.database.ClassId;
9 import org.sourceforge.jemm.database.ClassInfo;
10 import org.sourceforge.jemm.database.components.StorageEngineException;
11 import org.sourceforge.jemm.database.components.se.StorageEngineClassIF;
12
13 public class BDbStorageEngineClassImpl implements StorageEngineClassIF {
14 private final PrimaryIndex<Long, ClassEntry> pIdx;
15 private final SecondaryIndex<String,Long,ClassEntry> sIdx;
16 private final IDManager idManager;
17
18 public BDbStorageEngineClassImpl(EntityStore store,IDManager idManager) {
19 try {
20 pIdx = store.getPrimaryIndex(Long.class, ClassEntry.class);
21 sIdx = store.getSecondaryIndex(pIdx,String.class,"className");
22 this.idManager = idManager;
23 } catch (DatabaseException de) {
24 throw new StorageEngineException("Error intitalising indexes on Class info storage",de);
25 }
26 }
27 @Override
28 public ClassId createClassId() {
29 return idManager.getNextClassId();
30 }
31
32 @Override
33 public ClassId getClassIdByName(String className) {
34 try {
35 ClassEntry classEntry = sIdx.get(className);
36 if(classEntry == null)
37 return null;
38 else
39 return new ClassId(classEntry.classId);
40 } catch (DatabaseException de) {
41 throw new StorageEngineException("Error in getClassIdByName("+ className + ")",de);
42 }
43 }
44
45 @Override
46 public ClassInfo getClassInfoById(ClassId classId) {
47 try {
48 return pIdx.get(classId.getInternalClassId()).info;
49 } catch (DatabaseException de) {
50 throw new StorageEngineException("Error in getClassInfoById("+ classId + ")",de);
51 }
52 }
53
54 @Override
55 public void saveClassInfo(ClassId classId, ClassInfo info) {
56 try {
57 pIdx.put(new ClassEntry(classId,info.className,info));
58 } catch (DatabaseException de) {
59 throw new StorageEngineException("Error in saveClassInfo("+ classId + ",...)",de);
60 }
61 }
62 }