Java 类org.joda.time.Interval 实例源码

项目:Equella    文件:EchoUtils.java   
public static String formatDuration(long duration)
{
    // Using Joda Time
    DateTime now = new DateTime(); // Now
    DateTime plus = now.plus(new Duration(duration * 1000));

    // Define and calculate the interval of time
    Interval interval = new Interval(now.getMillis(), plus.getMillis());
    Period period = interval.toPeriod(PeriodType.time());

    // Define the period formatter for pretty printing
    String ampersand = " & ";
    PeriodFormatter pf = new PeriodFormatterBuilder().appendHours().appendSuffix(ds("hour"), ds("hours"))
        .appendSeparator(" ", ampersand).appendMinutes().appendSuffix(ds("minute"), ds("minutes"))
        .appendSeparator(ampersand).appendSeconds().appendSuffix(ds("second"), ds("seconds")).toFormatter();

    return pf.print(period).trim();
}
项目:xsharing-services-router    文件:MBDataRepositoryImpl.java   
@Nullable
private MBPlaceInavailability rowToInavail(Object[] row) {
    try {
        Interval interval = getInterval(BasicUtils.getTypeSafeString(row[3]),
                                        BasicUtils.getTypeSafeString(row[4]));

        MBPlaceInavailability in = new MBPlaceInavailability();
        in.setProviderId(BasicUtils.getTypeSafeString(row[0]));
        in.setPlaceId(BasicUtils.getTypeSafeString(row[1]));
        in.setBookingTargetId(BasicUtils.getTypeSafeString(row[2]));
        in.setInavailability(interval);
        return in;
    } catch (Exception e) {
        return null;
    }
}
项目:xsharing-services-router    文件:AbstractInavailabilityStrategy.java   
protected static boolean overlaps(SharingStation station, Interval interval) {
    List<VehicleStatus> vehicleStatusList = station.getVehicleStatusList();
    for (VehicleStatus vs : vehicleStatusList) {
        List<Interval> inavailabilities = vs.getInavailabilities();
        if (!contains(inavailabilities, interval)) {
            // as long as there is a vehicle with non-overlapping inavailabilities,
            // the station can be used during the routing.
            return false;
        }
    }
    // ok, there are two possible reasons for this outcome
    // 1) there is no vehicle at the station
    // 2) we have gone through all the vehicles and there is no available one (all inavailabilities overlap)
    return true;
}
项目:exam    文件:CalendarController.java   
protected Collection<Interval> gatherSuitableSlots(ExamRoom room, LocalDate date, Integer examDuration) {
    Collection<Interval> examSlots = new ArrayList<>();
    // Resolve the opening hours for room and day
    List<ExamRoom.OpeningHours> openingHours = room.getWorkingHoursForDate(date);
    if (!openingHours.isEmpty()) {
        // Get suitable slots based on exam duration
        for (Interval slot : allSlots(openingHours, room, date)) {
            DateTime beginning = slot.getStart();
            DateTime openUntil = getEndOfOpeningHours(beginning, openingHours);
            if (!beginning.plusMinutes(examDuration).isAfter(openUntil)) {
                DateTime end = beginning.plusMinutes(examDuration);
                examSlots.add(new Interval(beginning, end));
            }
        }
    }
    return examSlots;
}
项目:exam    文件:CalendarController.java   
/**
 * Queries for slots for given room and day
 */
