Java tutorial
/* * Copyright 2017 Public Transit Analytics. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.publictransitanalytics.scoregenerator.visitors; import com.google.common.collect.ImmutableSet; import com.publictransitanalytics.scoregenerator.ModeType; import com.publictransitanalytics.scoregenerator.location.GridPoint; import com.publictransitanalytics.scoregenerator.location.Landmark; import com.publictransitanalytics.scoregenerator.location.TransitStop; import com.publictransitanalytics.scoregenerator.rider.Rider; import com.publictransitanalytics.scoregenerator.rider.RiderStatus; import com.publictransitanalytics.scoregenerator.rider.ScheduleReader; import com.publictransitanalytics.scoregenerator.schedule.EntryPoint; import java.time.LocalDateTime; import java.util.Collections; import java.util.Set; import lombok.RequiredArgsConstructor; import com.publictransitanalytics.scoregenerator.rider.RiderFactory; /** * Visitor for transit rides that does not recurse. * * @author Public Transit Analytics */ @RequiredArgsConstructor public class FlatTransitRideVisitor implements FlatVisitor<Set<ReachabilityOutput>> { private final LocalDateTime cutoffTime; private final LocalDateTime waitCutoffTime; private final LocalDateTime currentTime; private final RiderFactory riderFactory; private Set<ReachabilityOutput> output; @Override public Set<ReachabilityOutput> getOutput() { return output; } @Override public void visit(final TransitStop transitStop) throws InterruptedException { final ImmutableSet.Builder<ReachabilityOutput> outputBuilder = ImmutableSet.builder(); final ScheduleReader reader = riderFactory.getScheduleReader(); final Set<EntryPoint> entryPoints = reader.getEntryPoints(transitStop, currentTime, waitCutoffTime); for (final EntryPoint entryPoint : entryPoints) { final Rider rider = riderFactory.getNewRider(entryPoint, cutoffTime); while (rider.canContinueTrip()) { final RiderStatus status = rider.continueTrip(); final LocalDateTime newTime = status.getTime(); final TransitStop newStop = status.getStop(); outputBuilder.add( new ReachabilityOutput(newStop, newTime, new ModeInfo(ModeType.TRANSIT, entryPoint, null))); } } output = outputBuilder.build(); } @Override public void visit(final Landmark point) throws InterruptedException { output = Collections.emptySet(); } @Override public void visit(final GridPoint point) { output = Collections.emptySet(); } }