[78] | 1 | package com.framsticks.params; |
---|
| 2 | |
---|
| 3 | import org.apache.log4j.Logger; |
---|
| 4 | |
---|
| 5 | import java.util.HashMap; |
---|
| 6 | import java.util.Map; |
---|
| 7 | |
---|
| 8 | /** |
---|
| 9 | * Author: Piotr Śniegowski |
---|
| 10 | */ |
---|
| 11 | public class Registry { |
---|
| 12 | private static final Logger LOGGER = Logger.getLogger(Registry.class.getName()); |
---|
| 13 | |
---|
| 14 | protected final Map<String, Class> reflectedClasses = new HashMap<String, Class>(); |
---|
| 15 | protected final Map<String, String> invertedReflectedClasses = new HashMap<String, String>(); |
---|
| 16 | protected final Map<String, FramsClass> infoCache = new HashMap<String, FramsClass>(); |
---|
| 17 | |
---|
| 18 | public final void registerReflectedClass(String name, String id, String className) { |
---|
| 19 | try { |
---|
| 20 | registerReflectedClass(name, id, Class.forName(className)); |
---|
| 21 | } catch (ClassNotFoundException e) { |
---|
| 22 | LOGGER.fatal("class not found during registration: " + e); |
---|
| 23 | } |
---|
| 24 | } |
---|
| 25 | |
---|
| 26 | public void registerReflectedClass(String name, String id, Class reflectedClass) { |
---|
| 27 | if (name != null) { |
---|
| 28 | reflectedClasses.put(name, reflectedClass); |
---|
| 29 | invertedReflectedClasses.put(reflectedClass.getCanonicalName(), name); |
---|
| 30 | } |
---|
| 31 | if (id != null) { |
---|
| 32 | reflectedClasses.put(id, reflectedClass); |
---|
| 33 | } |
---|
| 34 | } |
---|
| 35 | |
---|
| 36 | public AccessInterface createAccess(String name, FramsClass framsClass) { |
---|
| 37 | if (reflectedClasses.containsKey(name)) { |
---|
| 38 | return new ReflectionAccess(reflectedClasses.get(name), framsClass); |
---|
| 39 | } |
---|
| 40 | return new PropertiesAccess(framsClass); |
---|
| 41 | } |
---|
| 42 | |
---|
| 43 | public void putInfoIntoCache(FramsClass framsClass) { |
---|
| 44 | if (infoCache.containsKey(framsClass.getId())) { |
---|
| 45 | LOGGER.info("already cached " + framsClass); |
---|
| 46 | return; |
---|
| 47 | } |
---|
| 48 | LOGGER.debug("caching info for " + framsClass); |
---|
| 49 | infoCache.put(framsClass.getId(), framsClass); |
---|
| 50 | infoCache.put(framsClass.getName(), framsClass); |
---|
| 51 | } |
---|
| 52 | |
---|
| 53 | public FramsClass getInfoFromCache(String id) { |
---|
| 54 | if (id == null) { |
---|
| 55 | return null; |
---|
| 56 | } |
---|
| 57 | if (infoCache.containsKey(id)) { |
---|
| 58 | return infoCache.get(id); |
---|
| 59 | } |
---|
| 60 | if (invertedReflectedClasses.containsKey(id)) { |
---|
| 61 | return getInfoFromCache(invertedReflectedClasses.get(id)); |
---|
| 62 | } |
---|
| 63 | return null; |
---|
| 64 | } |
---|
| 65 | } |
---|