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

com.panayotis.xray.props.PropertyResolver Maven / Gradle / Ivy

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.panayotis.xray.props;

import static com.panayotis.xray.props.PropertyManagerFactory.getValue;
import com.panayotis.xray.props.commons.BooleanPropertyManager;
import com.panayotis.xray.props.commons.BytePropertyManager;
import com.panayotis.xray.props.commons.CharPropertyManager;
import com.panayotis.xray.props.commons.DoublePropertyManager;
import com.panayotis.xray.props.commons.EnumPropertyManager;
import com.panayotis.xray.props.commons.FloatPropertyManager;
import com.panayotis.xray.props.commons.IntPropertyManager;
import com.panayotis.xray.props.commons.LongPropertyManager;
import com.panayotis.xray.props.commons.ObjectPropertyManager;
import com.panayotis.xray.props.commons.ShortPropertyManager;
import com.panayotis.xray.props.commons.StringPropertyManager;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author teras
 */
public class PropertyResolver {

    private final Map mapping = new HashMap<>();

    public PropertyResolver() {
    }

    public  void register(Class type, PropertyGenerator manager) {
        getValue(mapping, type, () -> manager);
    }

    PropertyManager resolve(Object instance, String name, Method setter, Method getter) {
        Class type = getter.getReturnType();
        PropertyManager prop = null;
        PropertyGenerator generator = mapping.get(type);
        if (generator != null)
            prop = generator.construct(instance, name, setter, getter);
        return prop == null
            ? resolveBasedOnNativeType(instance, type, name, setter, getter)
            : prop;
    }

    private PropertyManager resolveBasedOnNativeType(Object instance, Class type, String name, Method setter, Method getter) {
        switch (type.getName()) {
            case "byte":
                return new BytePropertyManager(instance, name, setter, getter);
            case "short":
                return new ShortPropertyManager(instance, name, setter, getter);
            case "int":
                return new IntPropertyManager(instance, name, setter, getter);
            case "long":
                return new LongPropertyManager(instance, name, setter, getter);
            case "float":
                return new FloatPropertyManager(instance, name, setter, getter);
            case "double":
                return new DoublePropertyManager(instance, name, setter, getter);
            case "boolean":
                return new BooleanPropertyManager(instance, name, setter, getter);
            case "char":
                return new CharPropertyManager(instance, name, setter, getter);
            case "java.lang.String":
                return new StringPropertyManager(instance, name, setter, getter);
            default:
                if (type.isEnum())
                    return new EnumPropertyManager(instance, name, setter, getter);
                else
                    return new ObjectPropertyManager(instance, name, setter, getter);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy