NumericParameterData.java

package org.opentrafficsim.road.network.sampling.data;

import java.util.Optional;

import org.djutils.exceptions.Throw;
import org.opentrafficsim.base.parameters.ParameterTypeNumeric;
import org.opentrafficsim.kpi.sampling.data.ExtendedDataNumber;
import org.opentrafficsim.kpi.sampling.filter.FilterDataType;
import org.opentrafficsim.road.network.sampling.GtuDataRoad;

/**
 * Trajectory data for a numerical parameter type. Typically this involves a parameter that represents an internal model state,
 * i.e. one that is variable over time. For static parameters a {@link FilterDataType} is more suitable.
 * <p>
 * Copyright (c) 2026-2026 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
 * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
 * </p>
 * @author Wouter Schakel
 */
public class NumericParameterData extends ExtendedDataNumber<GtuDataRoad>
{

    /** Parameter type. */
    private final ParameterTypeNumeric<? extends Number> parameterType;

    /**
     * Constructor.
     * @param parameterType parameter type
     */
    public NumericParameterData(final ParameterTypeNumeric<? extends Number> parameterType)
    {
        super("parameter_" + Throw.whenNull(parameterType, "parameterType").getId(), "Parameter " + parameterType.getId());
        this.parameterType = parameterType;
    }

    @Override
    public Optional<Float> getValue(final GtuDataRoad gtu)
    {
        Optional<? extends Number> value = gtu.getGtu().getParameters().getOptionalParameter(this.parameterType);
        if (value.isPresent())
        {
            return Optional.of(value.get().floatValue());
        }
        return Optional.empty();
    }

}