private Set<TimeSlot> getExamSlots(User user, ExamRoom room, Exam exam, LocalDate date,
                                   Collection<Reservation> reservations, Collection<ExamMachine> machines) {
    Integer examDuration = exam.getDuration();
    Collection<Interval> examSlots = gatherSuitableSlots(room, date, examDuration);
    Map<Interval, Optional<Integer>> map = examSlots.stream().collect(
            Collectors.toMap(
                    Function.identity(),
                    es -> Optional.empty(),
                    (u, v) -> {
                        throw new IllegalStateException(String.format("Duplicate key %s", u));
                    },
                    LinkedHashMap::new));
    // Check reservation status and machine availability for each slot
    return handleReservations(map, reservations, exam, machines, user);
}
项目:exam    文件:ExternalCalendarController.java   
private Set<TimeSlot> getExamSlots(ExamRoom room, Integer examDuration, LocalDate date, Collection<ExamMachine> machines) {
    Set<TimeSlot> slots = new LinkedHashSet<>();
    Collection<Interval> examSlots = gatherSuitableSlots(room, date, examDuration);
    // Check machine availability for each slot
    for (Interval slot : examSlots) {
        // Check machine availability
        int availableMachineCount = machines.stream()
                .filter(m -> !isReservedDuring(m, slot))
                .collect(Collectors.toList())
                .size();
        slots.add(new TimeSlot(slot, availableMachineCount, null));
    }
    return slots;
}
项目:exam    文件:DateTimeUtils.java   
private static List<Interval> getExistingIntervalGaps(List<Interval> reserved) {
    List<Interval> gaps = new ArrayList<>();
    Interval current = reserved.get(0);
    for (int i = 1; i < reserved.size(); i++) {
        Interval next = reserved.get(i);
        Interval gap = current.gap(next);
        if (gap != null) {
            gaps.add(gap);
        }
        current = next;
    }
    return gaps;
}
项目:exam    文件:DateTimeUtils.java   
public static List<Interval> getExceptionEvents(List<ExceptionWorkingHours> hours, LocalDate date, RestrictionType restrictionType) {
    List<Interval> exceptions = new ArrayList<>();
    for (ExceptionWorkingHours ewh : hours) {
        boolean isApplicable =
                (restrictionType == RestrictionType.RESTRICTIVE && ewh.isOutOfService()) ||
                        (restrictionType == RestrictionType.NON_RESTRICTIVE && !ewh.isOutOfService());
        if (isApplicable) {
            DateTime start = new DateTime(ewh.getStartDate()).plusMillis(ewh.getStartDateTimezoneOffset());
            DateTime end = new DateTime(ewh.getEndDate()).plusMillis(ewh.getEndDateTimezoneOffset());
            Interval exception = new Interval(start, end);
            Interval wholeDay = date.toInterval();
            if (exception.contains(wholeDay) || exception.equals(wholeDay)) {
                exceptions.clear();
                exceptions.add(wholeDay);
                break;
            }
            if (exception.overlaps(wholeDay)) {
                exceptions.add(new Interval(exception.getStart(), exception.getEnd()));
            }
        }
    }
    return exceptions;
}
项目:exam    文件:DateTimeUtils.java   
public static List<Interval> mergeSlots(List<Interval> slots) {
    if (slots.size() <= 1) {
        return slots;
    }
    slots.sort(Comparator.comparing(AbstractInterval::getStart));
    boolean isMerged = false;
    List<Interval> merged = new ArrayList<>();
    merged.add(slots.get(0));
    for (int i = 1; i < slots.size(); ++i) {
        Interval first = slots.get(i - 1);
        Interval second = slots.get(i);
        if (!second.getStart().isAfter(first.getEnd())) {
            merged.remove(i - 1);
            DateTime laterEnding = first.getEnd().isAfter(second.getEnd()) ? first.getEnd() : second.getEnd();
            merged.add(new Interval(first.getStart(), laterEnding));
            isMerged = true;
        } else {
            merged.add(second);
        }
    }
    if (isMerged) {
        merged = mergeSlots(merged);
    }
    // Nothing to merge anymore
    return merged;
}
项目:mobile-app-dev-book    文件:JournalFragment.java   
public void filterTripByDate(Interval dateRange) {
    dateFilter = dateRange;
    if (selectedTrips == null) return;
    selectedTrips.clear();
    if (allTrips == null) return;;
    if (dateRange != null) {
        for (Trip t : allTrips) {
            DateTime begDate = DateTime.parse(t.getStartDate());
            DateTime endDate = DateTime.parse(t.getEndDate());
            if (dateRange.isAfter(endDate)) continue;
            if (dateRange.isBefore(begDate)) continue;
            selectedTrips.add(t);
        }
    } else
        selectedTrips.addAll(allTrips);
    adapter.reloadFrom(selectedTrips);
}
项目:fili    文件:DataSourceMetadataService.java   
/**
 *  Group interval in segment metadata by column.
 *
 * @param metadata  Metadata containing the druid segments information
 *
 * @return map of data time to a map of segment id to segment info
 */
protected static Map<String, SimplifiedIntervalList> groupIntervalByColumn(DataSourceMetadata metadata) {
    Map<String, Set<Interval>> currentByColumn = new LinkedHashMap<>();

    // Accumulate all intervals by column name
    for (DataSegment segment : metadata.getSegments()) {
        SegmentInfo segmentInfo = new SegmentInfo(segment);
        for (String column : segmentInfo.getColumnNames()) {
            currentByColumn.computeIfAbsent(column, ignored -> new HashSet<>()).add(segmentInfo.getInterval());
        }
    }

    // Simplify interval sets using SimplifiedIntervalList
    return currentByColumn.entrySet().stream()
            .collect(
                    Collectors.toMap(
                            Map.Entry::getKey,
                            entry -> new SimplifiedIntervalList(entry.getValue())
                    )
            );
}
项目:fili    文件:QueryPlanningConstraint.java   
/**
 * Constructor.
 *
 * @param requestDimensions  Dimensions contained in request
 * @param filterDimensions  Filtered dimensions
 * @param metricDimensions  Metric related dimensions
 * @param metricNames  Names of metrics
 * @param apiFilters  Map of dimension to its set of API filters
 * @param logicalTable  The logical table requested by the request
 * @param intervals  The interval constraint of the request
 * @param logicalMetrics  The logical metrics requested by the request
 * @param minimumGranularity  The finest granularity that must be satisfied by table granularity
 * @param requestGranularity  The requested granularity of on the requested table
 */
