summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/src/com/vaadin/ui/Calendar.java37
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/calendar/CalendarBasicsTest.java54
-rw-r--r--uitest/src/com/vaadin/tests/components/calendar/CalendarTest.java53
3 files changed, 137 insertions, 7 deletions
diff --git a/server/src/com/vaadin/ui/Calendar.java b/server/src/com/vaadin/ui/Calendar.java
index acddbe308b..0fb6925ae2 100644
--- a/server/src/com/vaadin/ui/Calendar.java
+++ b/server/src/com/vaadin/ui/Calendar.java
@@ -220,6 +220,8 @@ public class Calendar extends AbstractComponent implements
*/
private CalendarServerRpcImpl rpc = new CalendarServerRpcImpl();
+ private Integer customFirstDayOfWeek;
+
/**
* Returns the logger for the calendar
*/
@@ -427,6 +429,10 @@ public class Calendar extends AbstractComponent implements
} else {
currentCalendar = java.util.Calendar.getInstance(getLocale());
}
+
+ if (customFirstDayOfWeek != null) {
+ currentCalendar.setFirstDayOfWeek(customFirstDayOfWeek);
+ }
}
private void setupCalendarEvents() {
@@ -1281,9 +1287,8 @@ public class Calendar extends AbstractComponent implements
/*
* (non-Javadoc)
*
- * @see
- * com.vaadin.addon.calendar.ui.CalendarEvents.EventChangeListener#eventChange
- * (com.vaadin.addon.calendar.ui.CalendarEvents.EventChange)
+ * @see com.vaadin.addon.calendar.ui.CalendarEvents.EventChangeListener#
+ * eventChange (com.vaadin.addon.calendar.ui.CalendarEvents.EventChange)
*/
@Override
public void eventSetChange(EventSetChangeEvent changeEvent) {
@@ -1440,9 +1445,8 @@ public class Calendar extends AbstractComponent implements
/*
* (non-Javadoc)
*
- * @see
- * com.vaadin.addon.calendar.ui.CalendarComponentEvents.CalendarEventNotifier
- * #getHandler(java.lang.String)
+ * @see com.vaadin.addon.calendar.ui.CalendarComponentEvents.
+ * CalendarEventNotifier #getHandler(java.lang.String)
*/
@Override
public EventListener getHandler(String eventId) {
@@ -1992,4 +1996,25 @@ public class Calendar extends AbstractComponent implements
customAttributes.add("end-date");
return customAttributes;
}
+
+ /**
+ * Allow setting first day of week depending on Locale. Set to null if you
+ * want first day of week depend on locale
+ *
+ * @since
+ * @param dayOfWeek
+ */
+ public void setFirstDayOfWeek(Integer dayOfWeek) {
+ int minimalSupported = java.util.Calendar.SUNDAY;
+ int maximalSupported = java.util.Calendar.SATURDAY;
+ if (dayOfWeek != null
+ && (dayOfWeek < minimalSupported || dayOfWeek > maximalSupported)) {
+ throw new IllegalArgumentException(
+ String.format(
+ "Day of week must be between %s and %s. Actually received: %s",
+ minimalSupported, maximalSupported, dayOfWeek));
+ }
+ customFirstDayOfWeek = dayOfWeek;
+ markAsDirty();
+ }
}
diff --git a/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarBasicsTest.java b/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarBasicsTest.java
index 95b4aecdb3..1592fb6c38 100644
--- a/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarBasicsTest.java
+++ b/server/tests/src/com/vaadin/tests/server/component/calendar/CalendarBasicsTest.java
@@ -216,6 +216,60 @@ public class CalendarBasicsTest {
calendar.isClientChangeAllowed());
}
+ // regression test to ensure old functionality is not broken
+ @Test
+ public void defaultFirstDayOfWeek() {
+ Calendar calendar = new Calendar();
+ calendar.setLocale(Locale.GERMAN);
+ // simulating consequences of markAsDirty
+ calendar.beforeClientResponse(true);
+ assertEquals(java.util.Calendar.MONDAY, calendar.getInternalCalendar()
+ .getFirstDayOfWeek());
+ }
+
+ @Test
+ public void customFirstDayOfWeek() {
+ Calendar calendar = new Calendar();
+ calendar.setLocale(Locale.GERMAN);
+ calendar.setFirstDayOfWeek(java.util.Calendar.SUNDAY);
+
+ // simulating consequences of markAsDirty
+ calendar.beforeClientResponse(true);
+ assertEquals(java.util.Calendar.SUNDAY, calendar.getInternalCalendar()
+ .getFirstDayOfWeek());
+ }
+
+ @Test
+ public void customFirstDayOfWeekCanSetEvenBeforeLocale() {
+ Calendar calendar = new Calendar();
+ calendar.setFirstDayOfWeek(java.util.Calendar.SUNDAY);
+
+ calendar.setLocale(Locale.GERMAN);
+ // simulating consequences of markAsDirty
+ calendar.beforeClientResponse(true);
+ assertEquals(java.util.Calendar.SUNDAY, calendar.getInternalCalendar()
+ .getFirstDayOfWeek());
+ }
+
+ @Test
+ public void customFirstDayOfWeekSetNullRestoresDefault() {
+ Calendar calendar = new Calendar();
+ calendar.setLocale(Locale.GERMAN);
+ calendar.setFirstDayOfWeek(java.util.Calendar.SUNDAY);
+ calendar.setFirstDayOfWeek(null);
+ // simulating consequences of markAsDirty
+ calendar.beforeClientResponse(true);
+ assertEquals(java.util.Calendar.MONDAY, calendar.getInternalCalendar()
+ .getFirstDayOfWeek());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void customFirstDayOfWeekValidation() {
+ Calendar calendar = new Calendar();
+ int someWrongDayOfWeek = 10;
+ calendar.setFirstDayOfWeek(someWrongDayOfWeek);
+ }
+
private static class TestCalendar extends Calendar {
TestCalendar(boolean connectorEnabled) {
isConnectorEnabled = connectorEnabled;
diff --git a/uitest/src/com/vaadin/tests/components/calendar/CalendarTest.java b/uitest/src/com/vaadin/tests/components/calendar/CalendarTest.java
index a1bcca2e4e..b56f92962a 100644
--- a/uitest/src/com/vaadin/tests/components/calendar/CalendarTest.java
+++ b/uitest/src/com/vaadin/tests/components/calendar/CalendarTest.java
@@ -108,6 +108,7 @@ public class CalendarTest extends UI {
private CheckBox hideWeekendsButton;
private CheckBox readOnlyButton;
+ private ComboBox customFirstDayOfWeekSelect;
private TextField captionField;
@@ -221,10 +222,12 @@ public class CalendarTest extends UI {
setLocale(Locale.getDefault());
}
- // Initialize locale, timezone and timeformat selects.
+ // Initialize locale, timezone, timeformat and custom first day of week
+ // selects.
localeSelect = createLocaleSelect();
timeZoneSelect = createTimeZoneSelect();
formatSelect = createCalendarFormatSelect();
+ customFirstDayOfWeekSelect = createCustomFirstDayOfWeekSelect();
initCalendar();
initLayoutContent();
@@ -359,6 +362,7 @@ public class CalendarTest extends UI {
controlPanel.addComponent(localeSelect);
controlPanel.addComponent(timeZoneSelect);
controlPanel.addComponent(formatSelect);
+ controlPanel.addComponent(customFirstDayOfWeekSelect);
controlPanel.addComponent(hideWeekendsButton);
controlPanel.addComponent(readOnlyButton);
controlPanel.addComponent(disabledButton);
@@ -770,6 +774,39 @@ public class CalendarTest extends UI {
return s;
}
+ private ComboBox createCustomFirstDayOfWeekSelect() {
+ ComboBox comboBox = new ComboBox("First day of week");
+
+ comboBox.addContainerProperty("caption", String.class, "");
+ comboBox.setItemCaptionPropertyId("caption");
+
+ comboBox.setImmediate(true);
+
+ Item defaultItem = comboBox.addItem(DEFAULT_ITEMID);
+ defaultItem.getItemProperty("caption").setValue("Default by locale");
+
+ Item sunday = comboBox.addItem(java.util.Calendar.SUNDAY);
+ sunday.getItemProperty("caption").setValue("Sunday");
+
+ Item monday = comboBox.addItem(java.util.Calendar.MONDAY);
+ monday.getItemProperty("caption").setValue("Monday");
+
+ comboBox.select(DEFAULT_ITEMID);
+ comboBox.setNullSelectionAllowed(false);
+
+ comboBox.addValueChangeListener(new ValueChangeListener() {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ updateCalendarFirstDayOfWeek(event.getProperty().getValue());
+ }
+ });
+
+ return comboBox;
+ }
+
private ComboBox createLocaleSelect() {
ComboBox s = new ComboBox("Locale");
s.addContainerProperty("caption", String.class, "");
@@ -831,6 +868,20 @@ public class CalendarTest extends UI {
calendarComponent.setTimeFormat(calFormat);
}
+ private void updateCalendarFirstDayOfWeek(Object firstDayOfWeek) {
+ Integer firstDayOfWeekValue = null;
+ if (firstDayOfWeek instanceof Integer) {
+ firstDayOfWeekValue = (Integer) firstDayOfWeek;
+ calendarComponent.setFirstDayOfWeek(firstDayOfWeekValue);
+ } else {
+ // it means 'Default by locale has been selected'
+ calendarComponent.setFirstDayOfWeek(null);
+ }
+
+ // if we need we may update also field of this test 'calendar' which
+ // also keeps first day of week
+ }
+
private String getLocaleItemCaption(Locale l) {
String country = l.getDisplayCountry(getLocale());
String language = l.getDisplayLanguage(getLocale());