@Override public ConstraintProgramScheduleBuilder withTimeWindow(String startTime, String endTime, TimeZone timeZone) { constraints.add(new TimeRangeConstraint(startTime, endTime, timeZone)); return this; }
@Override public void validate() { initialize(); }
@Test public void testForwardRange() { // 3:24PM PST long now = 1494368640000L; SimpleJob job = new SimpleJob(SCHEDULE, now, Collections.<Notification>emptyList(), Job.State.PENDING_TRIGGER, 0L); // use a TimeRangeConstraint [4:00PM, 5:00PM) TimeRangeConstraint timeRangeConstraint = new TimeRangeConstraint("16:00", "17:00", TimeZone.getTimeZone("PST")); ConstraintContext constraintContext = createConstraintContext(job, now); ConstraintResult result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); // 36 minutes till 4PM Assert.assertEquals(constraintContext.getCheckTimeMillis() + TimeUnit.MINUTES.toMillis(36), (long) result.getNextCheckTime()); constraintContext = createConstraintContext(job, result.getNextCheckTime() - 1); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); Assert.assertEquals(constraintContext.getCheckTimeMillis() + 1L, (long) result.getNextCheckTime()); result = timeRangeConstraint.check(SCHEDULE, createConstraintContext(job, now + TimeUnit.MINUTES.toMillis(36))); Assert.assertEquals(ConstraintResult.SATISFIED, result); // 5:00PM PST long fivePM = 1494374400000L; constraintContext = createConstraintContext(job, fivePM); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); // 23 hours until the next time its 4PM again Assert.assertEquals(constraintContext.getCheckTimeMillis() + TimeUnit.HOURS.toMillis(23), (long) result.getNextCheckTime()); }
@Test public void testInit() { TimeRangeConstraint timeRangeConstraint = new TimeRangeConstraint("16:00", "17:00", TimeZone.getTimeZone("PST")); Assert.assertEquals("PST", timeRangeConstraint.getTimeZone()); // simple construction should work new TimeRangeConstraint("03:16", "03:17", TimeZone.getDefault()); // leading zero shouldn't be necessary new TimeRangeConstraint("03:16", "3:17", TimeZone.getDefault()); // start time can be a smaller numerical value than the end time new TimeRangeConstraint("22:30", "10:00", TimeZone.getDefault()); // start time must not equal end time try { new TimeRangeConstraint("03:17", "03:17", TimeZone.getDefault()); Assert.fail(); } catch (IllegalArgumentException e) { // expected } }
private void initialize() { if (calendar == null) { ValidationResult vr = doValidate(); Calendar calendar = vr.getCalendar(); calendar.setTime(vr.getStartDate()); startHour = calendar.get(Calendar.HOUR_OF_DAY); startMinute = calendar.get(Calendar.MINUTE); calendar.setTime(vr.getEndDate()); endHour = calendar.get(Calendar.HOUR_OF_DAY); endMinute = calendar.get(Calendar.MINUTE); isStartTimeSmaller = vr.getStartDate().compareTo(vr.getEndDate()) < 0; this.calendar = calendar; // do this last, it should only be set if validation was successful } }
TimeRangeConstraint timeRangeConstraint = new TimeRangeConstraint("22:00", "06:00", TimeZone.getTimeZone("PST")); ConstraintContext constraintContext = createConstraintContext(job, now); ConstraintResult result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); Assert.assertEquals(constraintContext.getCheckTimeMillis() + 1L, (long) result.getNextCheckTime()); result = timeRangeConstraint.check(SCHEDULE, createConstraintContext(job, now + sixHoursAnd36Minutes)); Assert.assertEquals(ConstraintResult.SATISFIED, result); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.SATISFIED, result.getSatisfiedState()); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); result = timeRangeConstraint.check(SCHEDULE, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState());
private void initialize() { if (calendar == null) { ValidationResult vr = doValidate(); Calendar calendar = vr.getCalendar(); calendar.setTime(vr.getStartDate()); startHour = calendar.get(Calendar.HOUR_OF_DAY); startMinute = calendar.get(Calendar.MINUTE); calendar.setTime(vr.getEndDate()); endHour = calendar.get(Calendar.HOUR_OF_DAY); endMinute = calendar.get(Calendar.MINUTE); isStartTimeSmaller = vr.getStartDate().compareTo(vr.getEndDate()) < 0; this.calendar = calendar; // do this last, it should only be set if validation was successful } }
@Override public ConstraintProgramScheduleBuilder withTimeWindow(String startTime, String endTime, TimeZone timeZone) { constraints.add(new TimeRangeConstraint(startTime, endTime, timeZone)); return this; }
@Override public void validate() { initialize(); }
@Override public ConstraintProgramScheduleBuilder withTimeWindow(String startTime, String endTime) { constraints.add(new TimeRangeConstraint(startTime, endTime, TimeZone.getDefault())); return this; }
@Override public ConstraintResult check(ProgramSchedule schedule, ConstraintContext context) { initialize(); calendar.setTimeInMillis(context.getCheckTimeMillis()); int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
@Override public ConstraintProgramScheduleBuilder withTimeWindow(String startTime, String endTime) { constraints.add(new TimeRangeConstraint(startTime, endTime, TimeZone.getDefault())); return this; }
@Override public ConstraintResult check(ProgramSchedule schedule, ConstraintContext context) { initialize(); calendar.setTimeInMillis(context.getCheckTimeMillis()); int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
@Test public void testConstraintCodec() { testSerDeser(new ProtoConstraint.ConcurrencyConstraint(3), new ConcurrencyConstraint(3)); testSerDeser(new ProtoConstraint.DelayConstraint(300000L, TimeUnit.MILLISECONDS), new DelayConstraint(300000L, TimeUnit.MILLISECONDS)); testSerDeser(new ProtoConstraint.LastRunConstraint(3600000L, TimeUnit.MILLISECONDS), new LastRunConstraint(3600000L, TimeUnit.MILLISECONDS)); testSerDeser(new ProtoConstraint.TimeRangeConstraint("02:00", "06:00", TimeZone.getDefault()), new TimeRangeConstraint("02:00", "06:00", TimeZone.getDefault())); }