package com.sundot.airport.common.statistics;


/**
 * 抽象指标计算器
 * 提供指标计算器的通用实现
 */
public abstract class AbstractIndicatorCalculator<T> implements IndicatorCalculator<T> {

    /**
     * 获取专用参数对象
     *
     * @param params 计算参数
     * @return 专用参数对象
     */
    protected Object getSpecificParams(IndicatorCalculationParams params) {
        return params.getSpecificParams();
    }

    /**
     * 获取专用参数对象并转换为指定类型
     *
     * @param params 计算参数
     * @param clazz  类型
     * @return 专用参数对象
     */
    protected <R> R getSpecificParams(IndicatorCalculationParams params, Class<R> clazz) {
        Object value = getSpecificParams(params);
        if (value != null && clazz.isInstance(value)) {
            return clazz.cast(value);
        }
        return null;
    }

    /**
     * 获取上下文参数对象
     *
     * @param params 计算参数
     * @return 上下文参数对象
     */
    protected Object getContextParams(IndicatorCalculationParams params) {
        return params.getContextParams();
    }

    /**
     * 获取上下文参数对象并转换为指定类型
     *
     * @param params 计算参数
     * @param clazz  类型
     * @return 上下文参数对象
     */
    protected <R> R getContextParams(IndicatorCalculationParams params, Class<R> clazz) {
        Object value = getContextParams(params);
        if (value != null && clazz.isInstance(value)) {
            return clazz.cast(value);
        }
        return null;
    }
}