All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.simpleflatmapper.reflect.meta.SubPropertyMeta Maven / Gradle / Ivy

package org.simpleflatmapper.reflect.meta;

import org.simpleflatmapper.reflect.Getter;
import org.simpleflatmapper.reflect.getter.GetterOnGetter;
import org.simpleflatmapper.reflect.ReflectionService;
import org.simpleflatmapper.reflect.Setter;
import org.simpleflatmapper.reflect.getter.NullGetter;
import org.simpleflatmapper.reflect.setter.NullSetter;

import java.lang.reflect.Type;

/**
 *
 * @param  the root property owner type
 * @param  the intermediate owner type
 * @param 

the property type */ public class SubPropertyMeta extends PropertyMeta { private final PropertyMeta ownerProperty; private final PropertyMeta subProperty; public SubPropertyMeta(ReflectionService reflectService, PropertyMeta ownerProperty, PropertyMeta subProperty) { super(ownerProperty.getName(), ownerProperty.getOwnerType(), reflectService); this.ownerProperty = ownerProperty; this.subProperty = subProperty; } @Override public PropertyMeta withReflectionService(ReflectionService reflectionService) { return new SubPropertyMeta(reflectionService, ownerProperty.withReflectionService(reflectionService), subProperty.withReflectionService(reflectionService)); } @SuppressWarnings("unchecked") @Override public Setter getSetter() { if (subProperty.isSelf()) { return (Setter) ownerProperty.getSetter(); } if (!NullSetter.isNull(subProperty.getSetter()) && !NullGetter.isNull(ownerProperty.getGetter())) { return new Setter() { @Override public void set(O target, P value) throws Exception { subProperty.getSetter().set(ownerProperty.getGetter().get(target), value); } }; } else { return (Setter) NullSetter.NULL_SETTER; } } @Override public Getter getGetter() { if (subProperty.isSelf()) return (Getter) ownerProperty.getGetter(); return new GetterOnGetter(this.ownerProperty.getGetter(), subProperty.getGetter()); } @Override protected ClassMeta

newPropertyClassMeta() { return subProperty.getPropertyClassMeta(); } @Override public Type getPropertyType() { return subProperty.getPropertyType(); } @Override public int typeAffinityScore(PropertyFinder.TypeAffinityScorer typeAffinityScorer) { return subProperty.typeAffinityScore(typeAffinityScorer); } public PropertyMeta getOwnerProperty() { return ownerProperty; } public PropertyMeta getSubProperty() { return subProperty; } @Override public boolean isSubProperty() { return true; } public boolean isNonMapped() { return subProperty.isNonMapped(); } @Override public boolean isValid() { return subProperty.isValid(); } @Override public String getPath() { String subPath = subProperty.getPath(); String subPathPrefix = subPath.startsWith("[") ? "" : "."; return getOwnerProperty().getPath() + subPathPrefix + subPath; } @Override public Object[] getDefinedProperties() { return subProperty.getDefinedProperties(); } @Override public PropertyMeta toNonMapped() { return new SubPropertyMeta(reflectService, ownerProperty, subProperty.toNonMapped()); } @Override public PropertyMeta compressSubSelf() { if (subProperty.isSelf()) return (PropertyMeta) ownerProperty; return new SubPropertyMeta(reflectService, ownerProperty, subProperty.compressSubSelf()); } @Override public String toString() { return "SubPropertyMeta{" + "ownerProperty=" + ownerProperty + ", subProperty=" + subProperty + '}'; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy