ParseUtil.java
- package org.opentrafficsim.road.network.factory.xml.utils;
- import java.util.ArrayList;
- import java.util.List;
- import org.djunits.value.vdouble.scalar.Length;
- import org.djutils.eval.Eval;
- import org.opentrafficsim.road.gtu.generator.CfBaRoomChecker;
- import org.opentrafficsim.road.gtu.generator.CfRoomChecker;
- import org.opentrafficsim.road.gtu.generator.LaneBasedGtuGenerator.RoomChecker;
- import org.opentrafficsim.road.gtu.generator.TtcRoomChecker;
- import org.opentrafficsim.road.network.factory.xml.XmlParserException;
- import org.opentrafficsim.xml.bindings.types.LengthBeginEndType.LengthBeginEnd;
- import org.opentrafficsim.xml.generated.RandomStreamSource;
- import org.opentrafficsim.xml.generated.RoomCheckerType;
- import nl.tudelft.simulation.dsol.experiment.StreamInformation;
- import nl.tudelft.simulation.jstats.streams.StreamInterface;
- /**
- * Parser - Utility class for parsing using JAXB generated classes.
- * <p>
- * Copyright (c) 2013-2024 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 <a href="https://github.com/averbraeck" target="_blank">Alexander Verbraeck</a>
- * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
- */
- public final class ParseUtil
- {
- /** */
- private ParseUtil()
- {
- // utility class
- }
- /**
- * Returns all objects of given type from the list of all objects. The returned list may be altered as it is not backed by
- * the input list.
- * @param objectList List<?>; list of objects
- * @param clazz Class<T>; class of type of objects to return
- * @param <T> type
- * @return list of all objects of given type from the list of all objects
- */
- @SuppressWarnings("unchecked")
- public static <T> List<T> getObjectsOfType(final List<?> objectList, final Class<T> clazz)
- {
- List<T> list = new ArrayList<>();
- for (Object object : objectList)
- {
- if (clazz.isAssignableFrom(object.getClass()))
- {
- list.add((T) object);
- }
- }
- return list;
- }
- /**
- * Find and return the stream belonging to te streamId.
- * @param streamInformation the map with streams from the RUN tag
- * @param streamSource the stream source
- * @param eval Eval; expression evaluator.
- * @return the stream belonging to te streamId
- * @throws XmlParserException when the stream could not be found
- */
- public static StreamInterface findStream(final StreamInformation streamInformation, final RandomStreamSource streamSource,
- final Eval eval) throws XmlParserException
- {
- String streamId;
- if (streamSource == null || streamSource.getDefault() == null)
- {
- streamId = "default";
- }
- else if (streamSource.getGeneration() == null)
- {
- streamId = "generation";
- }
- else
- {
- streamId = streamSource.getDefined().get(eval);
- }
- if (streamInformation.getStream(streamId) == null)
- {
- throw new XmlParserException("Could not find stream with Id=" + streamId);
- }
- return streamInformation.getStream(streamId);
- }
-
- /**
- * Parse LengthBeginEnd for a Lane.
- * @param lbe LengthBeginEnd; the begin, end, fraction, or offset from begin or end on the lane
- * @param laneLength Length; the length of the lane
- * @return the offset on the lane
- */
- public static Length parseLengthBeginEnd(final LengthBeginEnd lbe, final Length laneLength)
- {
- if (lbe.isAbsolute())
- {
- if (lbe.isBegin())
- return lbe.getOffset();
- else
- return laneLength.minus(lbe.getOffset());
- }
- else
- {
- return laneLength.times(lbe.getFraction());
- }
- }
- /**
- * Parse room checker.
- * @param roomChecker RoomCheckerType; room checker type
- * @param eval Eval; expression evaluator.
- * @return RoomChecker; parsed room checker
- */
- public static RoomChecker parseRoomChecker(final RoomCheckerType roomChecker, final Eval eval)
- {
- if (roomChecker == null || roomChecker.getCf() != null)
- {
- return new CfRoomChecker();
- }
- else if (roomChecker.getCfBa() != null)
- {
- return new CfBaRoomChecker();
- }
- return new TtcRoomChecker(roomChecker.getTtc().get(eval));
- }
- }