public QueryPlanningConstraint(
        Set<Dimension> requestDimensions,
        Set<Dimension> filterDimensions,
        Set<Dimension> metricDimensions,
        Set<String> metricNames,
        ApiFilters apiFilters,
        LogicalTable logicalTable,
        Set<Interval> intervals,
        Set<LogicalMetric> logicalMetrics,
        Granularity minimumGranularity,
        Granularity requestGranularity
) {
    super(requestDimensions, filterDimensions, metricDimensions, metricNames, apiFilters);
    this.logicalTable = logicalTable;
    this.intervals = intervals;
    this.logicalMetrics = logicalMetrics;
    this.minimumGranularity = minimumGranularity;
    this.requestGranularity = requestGranularity;
    this.logicalMetricNames = generateLogicalMetricNames();
}
项目:fili    文件:IntervalUtils.java   
/**
 * Collect all subintervals of an interval list of a grain bucketed size which are subintervals of another supply
 * list of intervals.
 *
 * @param supplyIntervals  The interval collection to match bucketedIntervals against
 * @param bucketedIntervals  The grain bucketed intervals to collect if they overlap the supply
 * @param granularity  Grain at which to split the bucketingIntervals
 *
 * @return a simplified list of subintervals of the bucketedIntervals list
 */
public static SimplifiedIntervalList collectBucketedIntervalsIntersectingIntervalList(
        SimplifiedIntervalList supplyIntervals,
        SimplifiedIntervalList bucketedIntervals,
        Granularity granularity
) {
    // Stream the from intervals, split by grain
    Iterable<Interval> bucketedIterable = granularity.intervalsIterable(bucketedIntervals);

    // Predicate to find buckets which overlap
    Predicate<Interval> isIntersecting =
            new SimplifiedIntervalList.SkippingIntervalPredicate(
                    supplyIntervals,
                    AbstractInterval::overlaps,
                    false
            );

    return StreamSupport.stream(bucketedIterable.spliterator(), false)
            .filter(isIntersecting)
            .collect(SimplifiedIntervalList.getCollector());
}
项目:oma-riista-web    文件:HarvestRepositoryImpl.java   
@Override
@Transactional(readOnly = true)
public List<Harvest> findHarvestsLinkedToHuntingDayAndPermitOfRhy(final Riistanhoitoyhdistys rhy,
                                                                  final GameSpecies species,
                                                                  final Interval interval) {

    final QHarvest harvest = QHarvest.harvest;
    final QGroupHuntingDay huntingDay = QGroupHuntingDay.groupHuntingDay;
    final QHuntingClubGroup group = QHuntingClubGroup.huntingClubGroup;
    final QHarvestPermit permit = QHarvestPermit.harvestPermit;

    return new JPAQuery<>(entityManager)
            .from(harvest)
            .join(harvest.huntingDayOfGroup, huntingDay)
            .join(huntingDay.group, group)
            .join(group.harvestPermit, permit)
            .select(harvest)
            .where(permit.rhy.eq(rhy)
                    .and(harvest.species.eq(species))
                    .and(harvest.pointOfTime.between(
                            new Timestamp(interval.getStart().getMillis()),
                            new Timestamp(interval.getEnd().getMillis()))))
            .fetch();
}
项目:OpenChatAlytics    文件:MessageSummaryDAOImpl.java   
@Override
public Map<String, Double> getActiveUsersByMethod(Interval interval,
                                                  ActiveMethod method,
                                                  int resultSize,
                                                  boolean withBots) {
    if (method == ActiveMethod.ToTV) {
        return occurrenceStatsDAO.getActiveColumnsByToTV("username", interval, resultSize,
                                                         withBots);
    } else if (method == ActiveMethod.ToMV) {
        return occurrenceStatsDAO.getActiveColumnsByToMV("username", interval, resultSize,
                                                         withBots);
    } else {
        throw new UnsupportedOperationException(String.format("Method %s not supported",
                                                              method));
    }
}
项目:oma-riista-web    文件:ObservationRepositoryImpl.java   
@Transactional(readOnly = true)
@Override
public List<Observation> findGroupObservations(
        final HuntingClubGroup huntingClubGroup, final Interval interval) {

    final SQObservation observation = new SQObservation("game_observation");
    final QObservation observationEntity = new QObservation("game_observation");

    final SubQueryExpression<Long> subQuery1 = gameObservationForGroupMemberInsideGroupHuntingArea(huntingClubGroup, interval);
    final SubQueryExpression<Long> subQuery2 = gameObservationLinkedToGroupHuntingDay(huntingClubGroup);
    final SubQueryExpression<Long> subQuery3 = gameObservationRejected(huntingClubGroup);

    return new JPASQLQuery<Observation>(entityManager, sqlTemplates)
            .select(observationEntity).from(observation)
            .where(observation.gameObservationId.in(union(asList(subQuery1, subQuery2, subQuery3))))
            .orderBy(observation.pointOfTime.desc(), observation.observerId.desc())
            .fetch();
}
项目:ipst    文件:OfflineWorkflowCreationParameters.java   
public static OfflineWorkflowCreationParameters load() {
    ModuleConfig config = PlatformConfig.defaultConfig().getModuleConfig("offline-default-creation-parameters");
    Set<Country> countries = config.getEnumSetProperty("countries", Country.class);
    DateTime baseCaseDate = config.getDateTimeProperty("baseCaseDate");
    Interval histoInterval = config.getIntervalProperty("histoInterval");
    boolean generationSampled = config.getBooleanProperty("generationSampled", false);
    boolean boundariesSampled = config.getBooleanProperty("boundariesSampled", false);
    boolean initTopo = config.getBooleanProperty("initTopo", DEFAULT_INIT_TOPO);
    double correlationThreshold = config.getDoubleProperty("correlationThreshold", DEFAULT_CORRELATION_THRESHOLD);
    double probabilityThreshold = config.getDoubleProperty("probabilityThreshold", DEFAULT_PROBABILITY_THRESHOLD);
    boolean loadFlowTransformerVoltageControlOn = config.getBooleanProperty("loadFlowTransformerVoltageControlOn", DEFAULT_LOAD_FLOW_TRANSFORMER_VOLTAGE_CONTROL_ON);
    boolean simplifiedWorkflow = config.getBooleanProperty("simplifiedWorkflow", DEFAULT_SIMPLIFIED_WORKFLOW);
    boolean mergeOptimized = config.getBooleanProperty("mergeOptimized", DEFAULT_MERGE_OPTIMIZED);
    Set<Country> attributesCountryFilter = config.getEnumSetProperty("attributesCountryFilter", Country.class, DEFAULT_ATTRIBUTES_COUNTRY_FILTER);
    int attributesMinBaseVoltageFilter = config.getIntProperty("attributesMinBaseVoltageFilter", DEFAULT_ATTRIBUTES_MIN_BASE_VOLTAGE_FILTER);
    return new OfflineWorkflowCreationParameters(countries, baseCaseDate, histoInterval, generationSampled, boundariesSampled,
                                                 initTopo, correlationThreshold, probabilityThreshold, loadFlowTransformerVoltageControlOn,
                                                 simplifiedWorkflow, mergeOptimized, attributesCountryFilter, attributesMinBaseVoltageFilter);
}
项目:FixedIt    文件:Schedule.java   
/**
 * checks strictly for time conflicts; DOES NOT CHECK FOR DAY CONFLICTS
 * @param course the course for which to check for conflicts
 * @return boolean
 */
