- Timestamp:
- 06/28/13 11:56:03 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/params/Registry.java
r86 r87 5 5 import com.framsticks.params.annotations.FramsClassAnnotation; 6 6 7 import java.util.Collections; 7 8 import java.util.HashMap; 9 import java.util.HashSet; 8 10 import java.util.Map; 11 import java.util.Set; 9 12 10 13 /** … … 14 17 private static final Logger log = Logger.getLogger(Registry.class.getName()); 15 18 16 protected final Map<String, Class<?>> reflectedClasses = new HashMap<String, Class<?>>(); 17 protected final Map<String, String> invertedReflectedClasses = new HashMap<String, String>(); 18 protected final Map<String, FramsClass> infoCache = new HashMap<String, FramsClass>(); 19 public static class DoubleSet<K1, K2, V> { 20 protected final Map<K1, V> byId = new HashMap<>(); 21 protected final Map<K2, V> byName = new HashMap<>(); 22 protected final Set<V> values = new HashSet<>(); 19 23 20 public final void registerReflectedClass(String name, String id, String className) { 21 try { 22 registerReflectedClass(name, id, Class.forName(className)); 23 } catch (ClassNotFoundException e) { 24 log.fatal("class not found during registration: " + e); 24 public int size() { 25 return values.size(); 26 } 27 28 public void put(K1 id, K2 name, V value) { 29 values.add(value); 30 if (id != null) { 31 byId.put(id, value); 32 } 33 if (name != null) { 34 byName.put(name, value); 35 } 36 } 37 38 public boolean containsValue(V value) { 39 return values.contains(value); 40 41 } 42 43 public boolean containsKey(String identifier) { 44 return byId.containsKey(identifier) || byName.containsKey(identifier); 45 } 46 47 public V get(String identifier) { 48 if (byId.containsKey(identifier)) { 49 return byId.get(identifier); 50 } 51 if (byName.containsKey(identifier)) { 52 return byName.get(identifier); 53 } 54 return null; 55 } 56 57 public Set<V> getValues() { 58 return Collections.unmodifiableSet(values); 25 59 } 26 60 } 27 61 28 public void registerReflectedClass(String name, String id, 29 Class<?> reflectedClass) { 30 if (name != null) { 31 reflectedClasses.put(name, reflectedClass); 32 invertedReflectedClasses.put(reflectedClass.getCanonicalName(), name); 33 } 34 if (id != null) { 35 reflectedClasses.put(id, reflectedClass); 36 } 62 // protected void internalRegisterClass(FramsClass framsClass, @Nullable Class<?> javaClass) { 63 // assert framsClass.getName() != null; 64 // assert framsClass.getId() != null; 65 // infoCacheByName.put(framsClass.getName(), framsClass); 66 // infoCacheById.put(framsClass.getId(), framsClass); 67 68 // if (javaClass != null) { 69 // reflectedClasses.put(framsClass, javaClass); 70 // infoCacheByJavaName.put(javaClass.getCanonicalName(), framsClass); 71 // } 72 // } 73 protected final DoubleSet<String, String, Class<?>> javaClasses = new DoubleSet<>(); 74 protected final DoubleSet<String, String, FramsClass> framsClasses = new DoubleSet<>(); 75 76 public void registerReflectedClass(String name, String id, Class<?> reflectedClass) { 77 javaClasses.put(id, name, reflectedClass); 37 78 } 38 79 … … 50 91 51 92 public AccessInterface createAccess(String name, FramsClass framsClass) throws ConstructionException { 52 if (reflectedClasses.containsKey(name)) { 53 return new ReflectionAccess(reflectedClasses.get(name), framsClass); 93 assert framsClasses.containsValue(framsClass); 94 if (javaClasses.containsKey(name)) { 95 return new ReflectionAccess(javaClasses.get(name), framsClass); 54 96 } 55 97 return new PropertiesAccess(framsClass); … … 57 99 58 100 public void putInfoIntoCache(FramsClass framsClass) { 59 if (infoCache.containsKey(framsClass.getId())) {60 log.info("already cached " + framsClass);61 return;62 }63 101 log.debug("caching info for " + framsClass); 64 infoCache.put(framsClass.getId(), framsClass); 65 infoCache.put(framsClass.getName(), framsClass); 102 framsClasses.put(framsClass.getId(), framsClass.getName(), framsClass); 66 103 } 67 104 68 public FramsClass getInfoFromCache(String id ) {69 if (id == null) {105 public FramsClass getInfoFromCache(String identifier) { 106 if (identifier == null) { 70 107 return null; 71 108 } 72 if (infoCache.containsKey(id)) { 73 return infoCache.get(id); 74 } 75 if (invertedReflectedClasses.containsKey(id)) { 76 return getInfoFromCache(invertedReflectedClasses.get(id)); 77 } 78 return null; 109 return framsClasses.get(identifier); 79 110 } 80 111 … … 102 133 } 103 134 135 public Set<Class<?>> getReflectedClasses() { 136 return javaClasses.getValues(); 137 } 138 139 public Set<FramsClass> getInfoCache() { 140 return framsClasses.getValues(); 141 } 142 104 143 }
Note: See TracChangeset
for help on using the changeset viewer.