source: java/main/src/main/java/com/framsticks/params/Registry.java @ 78

Last change on this file since 78 was 78, checked in by psniegowski, 11 years ago

Add f0 parsing and f0->Model transformation.

File size: 1.9 KB
Line 
1package com.framsticks.params;
2
3import org.apache.log4j.Logger;
4
5import java.util.HashMap;
6import java.util.Map;
7
8/**
9 * Author: Piotr Śniegowski
10 */
11public 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}
Note: See TracBrowser for help on using the repository browser.