public boolean timeConflicts(Course course, Course c){
    String pattern="hh:mmaa";
    DateTime courseStart=DateTime.parse(course.getTime().substring(0, course.getTime().indexOf('-')), DateTimeFormat.forPattern(pattern));
    DateTime courseEnd=DateTime.parse(course.getTime().substring(course.getTime().indexOf('-')+1), DateTimeFormat.forPattern(pattern));
    Interval courseInterval=new Interval(courseStart, courseEnd);

    DateTime cStart=DateTime.parse(c.getTime().substring(0, c.getTime().indexOf('-')), DateTimeFormat.forPattern(pattern));
    DateTime cEnd=DateTime.parse(c.getTime().substring(c.getTime().indexOf('-')+1), DateTimeFormat.forPattern(pattern));        
    Interval cInterval=new Interval(cStart, cEnd);

    if(courseInterval.overlaps(cInterval)){
        return true;
    }
    return false;
}
项目:OpenChatAlytics    文件:EmojiDAOImplTest.java   
/**
 * Makes sure that the correct amount of all emoji mentions are returned
 */
@Test
public void testGetAllMentions() {
    Interval timeInterval = new Interval(mentionDate, mentionDate.plusHours(3));
    List<EmojiEntity> result = underTest.getAllMentions(timeInterval,
                                                        ImmutableList.of(),
                                                        ImmutableList.of(),
                                                        true);
    assertEquals(4, result.size());

    result = underTest.getAllMentions(timeInterval,
                                      ImmutableList.of("room1"),
                                      ImmutableList.of(),
                                      true);
    assertEquals(3, result.size());

    result = underTest.getAllMentions(timeInterval,
                                      ImmutableList.of("room1"),
                                      ImmutableList.of("giannis"),
                                      true);
    assertEquals(2, result.size());
}
项目:fili    文件:DruidNavigator.java   
/**
 * Find a valid timegrain from druid query to the {@link TableConfig}.
 *
 * {
 *      ...,
 *      "interval": "2015-09-12T00:00:00.000Z/2015-09-13T00:00:00.000Z",
 *      ...
 * }
 *
 * @param tableConfig The TableConfig to be loaded.
 * @param segmentJson The JsonNode containing a time interval.
 */
