1 package org.sourceforge.jemm.client;
2
3 import java.util.concurrent.ConcurrentHashMap;
4 import java.util.concurrent.ConcurrentMap;
5
6 import org.sourceforge.jemm.database.ClassId;
7 import org.sourceforge.jemm.database.ClassInfo;
8 import org.sourceforge.jemm.database.ClientId;
9 import org.sourceforge.jemm.database.Database;
10 import org.sourceforge.jemm.database.EnumId;
11 import org.sourceforge.jemm.database.EnumInfo;
12 import org.sourceforge.jemm.database.StructureModifiedException;
13
14
15
16
17
18
19
20
21 public class RegistrationCache extends DelegatingDatabase implements Database {
22 ConcurrentMap<Object,Object> cache;
23
24 public RegistrationCache(Database database) {
25 super(database);
26 cache = new ConcurrentHashMap<Object,Object>();
27 }
28
29 public ClassId registerClass(ClientId clientId, ClassInfo classInfo) throws StructureModifiedException {
30 ClassId id = (ClassId)cache.get(classInfo);
31 if(id!=null)
32 return id;
33
34 id = super.registerClass(clientId,classInfo);
35 cache.put(classInfo, id);
36 return id;
37 }
38
39 public EnumId registerEnum(ClientId clientId,EnumInfo enumInfo) throws StructureModifiedException {
40 EnumId id = (EnumId)cache.get(enumInfo);
41 if(id!=null)
42 return id;
43
44 id = super.registerEnum(clientId,enumInfo);
45 cache.put(enumInfo,id);
46 return id;
47 }
48
49 public ClassInfo getClassInfo(ClientId clientId, ClassId classId) {
50 ClassInfo ci = (ClassInfo)cache.get(classId);
51 if(ci!=null)
52 return ci;
53 ci = super.getClassInfo(clientId,classId);
54 cache.put(classId, ci);
55 return ci;
56 }
57
58 public EnumInfo getEnumInfo(ClientId clientId, EnumId enumId) {
59 EnumInfo ei = (EnumInfo)cache.get(enumId);
60 if(ei!=null)
61 return ei;
62 ei = super.getEnumInfo(clientId,enumId);
63 cache.put(enumId, ei);
64 return ei;
65 }
66
67 public int cacheCount() {
68 return cache.size();
69 }
70 }