private void addAgencyElements(
     Document parentDocument, Element rapSheetElement, Set<Agency> agencies) {
   Element e;
   for (Agency agency : agencies) {
     e = appendElement(rapSheetElement, OjbcNamespaceContext.NS_RAPSHEET_41, "Agency");
     XmlUtils.addAttribute(e, OjbcNamespaceContext.NS_STRUCTURES, "id", agency.getXmlId());
     e = appendElement(e, OjbcNamespaceContext.NS_NC, "OrganizationName");
     e.setTextContent(agency.name);
   }
 }
 public OffenseSentence(CriminalOffenseStatute statute, PersonElementWrapper person) {
   this.statute = statute.statute;
   shortDescription = statute.shortDescription;
   description = statute.description;
   severity = statute.severity;
   SentenceOptions sentence = statute.getSentence();
   daysInJail = sentence.getDaysInJail();
   fine = sentence.getFine();
   daysOfProbation = sentence.getProbationTerm();
   supervisionAgency = new Agency();
   if (daysOfProbation != 0) {
     supervisionAgency.name = getRandomCounty(person.state) + " County Probation";
   }
   if (daysInJail > 0 && daysInJail < 366) {
     supervisionAgency.name = getRandomCounty(person.state) + " County Jail";
   } else if (daysInJail > 0) {
     supervisionAgency.name = "Department of Corrections";
   }
 }
  @Override
  public void run() {
    GTFSFeed feed = new GTFSFeed();

    GlobalTx gtx = VersionedDataStore.getGlobalTx();
    AgencyTx atx = null;

    try {
      for (Tuple2<String, Integer> ssid : snapshots) {
        String agencyId = ssid.a;
        Agency agency = gtx.agencies.get(agencyId);
        com.conveyal.gtfs.model.Agency gtfsAgency = agency.toGtfs();
        Logger.info("Exporting agency %s", gtfsAgency);

        if (ssid.b == null) {
          atx = VersionedDataStore.getAgencyTx(agencyId);
        } else {
          atx = VersionedDataStore.getAgencyTx(agencyId, ssid.b);
        }

        // write the agencies.txt entry
        feed.agency.put(agencyId, agency.toGtfs());

        // write all of the calendars and calendar dates
        for (ServiceCalendar cal : atx.calendars.values()) {
          com.conveyal.gtfs.model.Service gtfsService =
              cal.toGtfs(toGtfsDate(startDate), toGtfsDate(endDate));
          // note: not using user-specified IDs

          // add calendar dates
          if (atx.exceptions != null) {
            for (ScheduleException ex : atx.exceptions.values()) {
              for (LocalDate date : ex.dates) {
                if (date.isBefore(startDate) || date.isAfter(endDate))
                  // no need to write dates that do not apply
                  continue;

                CalendarDate cd = new CalendarDate();
                cd.date = date;
                cd.service = gtfsService;
                cd.exception_type = ex.serviceRunsOn(cal) ? 1 : 2;

                if (gtfsService.calendar_dates.containsKey(date))
                  throw new IllegalArgumentException(
                      "Duplicate schedule exceptions on " + date.toString());

                gtfsService.calendar_dates.put(date, cd);
              }
            }
          }

          feed.services.put(gtfsService.service_id, gtfsService);
        }

        Map<String, com.conveyal.gtfs.model.Route> gtfsRoutes = Maps.newHashMap();

        // write the routes
        for (Route route : atx.routes.values()) {
          com.conveyal.gtfs.model.Route gtfsRoute = route.toGtfs(gtfsAgency, gtx);
          feed.routes.put(route.getGtfsId(), gtfsRoute);

          gtfsRoutes.put(route.id, gtfsRoute);
        }

        // write the trips on those routes
        // we can't use the trips-by-route index because we may be exporting a snapshot database
        // without indices
        for (Trip trip : atx.trips.values()) {
          if (!gtfsRoutes.containsKey(trip.routeId)) {
            Logger.warn("Trip {} has not matching route", trip);
            continue;
          }

          com.conveyal.gtfs.model.Route gtfsRoute = gtfsRoutes.get(trip.routeId);
          Route route = atx.routes.get(trip.routeId);

          com.conveyal.gtfs.model.Trip gtfsTrip = new com.conveyal.gtfs.model.Trip();

          gtfsTrip.block_id = trip.blockId;
          gtfsTrip.route = gtfsRoute;
          gtfsTrip.trip_id = trip.getGtfsId();
          // not using custom ids for calendars
          gtfsTrip.service = feed.services.get(trip.calendarId);
          gtfsTrip.trip_headsign = trip.tripHeadsign;
          gtfsTrip.trip_short_name = trip.tripShortName;
          gtfsTrip.direction_id = trip.tripDirection == TripDirection.A ? 0 : 1;

          TripPattern pattern = atx.tripPatterns.get(trip.patternId);

          Tuple2<String, Integer> nextKey =
              feed.shapePoints.ceilingKey(new Tuple2(pattern.id, null));
          if ((nextKey == null || !pattern.id.equals(nextKey.a))
              && pattern.shape != null
              && !pattern.useStraightLineDistances) {
            // this shape has not yet been saved
            double[] coordDistances = GeoUtils.getCoordDistances(pattern.shape);

            for (int i = 0; i < coordDistances.length; i++) {
              Coordinate coord = pattern.shape.getCoordinateN(i);
              Shape shape = new Shape(pattern.id, coord.y, coord.x, i + 1, coordDistances[i]);
              feed.shapePoints.put(new Tuple2(pattern.id, shape.shape_pt_sequence), shape);
            }
          }

          if (pattern.shape != null && !pattern.useStraightLineDistances)
            gtfsTrip.shape_id = pattern.id;

          if (trip.wheelchairBoarding != null) {
            if (trip.wheelchairBoarding.equals(AttributeAvailabilityType.AVAILABLE))
              gtfsTrip.wheelchair_accessible = 1;
            else if (trip.wheelchairBoarding.equals(AttributeAvailabilityType.UNAVAILABLE))
              gtfsTrip.wheelchair_accessible = 2;
            else gtfsTrip.wheelchair_accessible = 0;

          } else if (route.wheelchairBoarding != null) {
            if (route.wheelchairBoarding.equals(AttributeAvailabilityType.AVAILABLE))
              gtfsTrip.wheelchair_accessible = 1;
            else if (route.wheelchairBoarding.equals(AttributeAvailabilityType.UNAVAILABLE))
              gtfsTrip.wheelchair_accessible = 2;
            else gtfsTrip.wheelchair_accessible = 0;
          }

          feed.trips.put(gtfsTrip.trip_id, gtfsTrip);

          TripPattern patt = atx.tripPatterns.get(trip.patternId);

          Iterator<TripPatternStop> psi = patt.patternStops.iterator();

          int stopSequence = 1;

          // write the stop times
          for (StopTime st : trip.stopTimes) {
            TripPatternStop ps = psi.next();
            if (st == null) continue;

            Stop stop = atx.stops.get(st.stopId);

            if (!st.stopId.equals(ps.stopId)) {
              throw new IllegalStateException("Trip " + trip.id + " does not match its pattern!");
            }

            com.conveyal.gtfs.model.StopTime gst = new com.conveyal.gtfs.model.StopTime();
            gst.arrival_time = st.arrivalTime != null ? st.arrivalTime : Entity.INT_MISSING;
            gst.departure_time = st.departureTime != null ? st.departureTime : Entity.INT_MISSING;

            if (st.dropOffType != null) gst.drop_off_type = st.dropOffType.toGtfsValue();
            else if (stop.dropOffType != null) gst.drop_off_type = stop.dropOffType.toGtfsValue();

            if (st.pickupType != null) gst.pickup_type = st.pickupType.toGtfsValue();
            else if (stop.dropOffType != null) gst.drop_off_type = stop.dropOffType.toGtfsValue();

            gst.shape_dist_traveled = ps.shapeDistTraveled;
            gst.stop_headsign = st.stopHeadsign;
            gst.stop_id = stop.getGtfsId();

            // write the stop as needed
            if (!feed.stops.containsKey(gst.stop_id)) {
              feed.stops.put(gst.stop_id, stop.toGtfs());
            }

            gst.stop_sequence = stopSequence++;

            if (ps.timepoint != null) gst.timepoint = ps.timepoint ? 1 : 0;
            else gst.timepoint = Entity.INT_MISSING;

            gst.trip_id = gtfsTrip.trip_id;

            feed.stop_times.put(new Tuple2(gtfsTrip.trip_id, gst.stop_sequence), gst);
          }

          // create frequencies as needed
          if (trip.useFrequency != null && trip.useFrequency) {
            Frequency f = new Frequency();
            f.trip = gtfsTrip;
            f.start_time = trip.startTime;
            f.end_time = trip.endTime;
            f.exact_times = 0;
            f.headway_secs = trip.headway;
            feed.frequencies.put(gtfsTrip.trip_id, f);
          }
        }
      }

      feed.toFile(output.getAbsolutePath());
    } finally {
      gtx.rollbackIfOpen();
      if (atx != null) atx.rollbackIfOpen();
    }
  }
