@Override public void setResolution(DateResolution resolution) { super.setResolution(resolution); // 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. // But we want to update the field value and fire value change event. if (getValue() != null) { setValue(reconstructDateFromFields(getState().resolutions, getValue()), true); } }
protected CubaDateField createDateField() { return new CubaDateField(); }
@Override public void focus() { dateField.focus(); }
Set<String> resolutionNames = getResolutions().map(Enum::name) .collect(Collectors.toSet()); resolutionNames.retainAll(resolutions.keySet()); if (!isReadOnly() && (!resolutionNames.isEmpty() || newDateString != null)) { final LocalDate oldDate = getValue(); String mask = StringUtils.replaceChars(getState(false).dateMask, "#U", "__"); if ("".equals(newDateString) || mask.equals(newDateString)) { newDate = reconstructDateFromFields(resolutions, oldDate); currentErrorMessage = null; if (newDateString == null || newDateString.isEmpty()) { boolean valueChanged = setValue(newDate, true); if (!valueChanged && parseErrorWasSet) { doSetValue(newDate); Result<LocalDate> parsedDate = handleUnparsableDateString( dateString); parsedDate.ifOk(v -> setValue(v, true)); if (parsedDate.isError()) { dateString = null; if (!isDifferentValue(null)) { doSetValue(null); } else {
@Override protected Result<LocalDate> handleUnparsableDateString(String dateString) { if (Objects.equals(dateString, StringUtils.replaceChars(getState(false).dateMask, "#U", "__"))) { return Result.ok(null); } return Result.error(getParseErrorMessage()); }
@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; } }
@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()); }
@Override public void removeActionHandler(Action.Handler actionHandler) { getActionManager().removeActionHandler(actionHandler); }
@Override public String getRequiredMessage() { return dateField.getRequiredError(); }
@Override protected boolean hasValidationError() { return dateField.getComponentError() instanceof UserError; }
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()); }
@Override public void addActionHandler(Action.Handler actionHandler) { getActionManager().addActionHandler(actionHandler); }