AppendableRouteExtraInfoBuilder.java

/*  This file is part of Openrouteservice.
 *
 *  Openrouteservice is free software; you can redistribute it and/or modify it under the terms of the
 *  GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1
 *  of the License, or (at your option) any later version.

 *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *  See the GNU Lesser General Public License for more details.

 *  You should have received a copy of the GNU Lesser General Public License along with this library;
 *  if not, see <https://www.gnu.org/licenses/>.
 */
package org.heigit.ors.routing.util.extrainfobuilders;

import com.graphhopper.util.PointList;
import org.heigit.ors.routing.RouteExtraInfo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class AppendableRouteExtraInfoBuilder extends SimpleRouteExtraInfoBuilder {
    private final ArrayList<SegmentParams> segmentParamsList;

    public AppendableRouteExtraInfoBuilder(RouteExtraInfo extraInfo) {
        super(extraInfo);
        segmentParamsList = new ArrayList<>();
    }

    @Override
    public void addSegment(double value, long valueIndex, PointList geom, double dist) {
        segmentParamsList.add(new SegmentParams(value, valueIndex, geom, dist));
    }

    public List<SegmentParams> getSegmentParamsList() {
        return segmentParamsList;
    }

    public void append(AppendableRouteExtraInfoBuilder more) {
        this.segmentParamsList.addAll(more.getSegmentParamsList());
    }

    @Override
    public void finish() {
        for (Iterator<SegmentParams> it = segmentParamsList.iterator(); it.hasNext(); ) {
            SegmentParams s = it.next();
            super.addSegment(s.value, s.valueIndex, s.geom, s.dist, !it.hasNext());
        }
    }

    private static class SegmentParams {
        double value;
        long valueIndex;
        PointList geom;
        double dist;

        SegmentParams(double value, long valueIndex, PointList geom, double dist) {
            this.value = value;
            this.valueIndex = valueIndex;
            this.geom = geom;
            this.dist = dist;
        }
    }
}