protected void updateResolution() { this.timeFormat = getResolutionsHigherOrEqualTo(getResolution()) .map(this::getResolutionFormat) .collect(Collectors.joining(":")); // By default, only visual representation is updated after the resolution is changed. // As a result, the actual value and the visual representation are different values. // Since we want to update the field value and fire value change event, we reset the value, // taking into account the fact that the setValue(LocalTime, boolean) method applies current // resolution to value. if (getValue() != null) { setValue(getValue(), true); } updateTimeFormat(); }
protected CubaTimeField createTimeField() { return new CubaTimeField(); }
@Override public void focus() { component.focus(); }
@Override protected void doSetValue(LocalTime value) { this.value = value; getState().text = formatValue(value); }
@Override public void setText(String text, int cursorPosition) { updateDiffstate("text", Json.create(text)); LocalTime value = parseValue(text); setValue(value, true); } }
protected void setResolutionInternal(Resolution resolution) { dateField.setResolution(WebWrapperUtils.convertDateTimeResolution(resolution)); if (resolution.ordinal() < Resolution.DAY.ordinal()) { timeField.setResolution(WebWrapperUtils.convertTimeResolution(resolution)); } else { // Set time field value to zero in case of resolution without time. // If we don't set value to zero then after changing resolution back to // resolution with time, we will get some value in time field timeField.setValue(null); } }
@Override protected void setValueToPresentation(LocalDateTime value) { updatingInstance = true; try { if (value == null) { dateField.setValue(null); timeField.setValue(null); } else { dateField.setValue(value.toLocalDate()); timeField.setValue(value.toLocalTime()); } } finally { updatingInstance = false; } }
protected LocalTime applyResolutionToValue(LocalTime value) { if (value == null) { return null; } LocalTime result = LocalTime.MIDNIGHT; List<TimeResolution> resolutions = getResolutionsHigherOrEqualTo(getResolution()) .collect(Collectors.toList()); for (TimeResolution resolution : resolutions) { switch (resolution) { case HOUR: result = result.withHour(value.getHour()); break; case MINUTE: result = result.withMinute(value.getMinute()); break; case SECOND: result = result.withSecond(value.getSecond()); break; default: throw new IllegalArgumentException("Cannot detect resolution type"); } } return result; }
@SuppressWarnings("unchecked") protected V constructModelValue() { LocalDate dateValue = dateField.getValue(); if (dateValue == null) { return null; } LocalTime timeValue = timeField.getValue() != null ? timeField.getValue() : LocalTime.MIDNIGHT; LocalDateTime localDateTime = LocalDateTime.of(dateValue, timeValue); ValueSource<V> valueSource = getValueSource(); if (valueSource instanceof EntityValueSource) { MetaProperty metaProperty = ((EntityValueSource) valueSource).getMetaPropertyPath().getMetaProperty(); return (V) convertFromLocalDateTime(localDateTime, zoneId, metaProperty.getRange().asDatatype().getJavaClass()); } return (V) convertFromLocalDateTime(localDateTime, ZoneId.systemDefault(), datatype == null ? Date.class : datatype.getJavaClass()); }
protected LocalTime parseValue(String text) { if (StringUtils.isNotEmpty(text) && !text.equals(placeholder)) { DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(); return LocalTime.parse(text, dateTimeFormatter); } else { return null; } }
protected DateTimeFormatter getDateTimeFormatter() { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(timeFormat); Locale locale = getLocale(); if (locale != null) { dateTimeFormatter = dateTimeFormatter.withLocale(locale); } return dateTimeFormatter; }
@Override protected boolean setValue(LocalTime value, boolean userOriginated) { value = applyResolutionToValue(value); return super.setValue(value, userOriginated); }
public WebDateField() { component = createComponent(); component.setPrimaryStyleName("c-datefield-layout"); if (App.isBound()) { theme = App.getInstance().getThemeConstants(); } dateField = createDateField(); initDateField(dateField); timeField = createTimeField(); initTimeField(timeField); setWidthAuto(); dateField.addValueChangeListener(createDateValueChangeListener()); timeField.addValueChangeListener(createTimeValueChangeListener()); }
protected String formatValue(LocalTime value) { if (value == null) { return ""; } DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(); return value.format(dateTimeFormatter); }
public WebTimeField() { component = new CubaTimeField(); attachValueChangeListener(component); }