Package org.onebusaway.api.model.transit

Source Code of org.onebusaway.api.model.transit.ItineraryV2BeanFactory

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* 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 org.onebusaway.api.model.transit;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.onebusaway.api.model.transit.tripplanning.EdgeV2Bean;
import org.onebusaway.api.model.transit.tripplanning.GraphResultV2Bean;
import org.onebusaway.api.model.transit.tripplanning.ItinerariesV2Bean;
import org.onebusaway.api.model.transit.tripplanning.ItineraryV2Bean;
import org.onebusaway.api.model.transit.tripplanning.LegV2Bean;
import org.onebusaway.api.model.transit.tripplanning.LocationV2Bean;
import org.onebusaway.api.model.transit.tripplanning.StreetLegV2Bean;
import org.onebusaway.api.model.transit.tripplanning.TransitLegV2Bean;
import org.onebusaway.api.model.transit.tripplanning.VertexV2Bean;
import org.onebusaway.collections.CollectionsLibrary;
import org.onebusaway.transit_data.model.StopBean;
import org.onebusaway.transit_data.model.schedule.FrequencyBean;
import org.onebusaway.transit_data.model.service_alerts.ServiceAlertBean;
import org.onebusaway.transit_data.model.tripplanning.EdgeNarrativeBean;
import org.onebusaway.transit_data.model.tripplanning.ItinerariesBean;
import org.onebusaway.transit_data.model.tripplanning.ItineraryBean;
import org.onebusaway.transit_data.model.tripplanning.LegBean;
import org.onebusaway.transit_data.model.tripplanning.LocationBean;
import org.onebusaway.transit_data.model.tripplanning.StreetLegBean;
import org.onebusaway.transit_data.model.tripplanning.TransitLegBean;
import org.onebusaway.transit_data.model.tripplanning.VertexBean;
import org.onebusaway.transit_data.model.trips.TripBean;

public class ItineraryV2BeanFactory {

  private final BeanFactoryV2 _factory;

  public ItineraryV2BeanFactory(BeanFactoryV2 factory) {
    _factory = factory;
  }

  public ItinerariesV2Bean getItineraries(ItinerariesBean itineraries) {

    ItinerariesV2Bean bean = new ItinerariesV2Bean();

    bean.setFrom(getLocation(itineraries.getFrom()));
    bean.setTo(getLocation(itineraries.getTo()));

    List<ItineraryBean> its = itineraries.getItineraries();

    if (!CollectionsLibrary.isEmpty(its)) {
      List<ItineraryV2Bean> beans = new ArrayList<ItineraryV2Bean>(its.size());
      for (ItineraryBean itinerary : its) {
        ItineraryV2Bean itBean = getItinerary(itinerary);
        beans.add(itBean);
      }
      bean.setItineraries(beans);
    }

    return bean;
  }

  public LocationV2Bean getLocation(LocationBean location) {

    LocationV2Bean bean = new LocationV2Bean();
    bean.setLocation(location.getLocation());
    bean.setName(location.getName());
    StopBean stop = location.getStopBean();

    if (stop != null) {
      bean.setStopId(stop.getId());
      _factory.addToReferences(stop);
    }

    return bean;
  }

  public ItineraryV2Bean getItinerary(ItineraryBean itinerary) {

    ItineraryV2Bean bean = new ItineraryV2Bean();

    bean.setStartTime(itinerary.getStartTime());
    bean.setEndTime(itinerary.getEndTime());
    bean.setProbability(itinerary.getProbability());
    bean.setSelected(itinerary.isSelected());

    List<LegBean> legs = itinerary.getLegs();
    if (!CollectionsLibrary.isEmpty(legs)) {
      List<LegV2Bean> legBeans = new ArrayList<LegV2Bean>(legs.size());
      for (LegBean leg : legs) {
        LegV2Bean legBean = getLeg(leg);
        legBeans.add(legBean);
      }
      bean.setLegs(legBeans);
    }

    return bean;
  }

  public ItineraryBean reverseItinerary(ItineraryV2Bean bean) {
    if (bean == null)
      return null;
    ItineraryBean itinerary = new ItineraryBean();
    itinerary.setStartTime(bean.getStartTime());
    itinerary.setEndTime(bean.getEndTime());
    itinerary.setProbability(bean.getProbability());
    List<LegV2Bean> legBeans = bean.getLegs();
    if (!CollectionsLibrary.isEmpty(legBeans)) {
      List<LegBean> legs = new ArrayList<LegBean>();
      for (LegV2Bean legBean : legBeans) {
        LegBean leg = reverseLeg(legBean);
        legs.add(leg);
      }
      itinerary.setLegs(legs);
    }
    return itinerary;
  }