예제 #4
0
 public String getAgencyId() {
   if (agency == null) return null;
   return agency.getAgencyId();
 }
    public Arrest(DateTime baseDate, PersonElementWrapper person) {

      date = person.birthdate;

      while (Years.yearsBetween(person.birthdate, date).getYears() < 14) {
        // make sure we don't arrest anyone younger than 14
        date = generateUniformRandomDateBetween(baseDate.minusYears(8), baseDate);
      }

      id =
          generateRandomID(
              "A",
              10); // could be a problem in the unlikely event you generate two arrests with the
                   // same id (this is used as an xml id)
      recordId = generateRandomID("", 3) + generateRandomID("-", 7);
      int chargeCount = generatePoissonInt(1, true);
      int courtCaseLength = (int) randomGenerator.nextGaussian(180, 60);
      int daysSinceArrest = Days.daysBetween(date, baseDate).getDays();
      arrestingAgency = new Agency();
      arrestingAgency.name = getRandomCity(person.state).toUpperCase() + " PD";

      if (courtCaseLength < daysSinceArrest) {
        dispoDate = date.plusDays(courtCaseLength);
      }

      int maxDaysInJail = 0;
      int maxDaysOfProbation = 0;
      felonyConviction = false;

      for (int i = 0; i < chargeCount; i++) {
        ArrestCharge arrestCharge = new ArrestCharge(person);
        charges.add(arrestCharge);
        if (arrestCharge.offense != null) {
          maxDaysInJail = Math.max(maxDaysInJail, arrestCharge.offense.daysInJail);
          maxDaysOfProbation = Math.max(maxDaysOfProbation, arrestCharge.offense.daysOfProbation);
          if ("F".equals(arrestCharge.severity.substring(0, 1))) {
            felonyConviction = true;
          }
          if (arrestCharge.offense.daysOfProbation > 0) {
            probationSupervisionAgency = arrestCharge.offense.supervisionAgency;
          }
          if (arrestCharge.offense.daysInJail > 0) {
            custodySupervisionAgency = arrestCharge.offense.supervisionAgency;
          }
        }
      }

      if (maxDaysInJail > 0 && dispoDate != null) {
        custodyEndDate = dispoDate.plusDays(maxDaysInJail);
        custodySupervisionId = id + "SC";
      }

      if (maxDaysOfProbation > 0 && dispoDate != null) {
        probationEndDate = dispoDate.plusDays(maxDaysOfProbation);
        probationSupervisionId = id + "SP";
      }

      if (coinFlip(.15)) {
        arrestingAgency.name = "State Police";
      }
    }