public static OrgRepeater parse(String str) { OrgRepeater repeater = new OrgRepeater(); Matcher m = OrgPatterns.REPEATER.matcher(str); if (m.find()) { if (m.groupCount() == 7) { repeater.setTypeFromString(m.group(2)); repeater.setValue(m.group(3)); repeater.setUnit(m.group(4)); if (! OrgStringUtils.isEmpty(m.group(6))) { repeater.habitDeadline = new OrgInterval(); repeater.habitDeadline.setValue(m.group(6)); repeater.habitDeadline.setUnit(m.group(7)); } } else { throw new IllegalArgumentException("Expected 7 groups (got " + m.groupCount() + ") when matching repeater " + str + " against " + OrgPatterns.REPEATER); } } else { throw new IllegalArgumentException("Failed matching repeater " + str + " against " + OrgPatterns.REPEATER); } return repeater; }
@Test public void testRepeaterWithHabitDeadline() { OrgDateTime time = OrgDateTime.parse("<2009-10-17 Sat 13:15 .+2d/4d>"); Assert.assertTrue(time.isActive()); Assert.assertTrue(time.hasTime()); Assert.assertEquals(13, time.getCalendar().get(Calendar.HOUR_OF_DAY)); Assert.assertTrue(time.hasRepeater()); Assert.assertEquals(2, time.getRepeater().getValue()); Assert.assertEquals(OrgRepeater.Type.RESTART, time.getRepeater().getType()); Assert.assertEquals(OrgRepeater.Unit.DAY, time.getRepeater().getUnit()); Assert.assertTrue(time.getRepeater().hasHabitDeadline()); Assert.assertEquals(OrgRepeater.Unit.DAY, time.getRepeater().getHabitDeadline().getUnit()); Assert.assertEquals(4, time.getRepeater().getHabitDeadline().getValue()); }
public String toString() { StringBuilder s = new StringBuilder(); switch (type) { case CUMULATE: s.append("+"); break; case CATCH_UP: s.append("++"); break; case RESTART: s.append(".+"); break; } /* Interval. */ s.append(super.toString()); if (habitDeadline != null) { s.append("/").append(habitDeadline); } return s.toString(); } }