private void loadTimeGrains(TableConfig tableConfig, JsonNode segmentJson) {
    JsonNode timeInterval = segmentJson.get("interval");
    String[] utcTimes = timeInterval.asText().split("/");
    Optional<TimeGrain> timeGrain = Optional.empty();
    try {
        if (utcTimes.length == 2) {
            DateTime start = new DateTime(utcTimes[0], DateTimeZone.UTC);
            DateTime end = new DateTime(utcTimes[1], DateTimeZone.UTC);
            Interval interval = new Interval(start.toInstant(), end.toInstant());
            timeGrain = IntervalUtils.getTimeGrain(interval);
        }
    } catch (IllegalArgumentException ignored) {
        LOG.warn("Unable to parse time intervals {} correctly", Arrays.toString(utcTimes));
    }

    if (!timeGrain.isPresent()) {
        LOG.warn("Couldn't detect timegrain for {}, defaulting to DAY TimeGrain.", timeInterval.asText());
    }
    tableConfig.setTimeGrain(timeGrain.orElse(DefaultTimeGrain.DAY));
}
项目:oma-riista-web    文件:PublicHarvestPivotTableFeature.java   
private List<PivotTableRow> executeCountQuery(
        final Interval interval, final Optional<GameSpecies> gameSpeciesOpt, final Optional<Organisation> rkaOpt) {

    final String queryStr = nativeQueryForHarvestCounts(gameSpeciesOpt.isPresent(), rkaOpt.isPresent());

    final MapSqlParameterSource queryParams = new MapSqlParameterSource();
    queryParams.addValue("beginTime", interval.getStart().toDate(), Types.TIMESTAMP);
    queryParams.addValue("endTime", interval.getEnd().toDate(), Types.TIMESTAMP);

    if (gameSpeciesOpt.isPresent()) {
        queryParams.addValue("gameSpeciesId", gameSpeciesOpt.get().getId());
    }
    if (rkaOpt.isPresent()) {
        queryParams.addValue("rkaId", rkaOpt.get().getId());
    }

    return jdbcTemplate.query(queryStr, queryParams, (resultSet, i) -> new PivotTableRow(resultSet));
}
项目:nomulus    文件:DomainCreateFlowTest.java   
@Test
public void testSuccess_lrp() throws Exception {
  persistResource(
      Registry.get("tld")
          .asBuilder()
          .setLrpPeriod(new Interval(clock.nowUtc().minusDays(1), clock.nowUtc().plusDays(1)))
          .build());
  LrpTokenEntity token =
      persistResource(
          new LrpTokenEntity.Builder()
              .setToken("lrptokentest")
              .setAssignee("example.tld")
              .setValidTlds(ImmutableSet.of("tld"))
              .build());
  setEppInput("domain_create_lrp.xml");
  persistContactsAndHosts();
  runFlowAssertResponse(loadFile("domain_create_response.xml"));
  assertSuccessfulCreate("tld", false);
  assertNoLordn();
  assertThat(ofy().load().entity(token).now().getRedemptionHistoryEntry()).isNotNull();
}
项目:jDruid    文件:TestHelper.java   
public static Query getGroupByQuery() {
    List<DimFilter> filters = new ArrayList<>();
    filters.add(DimFilters.dimEquals("report", "URLTransaction"));
    filters.add(DimFilters.dimEquals("pool", "r1cart"));
    filters.add(DimFilters.dimEquals("metric", "Duration"));
    return GroupByQuery.builder()
            .setDataSource("test")
            .setQuerySegmentSpec(QuerySegmentSpecs.create(new Interval(0, new DateTime().getMillis())))
            .setGranularity(QueryGranularity.NONE)
            .addDimension("URL")
            .addAggregator(new LongSumAggregatorFactory("agg_count", "agg_count"))
            .addAggregator(new DoubleMaxAggregatorFactory("agg_max", "agg_max"))
            .addAggregator(new DoubleMinAggregatorFactory("agg_min", "agg_min"))
            .addAggregator(new DoubleSumAggregatorFactory("agg_sum", "agg_sum"))
            .setDimFilter(DimFilters.and(filters))
            .build();
}
项目:ipst    文件:ForecastErrorsAnalysisParameters.java   
public ForecastErrorsAnalysisParameters(DateTime baseCaseDate, Interval histoInterval, String feAnalysisId, double ir, Integer flagPQ,
                                        Integer method, Integer nClusters, double percentileHistorical, Integer modalityGaussian, Integer outliers,
                                        Integer conditionalSampling, Integer nSamples, Set<Country> countries, CaseType caseType) {
    this.baseCaseDate = baseCaseDate;
    this.histoInterval = histoInterval;
    this.feAnalysisId = feAnalysisId;
    this.ir = ir;
    this.flagPQ = flagPQ;
    this.method = method;
    this.nClusters = nClusters;
    this.percentileHistorical = percentileHistorical;
    this.modalityGaussian = modalityGaussian;
    this.outliers = outliers;
    this.conditionalSampling = conditionalSampling;
    this.nSamples = nSamples;
    this.countries = countries;
    this.caseType = caseType;
}
项目:oma-riista-web    文件:HarvestRepositoryImpl.java   
/**
 * Filter criteria includes:
 * 1) Person must have occupation in ClubGroup
 * 2) Person must have occupation in Club (to ignore invitations)
 * 2) Harvest location must intersect with defined area for ClubGroup
 * OR harvest must be linked to GroupHuntingDay
 * 3) OR Harvest is rejected by the group
 */
