PL-8731 Ability to change Calendar day names and months

This commit is contained in:
Daniil Tsarev 2017-03-29 20:47:02 +04:00
parent fe0e212115
commit a71b2e31c0
2 changed files with 84 additions and 4 deletions

View File

@ -22,7 +22,10 @@ import com.haulmont.cuba.gui.components.calendar.CalendarEventProvider;
import com.haulmont.cuba.gui.data.CollectionDatasource; import com.haulmont.cuba.gui.data.CollectionDatasource;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.time.DayOfWeek;
import java.time.Month;
import java.util.Date; import java.util.Date;
import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
public interface Calendar extends Component.BelongToFrame, Component.HasCaption, Component.HasIcon { public interface Calendar extends Component.BelongToFrame, Component.HasCaption, Component.HasIcon {
@ -133,6 +136,29 @@ public interface Calendar extends Component.BelongToFrame, Component.HasCaption,
*/ */
boolean isNavigationButtonsVisible(); boolean isNavigationButtonsVisible();
/**
* @return {@link DayOfWeek} values matched to localized day names
*/
Map<DayOfWeek, String> getDayNames();
/**
* Sets localized Calendar day names.
*
* @param dayNames {@link DayOfWeek} values matched to localized day names
*/
void setDayNames(Map<DayOfWeek, String> dayNames);
/**
* @return {@link Month} values matched to localized month names
*/
Map<Month, String> getMonthNames();
/**
* Sets localized Calendar month names.
*
* @param monthNames {@link Month} values matched to localized month names
*/
void setMonthNames(Map<Month, String> monthNames);
void addDateClickListener(CalendarDateClickListener listener); void addDateClickListener(CalendarDateClickListener listener);
void removeDateClickListener(CalendarDateClickListener listener); void removeDateClickListener(CalendarDateClickListener listener);

View File

@ -16,6 +16,7 @@
package com.haulmont.cuba.web.gui.components; package com.haulmont.cuba.web.gui.components;
import com.haulmont.bali.util.Preconditions;
import com.haulmont.cuba.core.entity.Entity; import com.haulmont.cuba.core.entity.Entity;
import com.haulmont.cuba.core.global.AppBeans; import com.haulmont.cuba.core.global.AppBeans;
import com.haulmont.cuba.core.global.Messages; import com.haulmont.cuba.core.global.Messages;
@ -28,9 +29,12 @@ import com.haulmont.cuba.web.gui.components.calendar.CalendarEventProviderWrappe
import com.haulmont.cuba.web.gui.components.calendar.CalendarEventWrapper; import com.haulmont.cuba.web.gui.components.calendar.CalendarEventWrapper;
import com.haulmont.cuba.web.toolkit.ui.CubaCalendar; import com.haulmont.cuba.web.toolkit.ui.CubaCalendar;
import com.vaadin.ui.components.calendar.CalendarComponentEvents; import com.vaadin.ui.components.calendar.CalendarComponentEvents;
import org.apache.commons.collections.CollectionUtils;
import java.util.Date; import java.time.DayOfWeek;
import java.util.TimeZone; import java.time.Month;
import java.util.*;
import java.util.stream.Collectors;
public class WebCalendar extends WebAbstractComponent<CubaCalendar> implements Calendar { public class WebCalendar extends WebAbstractComponent<CubaCalendar> implements Calendar {
private CollectionDatasource datasource; private CollectionDatasource datasource;
@ -45,7 +49,7 @@ public class WebCalendar extends WebAbstractComponent<CubaCalendar> implements C
component = createComponent(); component = createComponent();
Messages messages = AppBeans.get(Messages.NAME); Messages messages = AppBeans.get(Messages.NAME);
String [] monthNamesShort = new String[12]; String[] monthNamesShort = new String[12];
monthNamesShort[0] = messages.getMainMessage("calendar.januaryCaption"); monthNamesShort[0] = messages.getMainMessage("calendar.januaryCaption");
monthNamesShort[1] = messages.getMainMessage("calendar.februaryCaption"); monthNamesShort[1] = messages.getMainMessage("calendar.februaryCaption");
monthNamesShort[2] = messages.getMainMessage("calendar.marchCaption"); monthNamesShort[2] = messages.getMainMessage("calendar.marchCaption");
@ -60,7 +64,7 @@ public class WebCalendar extends WebAbstractComponent<CubaCalendar> implements C
monthNamesShort[11] = messages.getMainMessage("calendar.decemberCaption"); monthNamesShort[11] = messages.getMainMessage("calendar.decemberCaption");
component.setMonthNamesShort(monthNamesShort); component.setMonthNamesShort(monthNamesShort);
String [] dayNamesShort = new String[7]; String[] dayNamesShort = new String[7];
dayNamesShort[0] = messages.getMainMessage("calendar.sundayCaption"); dayNamesShort[0] = messages.getMainMessage("calendar.sundayCaption");
dayNamesShort[1] = messages.getMainMessage("calendar.mondayCaption"); dayNamesShort[1] = messages.getMainMessage("calendar.mondayCaption");
dayNamesShort[2] = messages.getMainMessage("calendar.tuesdayCaption"); dayNamesShort[2] = messages.getMainMessage("calendar.tuesdayCaption");
@ -500,4 +504,54 @@ public class WebCalendar extends WebAbstractComponent<CubaCalendar> implements C
removeStyleName("navbuttons-disabled"); removeStyleName("navbuttons-disabled");
} }
} }
@Override
public Map<DayOfWeek, String> getDayNames() {
List<String> days = Arrays.asList(component.getDayNamesShort());
return days.stream().collect(Collectors.toMap(
(String d) -> DayOfWeek.of(days.indexOf(d) + 1),
d -> d
));
}
@Override
public void setDayNames(Map<DayOfWeek, String> dayNames) {
Preconditions.checkNotNullArgument(dayNames);
if (!CollectionUtils.isEqualCollection(Arrays.asList(DayOfWeek.values()), dayNames.keySet())) {
throw new IllegalArgumentException("Day names map doesn't contain all required values");
}
String[] days = Arrays.stream(DayOfWeek.values())
.map(dayNames::get)
.toArray(String[]::new);
component.setDayNamesShort(days);
}
@Override
public Map<Month, String> getMonthNames() {
List<String> months = Arrays.asList(component.getMonthNamesShort());
return months.stream().collect(Collectors.toMap(
(String m) -> Month.of(months.indexOf(m) + 1),
m -> m
));
}
@Override
public void setMonthNames(Map<Month, String> monthNames) {
Preconditions.checkNotNullArgument(monthNames);
if (!CollectionUtils.isEqualCollection(Arrays.asList(Month.values()), monthNames.keySet())) {
throw new IllegalArgumentException("Month names map doesn't contain all required values");
}
String[] months = Arrays.stream(Month.values())
.map(monthNames::get)
.toArray(String[]::new);
component.setMonthNamesShort(months);
}
} }