  public LegV2Bean getLeg(LegBean leg) {

    LegV2Bean bean = new LegV2Bean();

    bean.setStartTime(leg.getStartTime());
    bean.setEndTime(leg.getEndTime());
    bean.setFrom(_factory.getPoint(leg.getFrom()));
    bean.setTo(_factory.getPoint(leg.getTo()));
    bean.setDistance(leg.getDistance());
    bean.setMode(leg.getMode());

    TransitLegBean transitLeg = leg.getTransitLeg();
    if (transitLeg != null) {
      TransitLegV2Bean transitLegBean = getTransitLeg(transitLeg);
      bean.setTransitLeg(transitLegBean);
    }

    List<StreetLegBean> streetLegs = leg.getStreetLegs();
    if (!CollectionsLibrary.isEmpty(streetLegs)) {
      List<StreetLegV2Bean> streetLegBeans = new ArrayList<StreetLegV2Bean>();
      for (StreetLegBean streetLeg : streetLegs) {
        StreetLegV2Bean streetLegBean = getStreetLeg(streetLeg);
        streetLegBeans.add(streetLegBean);
      }
      bean.setStreetLegs(streetLegBeans);
    }

    return bean;
  }

  public LegBean reverseLeg(LegV2Bean bean) {

    LegBean leg = new LegBean();

    leg.setStartTime(bean.getStartTime());
    leg.setEndTime(bean.getEndTime());
    leg.setFrom(_factory.reversePoint(bean.getFrom()));
    leg.setTo(_factory.reversePoint(bean.getTo()));
    leg.setDistance(bean.getDistance());
    if (_factory.isStringSet(bean.getMode()))
      leg.setMode(bean.getMode());

    TransitLegV2Bean transitLegBean = bean.getTransitLeg();
    if (transitLegBean != null) {
      TransitLegBean transitLeg = reverseTransitLeg(transitLegBean);
      leg.setTransitLeg(transitLeg);
    }

    List<StreetLegV2Bean> streetLegBeans = bean.getStreetLegs();
    if (!CollectionsLibrary.isEmpty(streetLegBeans)) {
      List<StreetLegBean> streetLegs = new ArrayList<StreetLegBean>();
      for (StreetLegV2Bean streetLegBean : streetLegBeans) {
        StreetLegBean streetLeg = reverseStreetLeg(streetLegBean);
        streetLegs.add(streetLeg);
      }
      leg.setStreetLegs(streetLegs);
    }

    return leg;
  }

  public TransitLegV2Bean getTransitLeg(TransitLegBean leg) {

    TransitLegV2Bean bean = new TransitLegV2Bean();

    TripBean trip = leg.getTrip();
    if (trip != null) {
      bean.setTripId(trip.getId());
      _factory.addToReferences(trip);
    }

    bean.setServiceDate(leg.getServiceDate());
    bean.setVehicleId(leg.getVehicleId());

    FrequencyBean frequency = leg.getFrequency();
    if (frequency != null) {
      FrequencyV2Bean freqBean = _factory.getFrequency(frequency);
      bean.setFrequency(freqBean);
    }

    StopBean fromStop = leg.getFromStop();
    if (fromStop != null) {
      bean.setFromStopId(fromStop.getId());
      bean.setFromStopSequence(leg.getFromStopSequence());
      _factory.addToReferences(fromStop);
    }

    bean.setScheduledDepartureTime(leg.getScheduledDepartureTime());
    bean.setPredictedDepartureTime(leg.getPredictedDepartureTime());
    bean.setScheduledDepartureInterval(_factory.getTimeInterval(leg.getScheduledDepartureInterval()));
    bean.setPredictedDepartureInterval(_factory.getTimeInterval(leg.getPredictedDepartureInterval()));

    StopBean toStop = leg.getToStop();
    if (toStop != null) {
      bean.setToStopId(toStop.getId());
      bean.setToStopSequence(leg.getToStopSequence());
      _factory.addToReferences(toStop);
    }

    bean.setScheduledArrivalTime(leg.getScheduledArrivalTime());
    bean.setPredictedArrivalTime(leg.getPredictedArrivalTime());
    bean.setScheduledArrivalInterval(_factory.getTimeInterval(leg.getScheduledArrivalInterval()));
    bean.setPredictedArrivalInterval(_factory.getTimeInterval(leg.getPredictedArrivalInterval()));

    bean.setRouteShortName(leg.getRouteShortName());
    bean.setRouteLongName(leg.getRouteLongName());
    bean.setTripHeadsign(leg.getTripHeadsign());
    bean.setPath(leg.getPath());

    List<ServiceAlertBean> situations = leg.getSituations();
    if (!CollectionsLibrary.isEmpty(situations)) {
      List<String> situationIds = new ArrayList<String>(situations.size());
      for (ServiceAlertBean situation : situations) {
        situationIds.add(situation.getId());
        _factory.addToReferences(situation);
      }
      bean.setSituationIds(situationIds);
    }

    return bean;
  }

