public DefaultConfiguration(@Nullable String defaultNamespace) { this.mappedClassFactory = new MappedClassFactory(defaultNamespace); }
private List<MappedClass> getMappedSuperClasses(Class<?> clazz) { Class<?> superClass = clazz.getSuperclass(); Class<?>[] ifaces = clazz.getInterfaces(); List<MappedClass> mappedSuperClasses = new ArrayList<MappedClass>(ifaces != null ? ifaces.length + 1 : 1); if (superClass != null && !Object.class.equals(superClass)) { if (isProcessedClass(superClass)) { mappedSuperClasses.add(getMappedClass(superClass)); } } if (ifaces != null) { for (Class<?> iface : ifaces) { if (isProcessedClass(iface)) { mappedSuperClasses.add(getMappedClass(iface)); } } } return mappedSuperClasses; }
private MappedPath getPathMapping(String classNs, Field field, MappedClass declaringClass) { FieldProperty property = new FieldProperty(field, declaringClass); List<MappedPredicate> path = getPredicatePath(classNs, property); return getMappedPath(property, path); }
UID uid = getUID(clazz); Context context = clazz.getAnnotation(Context.class); List<MappedClass> superclasses = getMappedSuperClasses(clazz); mappedClass = new MappedClass(clazz, uid, context != null ? new UID(context.value()) : null, superclasses); if (!clazz.isEnum()) { collectFieldPaths(clazz, mappedClass); collectMethodPaths(clazz, mappedClass); collectDynamicFieldProperties(clazz, mappedClass); assignConstructor(clazz, mappedClass); mappedClass.close(); mappedClasses.put(clazz, mappedClass);
private void collectFieldPaths(Class<?> clazz, MappedClass mappedClass) { if (!clazz.isInterface()) { MappedPath path; String classNs = mappedClass.getClassNs(); for (Field field : clazz.getDeclaredFields()) { path = getPathMapping(classNs, field, mappedClass); if (path != null) { mappedClass.addMappedPath(path); } } } }
@Override public MappedClass getMappedClass(Class<?> javaClass) { return mappedClassFactory.getMappedClass(javaClass); }
private void collectMethodPaths(Class<?> clazz, MappedClass mappedClass) { String classNs = mappedClass.getClassNs(); for (Method method : clazz.getDeclaredMethods()) { MappedPath path = getPathMapping(classNs, method, mappedClass); if (path != null) { mappedClass.addMappedPath(path); } } }
public final void addClasses(Class<?>... classes) { for (Class<?> clazz : classes) { if (clazz.getAnnotation(ClassMapping.class) != null) { MappedClass mappedClass = mappedClassFactory.getMappedClass(clazz); if (mappedClass.getUID() != null) { ClassMapping classMapping = clazz.getAnnotation(ClassMapping.class); if (clazz.isEnum() && !classMapping.parent().equals(Object.class)) { MappedClass parentClass = mappedClassFactory.getMappedClass(classMapping .parent()); for (Object constant : clazz.getEnumConstants()) { UID instance = new UID(mappedClass.getClassNs(), ((Enum) constant).name()); addClass(instance, parentClass); } } addClass(mappedClass.getUID(), mappedClass); } for (MappedClass superClass : mappedClass.getMappedSuperClasses()) { polymorphicClasses.add(superClass.getJavaClass()); } mappedClasses.add(mappedClass); } else { throw new IllegalArgumentException("No @ClassMapping annotation for " + clazz.getName()); } } }
@Nullable private MappedPath getPathMapping(String classNs, Method method, MappedClass declaringClass) { MethodProperty property = MethodProperty.getMethodPropertyOrNull(method, declaringClass); if (property != null) { List<MappedPredicate> path = getPredicatePath(classNs, property); return getMappedPath(property, path); } else { return null; } }
MappedPath mappedPath = getPathMapping(mappedClass, constructor, i, params.get(i)); if (mappedPath != null) { mappedArguments.add(mappedPath);
@Nullable private MappedPath getPathMapping(MappedClass mappedClass, Constructor<?> constructor, int parameterIndex, String property) { boolean reference = mappedClass.hasProperty(property); ConstructorParameter constructorParameter = new ConstructorParameter(constructor, parameterIndex, mappedClass, property, reference); if (mappedClass.hasProperty(property)) { return mappedClass.getMappedPath(property); } else { List<MappedPredicate> path = getPredicatePath(mappedClass.getClassNs(), constructorParameter); return getMappedPath(constructorParameter, path); } }