View Javadoc

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  }