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

com.moon.mapping.processing.MappingManager Maven / Gradle / Ivy

package com.moon.mapping.processing;

/**
 * @author moonsky
 */
final class MappingManager {

    private final MappingModel model;
    private final ImportManager importManager;

    MappingManager(MappingModel model, ImportManager importManager) {
        this.model = model;
        this.importManager = importManager;
    }

    private MappingModel getModel() { return model; }

    public String onDeclare(String mapping, String defaultVal) { return onDeclare(getModel(), mapping, defaultVal); }

    private String onDeclare(MappingModel model, String mapping, String defaultVal) {
        return get(model.getSetterDeclareType(), model.getGetterDeclareType(), mapping, defaultVal);
    }

    public String get(String setterType, String getterType, String mapping, String defaultVal) {
        if (StringUtils.isPrimitive(getterType)) {
            if (StringUtils.isPrimitive(setterType)) {
                return primitive2primitive(setterType, getterType, mapping, defaultVal);
            } else {
                return primitive2object(setterType, getterType, mapping, defaultVal);
            }
        } else {
            if (StringUtils.isPrimitive(setterType)) {
                return object2primitive(setterType, getterType, mapping, defaultVal);
            } else {
                return object2object(setterType, getterType, mapping, defaultVal);
            }
        }
    }


    private String primitive2primitive(String setterType, String getterType, String mapping, String defaultVal) {
        return primitive2object(setterType, getterType, mapping, defaultVal);
    }

    private String primitive2object(String setterType, String getterType, String mapping, String defaultVal) {
        mapping = mapping == null ? "{var}" : mapping;
        int count = StringUtils.count(mapping, "{var}");
        final String getValue = "{fromName}.{getterName}()";
        final String singletonVar = "{toName}.{setterName}({MAPPINGS});";
        final String multiplyVar = "{getterType} {var} = {fromName}.{getterName}();" + singletonVar;
        final String t0;
        if (count == 0) {
            t0 = singletonVar;
        } else if (count == 1) {
            t0 = singletonVar;
            mapping = Replacer.var.replace(mapping, getValue);
        } else {
            t0 = multiplyVar;
        }
        return doReplaceVariables(t0, setterType, getterType, mapping);
    }

    private String object2object(String setterType, String getterType, String mapping, String defaultVal) {
        @SuppressWarnings("all") final String nonDefaultVal = "" +//
            "{getterType} {var} = {fromName}.{getterName}();" +//
            "{toName}.{setterName}({var} == null ? null : {MAPPINGS});";
        @SuppressWarnings("all") final String hasDefaultVal = "" +//
            "{getterType} {var} = {fromName}.{getterName}();" +//
            "{toName}.{setterName}({var} == null ? {value} : {MAPPINGS});";
        return doReplaceVariables(setterType, getterType, mapping, defaultVal, nonDefaultVal, hasDefaultVal);
    }

    private String object2primitive(String setterType, String getterType, String mapping, String defaultVal) {
        @SuppressWarnings("all") final String nonDefaultVal = "" +//
            "{getterType} {var} = {fromName}.{getterName}();" +//
            "if ({var} != null) { {toName}.{setterName}({MAPPINGS}); }";
        @SuppressWarnings("all") final String hasDefaultVal = "" +//
            "{getterType} {var} = {fromName}.{getterName}();" +//
            "{toName}.{setterName}({var} == null ? {value} :{MAPPINGS});";
        return doReplaceVariables(setterType, getterType, mapping, defaultVal, nonDefaultVal, hasDefaultVal);
    }

    private String doReplaceVariables(
        String setterType,
        String getterType,
        String mapping,
        String defaultVal,
        String nonDefaultVal,
        String hasDefaultVal
    ) {
        final String template = defaultVal == null ? nonDefaultVal : hasDefaultVal;
        String t0 = Replacer.value.replace(template, defaultVal);
        return doReplaceVariables(t0, setterType, getterType, mapping);
    }

    private String doReplaceVariables(
        String t0, String setterType, String getterType, String mapping
    ) {
        t0 = Replacer.MAPPINGS.replace(t0, mapping == null ? "{var}" : mapping);
        t0 = Replacer.setterType.replace(t0, importManager.onImported(setterType));
        return Replacer.getterType.replace(t0, importManager.onImported(getterType));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy