- Timestamp:
- 07/02/13 16:20:07 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/params/Registry.java
r88 r90 4 4 5 5 import com.framsticks.params.annotations.FramsClassAnnotation; 6 import com.framsticks.params.annotations.ParamAnnotation; 6 7 import com.framsticks.util.DoubleMap; 7 8 import com.framsticks.util.FramsticksException; 8 9 10 import java.util.HashMap; 11 import java.util.Map; 9 12 import java.util.Set; 13 14 import javax.annotation.Nonnull; 10 15 11 16 /** 12 17 * Author: Piotr Śniegowski 13 18 */ 19 @FramsClassAnnotation 14 20 public class Registry { 15 21 private static final Logger log = Logger.getLogger(Registry.class.getName()); 16 22 17 // protected void internalRegisterClass(FramsClass framsClass, @Nullable Class<?> javaClass) {18 // assert framsClass.getName() != null;19 // assert framsClass.getId() != null;20 // infoCacheByName.put(framsClass.getName(), framsClass);21 // infoCacheById.put(framsClass.getId(), framsClass);22 23 // if (javaClass != null) {24 // reflectedClasses.put(framsClass, javaClass);25 // infoCacheByJavaName.put(javaClass.getCanonicalName(), framsClass);26 // }27 // }28 23 protected final DoubleMap<String, Class<?>> javaClasses = new DoubleMap<>(); 29 24 protected final DoubleMap<String, FramsClass> framsClasses = new DoubleMap<>(); 25 protected final Map<Class<?>, FramsClass> javaToFramsAssociation = new HashMap<>(); 30 26 31 public void registerReflectedClass(String name, String id, Class<?> reflectedClass) { 32 javaClasses.put(id, name, reflectedClass); 27 /** 28 * 29 */ 30 public Registry() { 31 // registerAndBuild(Registry.class); 32 // registerAndBuild(FramsClass.class); 33 // registerAndBuild(Param.class); 33 34 } 34 35 35 public Registry registerAndBuild(Class<?> reflectedClass) { 36 register(reflectedClass); 37 putInfoIntoCache(FramsClass.build().forClass(reflectedClass)); 36 public void registerReflectedClass(String name, String id, Class<?> javaClass) { 37 javaClasses.put(id, name, javaClass); 38 } 39 40 public void associate(Class<?> javaClass, FramsClass framsClass) { 41 javaToFramsAssociation.put(javaClass, framsClass); 42 } 43 44 public Registry registerAndBuild(Class<?> javaClass) { 45 register(javaClass); 46 associate(javaClass, putFramsClass(FramsClass.build().forClass(javaClass))); 38 47 return this; 39 48 } 40 49 41 public Registry register(Class<?> reflectedClass) {42 FramsClassAnnotation a = reflectedClass.getAnnotation(FramsClassAnnotation.class);50 public Registry register(Class<?> javaClass) { 51 FramsClassAnnotation a = javaClass.getAnnotation(FramsClassAnnotation.class); 43 52 if (a == null) { 44 throw new FramsticksException().msg("class is not annotated").arg("class", reflectedClass);53 throw new FramsticksException().msg("class is not annotated").arg("class", javaClass); 45 54 } 46 55 47 registerReflectedClass(FramsClassBuilder.getName(a, reflectedClass), FramsClassBuilder.getId(a, reflectedClass), reflectedClass);56 registerReflectedClass(FramsClassBuilder.getName(a, javaClass), FramsClassBuilder.getId(a, javaClass), javaClass); 48 57 return this; 49 58 } 50 59 51 public AccessInterface createAccess(String name, FramsClass framsClass) throws ConstructionException { 60 public @Nonnull ReflectionAccess createAccess(Class<?> javaClass) throws ConstructionException { 61 try { 62 if (!javaClasses.containsValue(javaClass)) { 63 throw new FramsticksException().msg("java class is not registered"); 64 } 65 if (!javaToFramsAssociation.containsKey(javaClass)) { 66 throw new FramsticksException().msg("java class is not associated with any frams class"); 67 } 68 return new ReflectionAccess(javaClass, javaToFramsAssociation.get(javaClass)); 69 } 70 catch (FramsticksException e) { 71 throw new FramsticksException().msg("failed to create access for java class").arg("class", javaClass).cause(e); 72 } 73 } 74 75 public @Nonnull AccessInterface createAccess(String name, FramsClass framsClass) throws ConstructionException { 52 76 // assert framsClasses.containsValue(framsClass); 53 77 if (javaClasses.containsKey(name)) { … … 57 81 } 58 82 59 public void putInfoIntoCache(FramsClass framsClass) {83 public FramsClass putFramsClass(FramsClass framsClass) { 60 84 log.debug("caching info for " + framsClass); 61 85 framsClasses.put(framsClass.getId(), framsClass.getName(), framsClass); 86 return framsClass; 62 87 } 63 88 64 public FramsClass getInfoFromCache(String identifier) { 65 if (identifier == null) { 66 return null; 67 } 89 public FramsClass getFramsClass(@Nonnull String identifier) { 68 90 return framsClasses.get(identifier); 69 91 } 70 92 71 public static AccessInterface wrapAccessWithListIfNeeded(CompositeParam param, AccessInterface access) { 72 if (access == null) { 73 return null; 74 } 93 public static @Nonnull AccessInterface wrapAccessWithListIfNeeded(@Nonnull CompositeParam param, @Nonnull AccessInterface access) { 75 94 return param.prepareAccessInterface(access); 76 95 } 77 96 78 public AccessInterface prepareAccess(CompositeParam param) throws ConstructionException {97 public @Nonnull AccessInterface prepareAccess(CompositeParam param) throws ConstructionException { 79 98 return wrapAccessWithListIfNeeded(param, createAccess(param.getContainedTypeName())); 80 99 } 81 100 82 public AccessInterface createAccess(String name) throws ConstructionException { 83 if (name == null) { 84 return null; 101 public @Nonnull AccessInterface createAccess(@Nonnull String name) throws ConstructionException { 102 try { 103 FramsClass framsClass = getFramsClass(name); 104 if (framsClass == null) { 105 throw new ConstructionException().msg("framsclass is missing"); 106 } 107 108 return createAccess(name, framsClass); 85 109 } 86 FramsClass framsClass = getInfoFromCache(name); 87 if (framsClass == null) { 88 return null; 110 catch (FramsticksException e) { 111 throw new FramsticksException().msg("failed to create access for name").arg("name", name).cause(e); 89 112 } 90 91 return createAccess(name, framsClass);92 113 } 93 114 … … 96 117 } 97 118 98 public Set<FramsClass> get InfoCache() {119 public Set<FramsClass> getFramsClasses() { 99 120 return framsClasses.getValues(); 100 121 } 101 122 123 @ParamAnnotation 124 public Map<String, FramsClass> getFramsClassesById() { 125 return framsClasses.getValuesById(); 126 } 127 128 public void takeAllFrom(Registry source) { 129 for (Class<?> javaClass : source.getReflectedClasses()) { 130 register(javaClass); 131 } 132 for (FramsClass framsClass : source.getFramsClasses()) { 133 putFramsClass(framsClass); 134 } 135 136 } 137 102 138 }
Note: See TracChangeset
for help on using the changeset viewer.