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.EnumId;
9 import org.sourceforge.jemm.database.EnumInfo;
10 import org.sourceforge.jemm.database.components.StorageEngineException;
11 import org.sourceforge.jemm.database.components.se.StorageEngineEnumIF;
12
13 public class BDbStorageEngineEnumImpl implements StorageEngineEnumIF {
14
15 private final PrimaryIndex<Long, EnumEntry> pIdx;
16 private final SecondaryIndex<String,Long,EnumEntry> sIdx;
17 private final IDManager idManager;
18
19 public BDbStorageEngineEnumImpl(EntityStore store,IDManager idManager) {
20 try {
21 pIdx = store.getPrimaryIndex(Long.class, EnumEntry.class);
22 sIdx = store.getSecondaryIndex(pIdx,String.class,"className");
23 this.idManager = idManager;
24 } catch (DatabaseException de) {
25 throw new StorageEngineException("Error intitalising indexes on Class info storage",de);
26 }
27 }
28 @Override
29 public EnumId createEnumId() {
30 return idManager.getNextEnumId();
31 }
32
33 @Override
34 public EnumId getEnumIdByName(String className) {
35 try {
36 EnumEntry enumEntry = sIdx.get(className);
37 if(enumEntry == null)
38 return null;
39 else
40 return new EnumId(enumEntry.enumId);
41 } catch (DatabaseException de) {
42 throw new StorageEngineException("Error occured in getEnumById(" + className + ")",de);
43 }
44 }
45
46 @Override
47 public EnumInfo getEnumInfoById(EnumId enumId) {
48 try {
49 return pIdx.get(enumId.getInternalEnumId()).info;
50 } catch (DatabaseException de) {
51 throw new StorageEngineException("Error occured in getEnumInfoById(" + enumId + ")",de);
52 }
53 }
54
55 @Override
56 public void saveEnumInfo(EnumId enumId, EnumInfo info) {
57 try {
58 pIdx.put(new EnumEntry(enumId,info.getClassName(),info));
59 } catch (DatabaseException de) {
60 throw new StorageEngineException("Error occured in saveEnumInfo(" + enumId + "," + info +")",de);
61 }
62 }
63 }