@Override
@Transactional(readOnly = true)
public List<Harvest> findGroupHarvest(final HuntingClubGroup huntingClubGroup, final Interval interval) {

    final SQHarvest harvest = new SQHarvest("harvest");
    final QHarvest harvestEntity = new QHarvest("harvest");
    final SQGroupHarvestRejection rejection = groupHarvestRejection;

    final SubQueryExpression<Long> subQuery1 =
            harvestForGroupMemberInsideGroupHuntingArea(huntingClubGroup.getId(), interval);

    final SubQueryExpression<Long> subQuery2 =
            harvestLinkedToGroupHuntingDay(huntingClubGroup.getId());

    final BooleanExpression rejected = SQLExpressions.selectOne().from(rejection)
            .where(rejection.huntingClubGroupId.eq(huntingClubGroup.getId())
                    .and(rejection.harvestId.eq(harvest.harvestId)))
            .exists();

    return new JPASQLQuery<Harvest>(entityManager, sqlTemplates)
            .from(harvest).select(harvestEntity)
            .where(harvest.harvestId.in(union(asList(subQuery1, subQuery2))).or(rejected))
            .orderBy(harvest.pointOfTime.desc(), harvest.harvestId.desc())
            .fetch();
}
项目:sabbath-school-android    文件:SSLessonsViewModel.java   
public void onReadClick(){
    if (ssQuarterlyInfo != null && ssQuarterlyInfo.lessons.size() > 0) {
        DateTime today = DateTime.now();
        String ssLessonIndex = ssQuarterlyInfo.lessons.get(0).index;

        for (SSLesson ssLesson : ssQuarterlyInfo.lessons){
            DateTime startDate = DateTimeFormat.forPattern(SSConstants.SS_DATE_FORMAT)
                    .parseLocalDate(ssLesson.start_date).toDateTimeAtStartOfDay();

            DateTime endDate = DateTimeFormat.forPattern(SSConstants.SS_DATE_FORMAT)
                    .parseLocalDate(ssLesson.end_date).plusDays(1).toDateTimeAtStartOfDay().plusHours(12);

            if (new Interval(startDate, endDate).contains(today)){
                ssLessonIndex = ssLesson.index;
                break;
            }
        }

        Intent ssReadingIntent = new Intent(context, SSReadingActivity.class);
        ssReadingIntent.putExtra(SSConstants.SS_LESSON_INDEX_EXTRA, ssLessonIndex);
        context.startActivity(ssReadingIntent);
    }
}
项目:nordvisa_calendar    文件:TokenTest.java   
@Test
public void defaultValues() {
    assertNull(sut.getId());
    assertEquals("token", sut.getToken());
    assertEquals(0, sut.getRequests());
    assertEquals(10000, sut.getMaxRequests());
    assertTrue(new Interval(
            DateTime.now().minusSeconds(5), DateTime.now().plusSeconds(5)).contains(sut.getCreatedAt()
    ));
    assertTrue(DateTime.now().plusYears(1).isAfter(sut.getValidUntil()));
    assertTrue(DateTime.now().plusMonths(11).isBefore(sut.getValidUntil()));
}
项目:xsharing-services-router    文件:DateTimeUtils.java   
public static boolean contains(List<Interval> intervals, DateTime query) {
    try {
        for (Interval in : intervals) {
            if (in.contains(query)) {
                return true;
            }
        }
        return false;
    } catch (Exception e) {
        log.warn("Failed to check whether {} is contained within {}", query, intervals);
        return false;
    }
}
项目:xsharing-services-router    文件:DateTimeUtils.java   
public static boolean contains(List<Interval> intervals, Interval query) {
    try {
        for (Interval in : intervals) {
            if (in.overlaps(query)) {
                return true;
            }
        }
        return false;
    } catch (Exception e) {
        log.warn("Failed to check whether {} overlaps with {}", query, intervals);
        return false;
    }
}
项目:xsharing-services-router    文件:MBDataServiceImpl.java   
private List<VehicleStatus> getInavail(Map<String, Map<String, List<MBPlaceInavailability>>> map,
                                       MBPlaceEntity s) {

    // Get all booking target inavailabilities at a station
    Map<String, List<MBPlaceInavailability>> forAPlace =
            map.getOrDefault(s.getProviderId(), Collections.emptyMap())
               .getOrDefault(s.getPlaceId(), Collections.emptyList())
               .stream()
               .collect(Collectors.groupingBy(MBPlaceInavailability::getBookingTargetId));

    List<VehicleStatus> vehicleStatusList = new ArrayList<>(forAPlace.size());
    for (Map.Entry<String, List<MBPlaceInavailability>> entry : forAPlace.entrySet()) {

        String bookingTargetId = entry.getKey();
        List<MBPlaceInavailability> values = entry.getValue();

        List<Interval> intervalList = new ArrayList<>(values.size());
        for (MBPlaceInavailability item : values) {
            Interval interval = item.getInavailability();
            if (interval != null) {
                intervalList.add(interval);
            }
        }

        vehicleStatusList.add(new VehicleStatus(bookingTargetId, intervalList));
    }

    return vehicleStatusList;
}
项目:xsharing-services-router    文件:ConverterUtil.java   
@Nullable
public static Interval getInterval(@Nullable String from,
                                   @Nullable String to) {
    if (isNullOrEmpty(from) || isNullOrEmpty(to)) {
        return null;
    }
    DateTime fromLdt = FORMATTER.parseDateTime(from);
    DateTime toLdt = FORMATTER.parseDateTime(to);
    return new Interval(fromLdt, toLdt);
}
项目:xsharing-services-router    文件:DefaultCarInavailabilityStrategy.java   
@Override
public boolean overlaps(int stayTime, RouteLegList legs,
                        SharingStation bsStart, RouteLegWrapper carWrapper) {
    // We always set stay time. Depending on DurationCheckStrategy it will be used or not.
    carWrapper.setStayTime(stayTime);

    int duration = durationCheckStrategy.getDurationToCheck(carWrapper);
    Interval interval = legs.getIntervalAfterPossibleLeg(duration);

    return overlaps(bsStart, interval);
}
项目:xsharing-services-router    文件:DefaultBikeInavailabilityStrategy.java   
@Override
public boolean overlaps(int stayTime, RouteLegList legs,
                        SharingStation startStation, RouteLegWrapper bikeWrapper) {

    // We always set stay time. Depending on DurationCheckStrategy it will be used or not.
    bikeWrapper.setStayTime(stayTime);

    // -------------------------------------------------------------------------
    // 1) If in future, be optimistic and assume always available
    // -------------------------------------------------------------------------

    Interval nowTimeWindow = DateTimeUtils.getNowTimeWindow();

    DateTime timeAtStartStation = legs.getAfterLastLeg();
    boolean startIsNow = nowTimeWindow.contains(timeAtStartStation);

    if (!startIsNow) {
        return false;
    }

    // -------------------------------------------------------------------------
    // 2) Check actual intervals for availability
    // -------------------------------------------------------------------------

    int duration = durationCheckStrategy.getDurationToCheck(bikeWrapper);
    Interval interval = legs.getIntervalAfterPossibleLeg(duration);

    return overlaps(startStation, interval);
}
项目:exam    文件:ExamRoom.java   
@Transient
private List<OpeningHours> getDefaultWorkingHours(LocalDate date) {
    String day = date.dayOfWeek().getAsText(Locale.ENGLISH);
    List<OpeningHours> hours = new ArrayList<>();
    defaultWorkingHours.stream().filter(dwh -> dwh.getWeekday().equalsIgnoreCase(day)).collect(Collectors.toList()).forEach(dwh -> {
        DateTime midnight = date.toDateTimeAtStartOfDay();
        DateTime start = midnight.withMillisOfDay(DateTimeUtils
                .resolveStartWorkingHourMillis(new DateTime(dwh.getStartTime()), dwh.getTimezoneOffset()));
        DateTime end = midnight.withMillisOfDay(DateTimeUtils
                .resolveEndWorkingHourMillis(new DateTime(dwh.getEndTime()), dwh.getTimezoneOffset()));
        Interval interval = new Interval(start, end);
        hours.add(new OpeningHours(interval, dwh.getTimezoneOffset()));
    });
    return hours;
}
项目:exam    文件:ExamRoom.java   
@Transient
public List<OpeningHours> getWorkingHoursForDate(LocalDate date) {
    List<OpeningHours> workingHours = getDefaultWorkingHours(date);
    List<Interval> extensionEvents = DateTimeUtils.mergeSlots(
            DateTimeUtils.getExceptionEvents(calendarExceptionEvents, date, DateTimeUtils.RestrictionType.NON_RESTRICTIVE));
    List<Interval> restrictionEvents = DateTimeUtils.mergeSlots(
            DateTimeUtils.getExceptionEvents(calendarExceptionEvents, date, DateTimeUtils.RestrictionType.RESTRICTIVE));
    List<OpeningHours> availableHours = new ArrayList<>();
    if (!extensionEvents.isEmpty()) {
        List<Interval> unifiedIntervals = new ArrayList<>();
        for (OpeningHours oh : workingHours) {
            unifiedIntervals.add(oh.getHours());
        }
        unifiedIntervals.addAll(extensionEvents);
        unifiedIntervals = DateTimeUtils.mergeSlots(unifiedIntervals);
        int tzOffset;
        if (workingHours.isEmpty()) {
            tzOffset = DateTimeZone.forID(localTimezone).getOffset(new DateTime(date));
        } else {
            tzOffset = workingHours.get(0).timezoneOffset;
        }
        workingHours.clear();
        workingHours.addAll(unifiedIntervals.stream().map(
                interval -> new OpeningHours(interval, tzOffset)).collect(Collectors.toList()));
    }
    if (!restrictionEvents.isEmpty()) {
        for (OpeningHours hours : workingHours) {
            Interval slot = hours.getHours();
            for (Interval gap : DateTimeUtils.findGaps(restrictionEvents, slot)) {
                availableHours.add(new OpeningHours(gap, hours.getTimezoneOffset()));
            }
        }
    } else {
        availableHours = workingHours;
    }
    return availableHours;
}
项目:exam    文件:CalendarController.java   
protected Optional<ExamMachine> getRandomMachine(ExamRoom room, Exam exam, DateTime start, DateTime end, Collection<Integer> aids) {
    List<ExamMachine> machines = getEligibleMachines(room, aids, exam);
    Collections.shuffle(machines);
    Interval wantedTime = new Interval(start, end);
    for (ExamMachine machine : machines) {
        if (!machine.isReservedDuring(wantedTime)) {
            return Optional.of(machine);
        }
    }
    return Optional.empty();
}
项目:exam    文件:CalendarController.java   
/**
 * @return all intervals that fall within provided working hours
 */
