TaskDemandData.java

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

import java.util.Optional;

import org.opentrafficsim.kpi.sampling.data.ExtendedDataNumber;
import org.opentrafficsim.road.gtu.perception.mental.Fuller;
import org.opentrafficsim.road.gtu.perception.mental.Mental;
import org.opentrafficsim.road.gtu.perception.mental.Task;
import org.opentrafficsim.road.network.sampling.GtuDataRoad;

/**
 * Task demand trajectory data, specific to a task.
 * <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 TaskDemandData extends ExtendedDataNumber<GtuDataRoad>
{

    /** Task id. */
    private String taskId;

    /**
     * Constructor.
     * @param taskId task id
     */
    public TaskDemandData(final String taskId)
    {
        super(taskId + "_TD", "Task demand of task " + taskId);
        this.taskId = taskId;
    }

    @Override
    public Optional<Float> getValue(final GtuDataRoad gtu)
    {
        Optional<Mental> mental = gtu.getGtu().getTacticalPlanner().getPerception().getMental();
        if (mental.isPresent() && mental.get() instanceof Fuller fuller)
        {
            Optional<Task> task = fuller.getTask(this.taskId);
            if (task.isPresent())
            {
                Optional.of((float) task.get().getTaskDemand());
            }
        }
        return Optional.empty();
    }

}