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 }