public WeekFieldsViewSkin(final WeekFieldsView view) { super(view); dayOfWeekComboBox = new ComboBox<>(); dayOfWeekComboBox.getItems().addAll(DayOfWeek.values()); dayOfWeekComboBox.setValue(view.getFirstDayOfWeek()); minimalDaysInFirstWeekComboBox = new ComboBox<>(); minimalDaysInFirstWeekComboBox.getItems().addAll(1, 2, 3, 4, 5, 6, 7); minimalDaysInFirstWeekComboBox.setValue(view.getMinimalDaysInFirstWeek()); GridPane pane = new GridPane(); pane.getStyleClass().add("content"); pane.add(new Label("First day:"), 0, 0); pane.add(new Label("Minimum days:"), 0, 1); pane.add(dayOfWeekComboBox, 1, 0); pane.add(minimalDaysInFirstWeekComboBox, 1, 1); getChildren().add(pane); // listeners InvalidationListener updateListener = it -> updateValues(); dayOfWeekComboBox.valueProperty().addListener(updateListener); minimalDaysInFirstWeekComboBox.valueProperty().addListener(updateListener); view.weekFieldsProperty().addListener(it -> { WeekFields fields = view.getWeekFields(); dayOfWeekComboBox.setValue(fields.getFirstDayOfWeek()); minimalDaysInFirstWeekComboBox.setValue(fields.getMinimalDaysInFirstWeek()); }); }
@Test(dataProvider="weekFields") public void test_basics(DayOfWeek firstDayOfWeek, int minDays) { WeekFields week = WeekFields.of(firstDayOfWeek, minDays); assertEquals(week.dayOfWeek().isDateBased(), true); assertEquals(week.dayOfWeek().isTimeBased(), false); assertEquals(week.weekOfMonth().isDateBased(), true); assertEquals(week.weekOfMonth().isTimeBased(), false); assertEquals(week.weekOfYear().isDateBased(), true); assertEquals(week.weekOfYear().isTimeBased(), false); assertEquals(week.weekOfWeekBasedYear().isDateBased(), true); assertEquals(week.weekOfWeekBasedYear().isTimeBased(), false); assertEquals(week.weekBasedYear().isDateBased(), true); assertEquals(week.weekBasedYear().isTimeBased(), false); }
@Test(dataProvider="weekFields") public void test_withDayOfWeek(DayOfWeek firstDayOfWeek, int minDays) { LocalDate day = LocalDate.of(2012, 12, 15); // Safely in the middle of a month WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField womField = week.weekOfMonth(); TemporalField woyField = week.weekOfYear(); int wom = day.get(womField); int woy = day.get(woyField); for (int dow = 1; dow <= 7; dow++) { LocalDate result = day.with(dowField, dow); assertEquals(result.get(dowField), dow, String.format("Incorrect new Day of week: %s", result)); assertEquals(result.get(womField), wom, "Week of Month should not change"); assertEquals(result.get(woyField), woy, "Week of Year should not change"); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWom(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField womField = week.weekOfMonth(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(MONTH_OF_YEAR).appendLiteral(':') .appendValue(womField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(SMART); String str = date.getYear() + ":" + date.getMonthValue() + ":" + date.get(womField) + ":" + date.get(DAY_OF_WEEK); LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date, " ::" + str + "::" + i); date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWom_lenient(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField womField = week.weekOfMonth(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(MONTH_OF_YEAR).appendLiteral(':') .appendValue(womField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(LENIENT); int wom = date.get(womField); int dow = date.get(DAY_OF_WEEK); for (int j = wom - 10; j < wom + 10; j++) { String str = date.getYear() + ":" + date.getMonthValue() + ":" + j + ":" + dow; LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date.plusWeeks(j - wom), " ::" + str + ": :" + i + "::" + j); } date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWom_strict(DayOfWeek firstDayOfWeek, int minDays) { WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField womField = week.weekOfMonth(); DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(MONTH_OF_YEAR).appendLiteral(':') .appendValue(womField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(STRICT); String str = "2012:1:0:1"; try { LocalDate date = LocalDate.parse(str, f); assertEquals(date.getYear(), 2012); assertEquals(date.getMonthValue(), 1); assertEquals(date.get(womField), 0); assertEquals(date.get(DAY_OF_WEEK), 1); } catch (DateTimeException ex) { // expected } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWomDow(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField womField = week.weekOfMonth(); for (int i = 1; i <= 15; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(MONTH_OF_YEAR).appendLiteral(':') .appendValue(womField).appendLiteral(':') .appendValue(dowField).toFormatter(); String str = date.getYear() + ":" + date.getMonthValue() + ":" + date.get(womField) + ":" + date.get(dowField); LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date, " :: " + str + " " + i); date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWomDow_lenient(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField womField = week.weekOfMonth(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(MONTH_OF_YEAR).appendLiteral(':') .appendValue(womField).appendLiteral(':') .appendValue(dowField).toFormatter().withResolverStyle(LENIENT); int wom = date.get(womField); int dow = date.get(dowField); for (int j = wom - 10; j < wom + 10; j++) { String str = date.getYear() + ":" + date.getMonthValue() + ":" + j + ":" + dow; LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date.plusWeeks(j - wom), " ::" + str + ": :" + i + "::" + j); } date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoy_lenient(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField woyField = week.weekOfYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(woyField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(LENIENT); int woy = date.get(woyField); int dow = date.get(DAY_OF_WEEK); for (int j = woy - 60; j < woy + 60; j++) { String str = date.getYear() + ":" + j + ":" + dow; LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date.plusWeeks(j - woy), " ::" + str + ": :" + i + "::" + j); } date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoy_strict(DayOfWeek firstDayOfWeek, int minDays) { WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField woyField = week.weekOfYear(); DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(woyField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(STRICT); String str = "2012:0:1"; try { LocalDate date = LocalDate.parse(str, f); assertEquals(date.getYear(), 2012); assertEquals(date.get(woyField), 0); assertEquals(date.get(DAY_OF_WEEK), 1); } catch (DateTimeException ex) { // expected } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoyDow(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField woyField = week.weekOfYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(MONTH_OF_YEAR).appendLiteral(':') .appendValue(woyField).appendLiteral(':') .appendValue(dowField).toFormatter(); String str = date.getYear() + ":" + date.getMonthValue() + ":" + date.get(woyField) + ":" + date.get(dowField); LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date, " :: " + str + " " + i); date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoyDow_lenient(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 15); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField woyField = week.weekOfYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(YEAR).appendLiteral(':') .appendValue(woyField).appendLiteral(':') .appendValue(dowField).toFormatter().withResolverStyle(LENIENT); int woy = date.get(woyField); int dow = date.get(dowField); for (int j = woy - 60; j < woy + 60; j++) { String str = date.getYear() + ":" + j + ":" + dow; LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date.plusWeeks(j - woy), " ::" + str + ": :" + i + "::" + j); } date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoWBY(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 31); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField wowbyField = week.weekOfWeekBasedYear(); TemporalField yowbyField = week.weekBasedYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(yowbyField).appendLiteral(':') .appendValue(wowbyField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter(); String str = date.get(yowbyField) + ":" + date.get(wowbyField) + ":" + date.get(DAY_OF_WEEK); LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date, " :: " + str + " " + i); date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoWBY_lenient(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 31); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField wowbyField = week.weekOfWeekBasedYear(); TemporalField yowbyField = week.weekBasedYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(yowbyField).appendLiteral(':') .appendValue(wowbyField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(LENIENT); int wowby = date.get(wowbyField); int dow = date.get(DAY_OF_WEEK); for (int j = wowby - 60; j < wowby + 60; j++) { String str = date.get(yowbyField) + ":" + j + ":" + dow; LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date.plusWeeks(j - wowby), " ::" + str + ": :" + i + "::" + j); } date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoWBY_strict(DayOfWeek firstDayOfWeek, int minDays) { WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField wowbyField = week.weekOfWeekBasedYear(); TemporalField yowbyField = week.weekBasedYear(); DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(yowbyField).appendLiteral(':') .appendValue(wowbyField).appendLiteral(':') .appendValue(DAY_OF_WEEK).toFormatter().withResolverStyle(STRICT); String str = "2012:0:1"; try { LocalDate date = LocalDate.parse(str, f); assertEquals(date.get(yowbyField), 2012); assertEquals(date.get(wowbyField), 0); assertEquals(date.get(DAY_OF_WEEK), 1); } catch (DateTimeException ex) { // expected } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoWBYDow(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 31); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField wowbyField = week.weekOfWeekBasedYear(); TemporalField yowbyField = week.weekBasedYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(yowbyField).appendLiteral(':') .appendValue(wowbyField).appendLiteral(':') .appendValue(dowField).toFormatter(); String str = date.get(yowbyField) + ":" + date.get(wowbyField) + ":" + date.get(dowField); LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date, " :: " + str + " " + i); date = date.plusDays(1); } }
@Test(dataProvider="weekFields") public void test_parse_resolve_localizedWoWBYDow_lenient(DayOfWeek firstDayOfWeek, int minDays) { LocalDate date = LocalDate.of(2012, 12, 31); WeekFields week = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = week.dayOfWeek(); TemporalField wowbyField = week.weekOfWeekBasedYear(); TemporalField yowbyField = week.weekBasedYear(); for (int i = 1; i <= 60; i++) { DateTimeFormatter f = new DateTimeFormatterBuilder() .appendValue(yowbyField).appendLiteral(':') .appendValue(wowbyField).appendLiteral(':') .appendValue(dowField).toFormatter().withResolverStyle(LENIENT); int wowby = date.get(wowbyField); int dow = date.get(dowField); for (int j = wowby - 60; j < wowby + 60; j++) { String str = date.get(yowbyField) + ":" + j + ":" + dow; LocalDate parsed = LocalDate.parse(str, f); assertEquals(parsed, date.plusWeeks(j - wowby), " ::" + str + ": :" + i + "::" + j); } date = date.plusDays(1); } }
@Test(dataProvider="LocalWeekMonthYearPatterns") public void test_parse_textLocalDate(String pattern, String text, int pos, int expectedPos, LocalDate expectedValue) { ParsePosition ppos = new ParsePosition(pos); DateTimeFormatterBuilder b = new DateTimeFormatterBuilder().appendPattern(pattern); DateTimeFormatter dtf = b.toFormatter(locale); TemporalAccessor parsed = dtf.parseUnresolved(text, ppos); if (ppos.getErrorIndex() != -1) { assertEquals(ppos.getErrorIndex(), expectedPos); } else { assertEquals(ppos.getIndex(), expectedPos, "Incorrect ending parse position"); assertEquals(parsed.isSupported(YEAR_OF_ERA), true); assertEquals(parsed.isSupported(WeekFields.of(locale).dayOfWeek()), true); assertEquals(parsed.isSupported(WeekFields.of(locale).weekOfMonth()) || parsed.isSupported(WeekFields.of(locale).weekOfYear()), true); // ensure combination resolves into a date LocalDate result = LocalDate.parse(text, dtf); assertEquals(result, expectedValue, "LocalDate incorrect for " + pattern); } }
@Test(dataProvider="LocalWeekBasedYearPatterns") public void test_parse_WeekBasedYear(String pattern, String text, int pos, int expectedPos, LocalDate expectedValue) { ParsePosition ppos = new ParsePosition(pos); DateTimeFormatterBuilder b = new DateTimeFormatterBuilder().appendPattern(pattern); DateTimeFormatter dtf = b.toFormatter(locale); TemporalAccessor parsed = dtf.parseUnresolved(text, ppos); if (ppos.getErrorIndex() != -1) { assertEquals(ppos.getErrorIndex(), expectedPos); } else { WeekFields weekDef = WeekFields.of(locale); assertEquals(ppos.getIndex(), expectedPos, "Incorrect ending parse position"); assertEquals(parsed.isSupported(weekDef.dayOfWeek()), pattern.indexOf('e') >= 0); assertEquals(parsed.isSupported(weekDef.weekOfWeekBasedYear()), pattern.indexOf('w') >= 0); assertEquals(parsed.isSupported(weekDef.weekBasedYear()), pattern.indexOf('Y') >= 0); // ensure combination resolves into a date LocalDate result = LocalDate.parse(text, dtf); assertEquals(result, expectedValue, "LocalDate incorrect for " + pattern + ", weekDef: " + weekDef); } }
@Test(dataProvider="weekFields") public void test_rangeWeekOfWeekBasedYear(DayOfWeek firstDayOfWeek, int minDays) { WeekFields weekFields = WeekFields.of(firstDayOfWeek, minDays); TemporalField dowField = weekFields.dayOfWeek(); TemporalField wowByField = weekFields.weekOfWeekBasedYear(); LocalDate day1 = LocalDate.of(2012, 1, weekFields.getMinimalDaysInFirstWeek()); day1 = day1.with(wowByField, 1).with(dowField, 1); LocalDate day2 = LocalDate.of(2013, 1, weekFields.getMinimalDaysInFirstWeek()); day2 = day2.with(wowByField, 1).with(dowField, 1); int expectedWeeks = (int)ChronoUnit.DAYS.between(day1, day2) / 7; ValueRange range = day1.range(wowByField); assertEquals(range.getMaximum(), expectedWeeks, "Range incorrect"); }
private void applyStyles() { YearMonth yearMonth; if (date == null) { // date can be null if cell is used to fill the month column return; } yearMonth = YearMonth.from(date); if (view.isExtendedMonth(yearMonth)) { getStyleClass().add(EXTENDED_CELL_STYLE_CLASS); } WeekFields fields = view.getWeekFields(); DayOfWeek firstDayOfWeek = fields.getFirstDayOfWeek(); if (date.getDayOfWeek().equals(firstDayOfWeek)) { getStyleClass().add(FIRST_DAY_OF_WEEK); } if (view.getWeekendDays().contains(date.getDayOfWeek())) { if (!getStyleClass().contains(WEEKEND_DAY)) { getStyleClass().add(0, WEEKEND_DAY); } } else { getStyleClass().remove(WEEKEND_DAY); } getStyleClass().add(date.getDayOfWeek().name().toLowerCase()); }
private void updateLabels() { LocalDate date = getDate(); if (date == null) { dayOfMonthLabel.setText(""); dayOfWeekLabel.setText(""); weekNumberLabel.setText(""); } else { dayOfMonthLabel.setText(String.valueOf(date.getDayOfMonth())); dayOfWeekLabel.setText(date.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.getDefault())); MonthSheetView view = getView(); if (view != null && view.isShowWeekNumber()) { WeekFields fields = view.getWeekFields(); DayOfWeek firstDayOfWeek = fields.getFirstDayOfWeek(); if (date.getDayOfWeek().equals(firstDayOfWeek)) { String weekNumber = Integer.toString(date.get(fields.weekOfYear())); weekNumberLabel.setText(weekNumber); } } } }
@Override public void setValue(WeekFields v) { if (v == null) { throw new IllegalArgumentException("week fields value can not be null"); } super.setValue(v); }