  private TransitLegBean reverseTransitLeg(TransitLegV2Bean leg) {

    TransitLegBean bean = new TransitLegBean();

    String tripId = leg.getTripId();
    if (tripId != null && !tripId.isEmpty()) {
      TripBean trip = new TripBean();
      trip.setId(tripId);
      bean.setTrip(trip);
    }

    bean.setServiceDate(leg.getServiceDate());
    if (_factory.isStringSet(leg.getVehicleId()))
      bean.setVehicleId(leg.getVehicleId());

    FrequencyV2Bean frequency = leg.getFrequency();
    if (frequency != null) {
      FrequencyBean freqBean = _factory.reverseFrequency(frequency);
      bean.setFrequency(freqBean);
    }

    String fromStopId = leg.getFromStopId();
    if (_factory.isStringSet(fromStopId)) {
      StopBean stop = new StopBean();
      stop.setId(fromStopId);
      bean.setFromStop(stop);
      bean.setFromStopSequence(leg.getFromStopSequence());
    }

    bean.setScheduledDepartureTime(leg.getScheduledDepartureTime());

    String toStopId = leg.getToStopId();
    if (_factory.isStringSet(toStopId)) {
      StopBean stop = new StopBean();
      stop.setId(toStopId);
      bean.setToStop(stop);
      bean.setToStopSequence(leg.getToStopSequence());
    }

    bean.setScheduledArrivalTime(leg.getScheduledArrivalTime());

    return bean;
  }

  public StreetLegV2Bean getStreetLeg(StreetLegBean leg) {

    StreetLegV2Bean bean = new StreetLegV2Bean();

    bean.setStreetName(leg.getStreetName());

    bean.setPath(leg.getPath());
    bean.setDistance(leg.getDistance());

    return bean;
  }

  public StreetLegBean reverseStreetLeg(StreetLegV2Bean leg) {

    StreetLegBean bean = new StreetLegBean();

    if (_factory.isStringSet(leg.getStreetName()))
      bean.setStreetName(leg.getStreetName());

    if (_factory.isStringSet(leg.getPath()))
      bean.setPath(leg.getPath());
    bean.setDistance(leg.getDistance());

    return bean;
  }

  public GraphResultV2Bean getGraphResult(List<VertexBean> list) {

    GraphResultV2Bean result = new GraphResultV2Bean();

    List<VertexV2Bean> vertices = new ArrayList<VertexV2Bean>();

    for (VertexBean vertex : list) {
      VertexV2Bean bean = new VertexV2Bean();
      bean.setId(vertex.getId());
      bean.setLocation(vertex.getLocation());

      Map<String, String> tags = getTags(vertex.getTags());

      bean.setTags(tags);
      vertices.add(bean);
    }

    if (!vertices.isEmpty())
      result.setVertices(vertices);

    List<EdgeV2Bean> edges = new ArrayList<EdgeV2Bean>();

    for (VertexBean vertex : list) {
      List<EdgeNarrativeBean> out = vertex.getOutgoing();
      if (out != null) {
        for (EdgeNarrativeBean narrative : out) {
          EdgeV2Bean bean = new EdgeV2Bean();
          bean.setFromId(narrative.getFrom().getId());
          bean.setToId(narrative.getTo().getId());
          bean.setName(narrative.getName());
          bean.setPath(narrative.getPath());
          Map<String, String> tags = getTags(narrative.getTags());
          bean.setTags(tags);

          edges.add(bean);
        }
      }
    }

    if (!edges.isEmpty())
      result.setEdges(edges);

    return result;
  }

  private Map<String, String> getTags(Map<String, Object> tags) {

    Map<String, String> tagBeans = new HashMap<String, String>();

    if (tags == null)
      return null;

    for (Map.Entry<String, Object> entry : tags.entrySet()) {
      String key = entry.getKey();
      String value = getValueAsString(entry.getValue());
      tagBeans.put(key, value);
    }
    return tagBeans;
  }

  private String getValueAsString(Object value) {

    if (value instanceof StopBean) {
      StopBean stop = (StopBean) value;
      _factory.addToReferences(stop);
      return stop.getId();
    } else {
      return value.toString();
    }
  }

}
TOP

Related Classes of org.onebusaway.api.model.transit.ItineraryV2BeanFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.