BeanDescription.java

/*
 * Logback: the reliable, generic, fast and flexible logging framework.
 * Copyright (C) 1999-2026, QOS.ch. All rights reserved.
 *
 * This program and the accompanying materials are dual-licensed under
 * either the terms of the Eclipse Public License v2.0 as published by
 * the Eclipse Foundation
 *
 *   or (per the licensee's choosing)
 *
 * under the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation.
 */

package ch.qos.logback.core.joran.util.beans;

import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Map;

/**
 * Lightweight pendant to the java.beans.BeanInfo class. An instance of this
 * class encapsulates the properties of a certain class. The properties are the
 * public setters and getters. In addition the 'add-er'-methods are included,
 * which are the public methods which start with the prefix 'add'.
 *
 * @author urechm
 *
 */
public class BeanDescription {

    private final Class<?> clazz;

    private final Map<String, Method> propertyNameToGetter;

    private final Map<String, Method> propertyNameToSetter;

    private final Map<String, Method> propertyNameToAdder;

    /**
     * Scope protected since only the {@link BeanDescriptionFactory} must create
     * BeanDescriptions in order to guarantee consistency between the given
     * parameters.
     *
     * @param clazz                of the bean.
     * @param propertyNameToGetter map of property names to the associated getter.
     * @param propertyNameToSetter map of property names to the associated setter.
     * @param propertyNameToAdder  map of property names to the associated adder.
     */
    protected BeanDescription(Class<?> clazz, Map<String, Method> propertyNameToGetter,
            Map<String, Method> propertyNameToSetter, Map<String, Method> propertyNameToAdder) {
        this.clazz = clazz;
        this.propertyNameToGetter = Collections.unmodifiableMap(propertyNameToGetter);
        this.propertyNameToSetter = Collections.unmodifiableMap(propertyNameToSetter);
        this.propertyNameToAdder = Collections.unmodifiableMap(propertyNameToAdder);
    }

    public Class<?> getClazz() {
        return clazz;
    }

    public Map<String, Method> getPropertyNameToGetter() {
        return propertyNameToGetter;
    }

    public Map<String, Method> getPropertyNameToSetter() {
        return propertyNameToSetter;
    }

    public Method getGetter(String propertyName) {
        return propertyNameToGetter.get(propertyName);
    }

    public Method getSetter(String propertyName) {
        return propertyNameToSetter.get(propertyName);
    }

    public Map<String, Method> getPropertyNameToAdder() {
        return propertyNameToAdder;
    }

    public Method getAdder(String propertyName) {
        return propertyNameToAdder.get(propertyName);
    }

}