TrafficLinkMetadata.java

package org.heigit.ors.routing.graphhopper.extensions.reader.traffic;

import org.apache.log4j.Logger;
import org.heigit.ors.routing.graphhopper.extensions.TrafficRelevantWayType;
import org.opengis.feature.Property;

import java.util.Collection;


public class TrafficLinkMetadata {
    private static final Logger LOGGER = Logger.getLogger(TrafficLinkMetadata.class.getName());

    private TrafficEnums.LinkTravelDirection travelDirection;
    private TrafficEnums.FunctionalClass functionalClass = TrafficEnums.FunctionalClass.CLASS5;
    private TrafficEnums.NoYesEnum frontageRoad = TrafficEnums.NoYesEnum.NO;
    private TrafficEnums.NoYesEnum ramp = TrafficEnums.NoYesEnum.NO;
    private TrafficEnums.NoYesEnum roundabout = TrafficEnums.NoYesEnum.NO;
    private TrafficEnums.FerryType ferryType = TrafficEnums.FerryType.NO;
    private TrafficEnums.NoYesEnum specialTrafficFigure = TrafficEnums.NoYesEnum.NO;

    public TrafficLinkMetadata(Collection<Property> properties) {
        for (Property property : properties) {
            try {
                String propertyName = property.getName().toString();
                switch (propertyName) {
                    case "DIR_TRAVEL" ->
                            travelDirection = TrafficEnums.LinkTravelDirection.forValue(property.getValue().toString());
                    case "FUNC_CLASS" ->
                            functionalClass = TrafficEnums.FunctionalClass.forValue(Integer.parseInt(property.getValue().toString()));
                    case "FRONTAGE" ->
                            frontageRoad = TrafficEnums.NoYesEnum.forValue(property.getValue().toString().charAt(0));
                    case "RAMP" -> ramp = TrafficEnums.NoYesEnum.forValue(property.getValue().toString().charAt(0));
                    case "ROUNDABOUT" ->
                            roundabout = TrafficEnums.NoYesEnum.forValue(property.getValue().toString().charAt(0));
                    case "FERRY_TYPE" ->
                            ferryType = TrafficEnums.FerryType.forValue(property.getValue().toString().charAt(0));
                    case "SPECTRFIG" ->
                            specialTrafficFigure = TrafficEnums.NoYesEnum.forValue(property.getValue().toString().charAt(0));
                    default -> {
                    }
                }
            } catch (Exception e) {
                LOGGER.debug("Couldn't process property.");
            }
        }
    }

    public boolean isFerry() {
        return ferryType != TrafficEnums.FerryType.NO;
    }


    public boolean isRoundAbout() {
        return roundabout != TrafficEnums.NoYesEnum.NO;
    }

    public TrafficEnums.LinkTravelDirection getTravelDirection() {
        return this.travelDirection;
    }

    public TrafficEnums.FunctionalClass functionalClass() {
        return functionalClass;
    }

    public int getFunctionalClassWithRamp() {
        if (this.ramp == TrafficEnums.NoYesEnum.NO) {
            return this.functionalClass.getFunctionalClass();
        } else if (this.functionalClass == TrafficEnums.FunctionalClass.CLASS1) {
            return TrafficRelevantWayType.RelevantWayTypes.CLASS1LINK.value;
        } else if (this.functionalClass == TrafficEnums.FunctionalClass.CLASS2) {
            return TrafficRelevantWayType.RelevantWayTypes.CLASS2LINK.value;
        } else if (this.functionalClass == TrafficEnums.FunctionalClass.CLASS3) {
            return TrafficRelevantWayType.RelevantWayTypes.CLASS3LINK.value;
        } else if (this.functionalClass == TrafficEnums.FunctionalClass.CLASS4) {
            return TrafficRelevantWayType.RelevantWayTypes.CLASS4LINK.value;
        }
        return 0;
    }
}