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 }