private static Iterable<Interval> allSlots(Iterable<ExamRoom.OpeningHours> openingHours, ExamRoom room, LocalDate date) {
    Collection<Interval> intervals = new ArrayList<>();
    List<ExamStartingHour> startingHours = room.getExamStartingHours();
    if (startingHours.isEmpty()) {
        // Default to 1 hour slots that start at the hour
        startingHours = createDefaultStartingHours(room.getLocalTimezone());
    }
    Collections.sort(startingHours);
    DateTime now = DateTime.now().plusMillis(DateTimeZone.forID(room.getLocalTimezone()).getOffset(DateTime.now()));
    for (ExamRoom.OpeningHours oh : openingHours) {
        int tzOffset = oh.getTimezoneOffset();
        DateTime instant = now.getDayOfYear() == date.getDayOfYear() ? now : oh.getHours().getStart();
        DateTime slotEnd = oh.getHours().getEnd();
        DateTime beginning = nextStartingTime(instant, startingHours, tzOffset);
        while (beginning != null) {
            DateTime nextBeginning = nextStartingTime(beginning.plusMillis(1), startingHours, tzOffset);
            if (beginning.isBefore(oh.getHours().getStart())) {
                beginning = nextBeginning;
                continue;
            }
            if (nextBeginning != null && !nextBeginning.isAfter(slotEnd)) {
                intervals.add(new Interval(beginning.minusMillis(tzOffset), nextBeginning.minusMillis(tzOffset)));
                beginning = nextBeginning;
            } else if (beginning.isBefore(slotEnd)) {
                // We have some spare time in the end, take it as well
                intervals.add(new Interval(beginning.minusMillis(tzOffset), slotEnd.minusMillis(tzOffset)));
                break;
            } else {
                break;
            }
        }
    }
    return intervals;
}
项目:exam    文件:CalendarController.java   
public TimeSlot(Interval interval, int machineCount, String exam) {
    start = ISODateTimeFormat.dateTime().print(interval.getStart());
    end = ISODateTimeFormat.dateTime().print(interval.getEnd());
    availableMachines = machineCount;
    ownReservation = machineCount < 0;
    conflictingExam = exam;
}
项目:exam    文件:ExternalCalendarController.java   
private Set<TimeSlot> postProcessSlots(JsonNode node, String date, Exam exam, User user) {
    // Filter out slots that user has a conflicting reservation with
    if (node.isArray()) {
        ArrayNode root = (ArrayNode) node;
        LocalDate searchDate = LocalDate.parse(date, ISODateTimeFormat.dateParser());
        // users reservations starting from now
        List<Reservation> reservations = Ebean.find(Reservation.class)
                .fetch("enrolment.exam")
                .where()
                .eq("user", user)
                .gt("startAt", searchDate.toDate())
                .findList();
        DateTimeFormatter dtf = ISODateTimeFormat.dateTimeParser();
        Stream<JsonNode> stream = StreamSupport.stream(root.spliterator(), false);
        Map<Interval, Optional<Integer>> map = stream.collect(Collectors.toMap(n -> {
                    DateTime start = dtf.parseDateTime(n.get("start").asText());
                    DateTime end = dtf.parseDateTime(n.get("end").asText());
                    return new Interval(start, end);
                }, n -> Optional.of(n.get("availableMachines").asInt()),
                (u, v) -> {
                    throw new IllegalStateException(String.format("Duplicate key %s", u));
                },
                LinkedHashMap::new));
        return handleReservations(map, reservations, exam, null, user);
    }
    return Collections.emptySet();
}
项目:exam    文件:DateTimeUtils.java   
public static List<Interval> findGaps(List<Interval> reserved, Interval searchInterval) {
    List<Interval> gaps = new ArrayList<>();
    DateTime searchStart = searchInterval.getStart();
    DateTime searchEnd = searchInterval.getEnd();
    if (hasNoOverlap(reserved, searchStart, searchEnd)) {
        gaps.add(searchInterval);
        return gaps;
    }
    // create a sub-list that excludes interval which does not overlap with
    // searchInterval
    List<Interval> subReservedList = removeNonOverlappingIntervals(reserved, searchInterval);
    DateTime subEarliestStart = subReservedList.get(0).getStart();
    DateTime subLatestEnd = subReservedList.get(subReservedList.size() - 1).getEnd();

    // in case the searchInterval is wider than the union of the existing
    // include searchInterval.start => earliestExisting.start
    if (searchStart.isBefore(subEarliestStart)) {
        gaps.add(new Interval(searchStart, subEarliestStart));
    }

    // get all the gaps in the existing list
    gaps.addAll(getExistingIntervalGaps(subReservedList));

    // include latestExisting.end => searchInterval.end
    if (searchEnd.isAfter(subLatestEnd)) {
        gaps.add(new Interval(subLatestEnd, searchEnd));
    }
    return gaps;

}