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.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  }