private void validateTimes(
      JwDate date, JwMap<String, AcAirport> airportCache, AcScheduledFlightUploadErrorVo e) {
    JwDate date2 = date.getCopy();
    date2.addDays(e.getScheduledFlightUploadDayOffset());

    JwTimestamp departLocalTs =
        JwTimestamp.createTimestamp(date, e.getScheduledFlightUploadDepartureLocalTm());
    JwTimestamp arriveLocalTs =
        JwTimestamp.createTimestamp(date2, e.getScheduledFlightUploadArrivalLocalTm());

    AcAirport originAirport =
        getAirport(airportCache, e.getScheduledFlightUploadOriginAirportCode());
    AcAirport destAirport =
        getAirport(airportCache, e.getScheduledFlightUploadDestinationAirportCode());

    JwTimestamp departUtcTs = originAirport.toUtc(departLocalTs);
    if (departUtcTs == null) departUtcTs = departLocalTs;
    JwTimestamp arriveUtcTs = destAirport.toUtc(arriveLocalTs);
    if (arriveUtcTs == null) arriveUtcTs = arriveLocalTs;

    if (departUtcTs.isAfter(arriveUtcTs)) e.addError("Invalid Depart/Arrive time combination");
  }
 public void setReadOnly(boolean b) {
   super.setReadOnly(b);
   if (_lastModifiedUtcTs != null) _lastModifiedUtcTs.setReadOnly(b);
   if (_frequency != null) _frequency.setReadOnly(b);
   if (_capacity != null) _capacity.setReadOnly(b);
 }
 public void setReadOnly(boolean b) {
   super.setReadOnly(b);
   if (_completionTs != null) _completionTs.setReadOnly(b);
 }