@@ -86,7 +86,17 @@ | |||
<li>Separate row heights for header, body and footer in Grid</li> | |||
<li>Support for item descriptions (tooltips) in CheckBoxGroup, RadioButtonGroup and Tree</li> | |||
<li>Binder supports removing bindings</li> | |||
<li>Binding builder methods do not have to be chained</li> | |||
<li>Bean validation failures will revert changes in Binder</li> | |||
<li>Notification supports CloseListener</li> | |||
<li>Tree now has methods to scroll it programmatically</li> | |||
<li>The browser time zone can be obtained from WebBrowser if the browser supports it</li> | |||
<li>AbstractDateField now supports formatting of time zone information</li> | |||
<li>PushState based navigation support</li> | |||
<li>VaadinSession is now stored to the HTTP session at the end of each access to support clustering</li> | |||
<li>Grid WAI-ARIA support has been improved (aria-sort added)</li> | |||
<li>Client side ErrorLevel support</li> | |||
<li>VaadinService, VaadinServlet and VaadinServletService have protected no-args constructors to make DI integrations simpler</li> | |||
</ul> | |||
</p> |
@@ -47,6 +47,8 @@ public class StyleConstants { | |||
/** | |||
* Style name and style name prefix for the error indicator element. | |||
* | |||
* @since 8.2 | |||
*/ | |||
public static final String STYLE_NAME_ERROR_INDICATOR = "v-errorindicator"; | |||
} |
@@ -48,7 +48,7 @@ public class TooltipInfo { | |||
* Constructs a new tooltip info instance. | |||
* | |||
* @param tooltip | |||
* tooltip title | |||
* tooltip title | |||
*/ | |||
public TooltipInfo(String tooltip) { | |||
this(tooltip, ContentMode.PREFORMATTED); | |||
@@ -103,8 +103,9 @@ public class TooltipInfo { | |||
* @param errorLevel | |||
* error level | |||
* | |||
* @deprecated use {@link #TooltipInfo(String, ContentMode, String, Object, | |||
* ErrorLevel)} instead | |||
* @deprecated use | |||
* {@link #TooltipInfo(String, ContentMode, String, Object, ErrorLevel)} | |||
* instead | |||
* @since 8.2 | |||
*/ | |||
@Deprecated | |||
@@ -117,9 +118,9 @@ public class TooltipInfo { | |||
* Constructs a new tooltip info instance. | |||
* | |||
* @param tooltip | |||
* tooltip title | |||
* tooltip title | |||
* @param mode | |||
* content mode | |||
* content mode | |||
*/ | |||
public TooltipInfo(String tooltip, ContentMode mode) { | |||
setTitle(tooltip); | |||
@@ -130,11 +131,11 @@ public class TooltipInfo { | |||
* Constructs a new tooltip info instance. | |||
* | |||
* @param tooltip | |||
* tooltip title | |||
* tooltip title | |||
* @param mode | |||
* content mode | |||
* content mode | |||
* @param errorMessage | |||
* error message | |||
* error message | |||
*/ | |||
public TooltipInfo(String tooltip, ContentMode mode, String errorMessage) { | |||
this(tooltip, mode, errorMessage, null); | |||
@@ -144,13 +145,13 @@ public class TooltipInfo { | |||
* Constructs a new tooltip info instance. | |||
* | |||
* @param tooltip | |||
* tooltip title | |||
* tooltip title | |||
* @param mode | |||
* content mode | |||
* content mode | |||
* @param errorMessage | |||
* error message | |||
* error message | |||
* @param identifier | |||
* the tooltip's identifier | |||
* the tooltip's identifier | |||
*/ | |||
public TooltipInfo(String tooltip, ContentMode mode, String errorMessage, | |||
Object identifier) { | |||
@@ -161,15 +162,16 @@ public class TooltipInfo { | |||
* Constructs a new tooltip info instance. | |||
* | |||
* @param tooltip | |||
* tooltip title | |||
* tooltip title | |||
* @param mode | |||
* content mode | |||
* content mode | |||
* @param errorMessage | |||
* error message | |||
* error message | |||
* @param identifier | |||
* the tooltip's identifier | |||
* the tooltip's identifier | |||
* @param errorLevel | |||
* error level | |||
* error level | |||
* @since 8.2 | |||
*/ | |||
public TooltipInfo(String tooltip, ContentMode mode, String errorMessage, | |||
Object identifier, ErrorLevel errorLevel) { | |||
@@ -184,7 +186,7 @@ public class TooltipInfo { | |||
* Sets the tooltip's identifier. | |||
* | |||
* @param identifier | |||
* the identifier to set | |||
* the identifier to set | |||
*/ | |||
public void setIdentifier(Object identifier) { | |||
this.identifier = identifier; | |||
@@ -212,7 +214,7 @@ public class TooltipInfo { | |||
* Sets the tooltip title. | |||
* | |||
* @param title | |||
* the title to set | |||
* the title to set | |||
*/ | |||
public void setTitle(String title) { | |||
this.title = title; | |||
@@ -231,7 +233,7 @@ public class TooltipInfo { | |||
* Sets the error message. | |||
* | |||
* @param errorMessage | |||
* the error message to set | |||
* the error message to set | |||
*/ | |||
public void setErrorMessage(String errorMessage) { | |||
errorMessageHtml = errorMessage; | |||
@@ -250,7 +252,7 @@ public class TooltipInfo { | |||
* Sets the tooltip title's content mode. | |||
* | |||
* @param contentMode | |||
* the content mode to set | |||
* the content mode to set | |||
*/ | |||
public void setContentMode(ContentMode contentMode) { | |||
this.contentMode = contentMode; | |||
@@ -270,7 +272,7 @@ public class TooltipInfo { | |||
* Sets the error level. | |||
* | |||
* @param errorLevel | |||
* the error level to set | |||
* the error level to set | |||
* @since 8.2 | |||
*/ | |||
public void setErrorLevel(ErrorLevel errorLevel) { | |||
@@ -294,7 +296,7 @@ public class TooltipInfo { | |||
* identifier are equal. | |||
* | |||
* @param other | |||
* the reference tooltip info instance with which to compare | |||
* the reference tooltip info instance with which to compare | |||
* @return {@code true} if the instances are equal, {@code false} otherwise | |||
*/ | |||
public boolean equals(TooltipInfo other) { |
@@ -201,6 +201,13 @@ public abstract class VAbstractTextualDate<R extends Enum<R>> | |||
} | |||
} | |||
/** | |||
* Sets the time zone for the field. | |||
* | |||
* @param timeZone | |||
* the new time zone to use | |||
* @since 8.2 | |||
*/ | |||
public void setTimeZone(TimeZone timeZone) { | |||
this.timeZone = timeZone; | |||
} |
@@ -129,9 +129,9 @@ public class Binder<BEAN> implements Serializable { | |||
/** | |||
* Gets the validation status handler for this Binding. | |||
* | |||
* | |||
* @return the validation status handler for this binding | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
public BindingValidationStatusHandler getValidationStatusHandler(); | |||
@@ -423,11 +423,9 @@ public class Binder<BEAN> implements Serializable { | |||
TARGET nullRepresentation) { | |||
return withConverter( | |||
fieldValue -> Objects.equals(fieldValue, nullRepresentation) | |||
? null | |||
: fieldValue, | |||
? null : fieldValue, | |||
modelValue -> Objects.isNull(modelValue) | |||
? nullRepresentation | |||
: modelValue); | |||
? nullRepresentation : modelValue); | |||
} | |||
/** | |||
@@ -1111,9 +1109,10 @@ public class Binder<BEAN> implements Serializable { | |||
* trigger validating and writing of the whole bean if using | |||
* {@link #setBean(Object)}. If using {@link #readBean(Object)} only the | |||
* field validation is run. | |||
* | |||
* | |||
* @param binding | |||
* the binding whose value has been changed | |||
* @since 8.2 | |||
*/ | |||
protected void handleFieldValueChange(Binding<BEAN, ?> binding) { | |||
changedBindings.add(binding); | |||
@@ -1520,7 +1519,7 @@ public class Binder<BEAN> implements Serializable { | |||
* Changes have been succesfully saved. The set is only cleared | |||
* if using readBean/writeBean or when the changes are stored in | |||
* the currently set bean. | |||
* | |||
* | |||
* Writing changes to another bean when using setBean does not | |||
* clear the set of changed bindings. | |||
*/ | |||
@@ -1538,12 +1537,12 @@ public class Binder<BEAN> implements Serializable { | |||
/** | |||
* Restores the state of the bean from the given values. | |||
* | |||
* | |||
* @param bean | |||
* the bean | |||
* @param oldValues | |||
* the old values | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
@SuppressWarnings({ "unchecked", "rawtypes" }) | |||
@@ -1560,14 +1559,14 @@ public class Binder<BEAN> implements Serializable { | |||
/** | |||
* Stores the state of the given bean. | |||
* | |||
* | |||
* @param bean | |||
* the bean to store the state of | |||
* @param bindings | |||
* the bindings to store | |||
* | |||
* | |||
* @return map from binding to value | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
@SuppressWarnings({ "unchecked", "rawtypes" }) | |||
@@ -1689,12 +1688,12 @@ public class Binder<BEAN> implements Serializable { | |||
* Validates the values of all bound fields and returns the validation | |||
* status. This method can skip firing the event, based on the given | |||
* {@code boolean}. | |||
* | |||
* | |||
* @param fireEvent | |||
* {@code true} to fire validation status events; {@code false} | |||
* to not | |||
* @return validation status for the binder | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
protected BinderValidationStatus<BEAN> validate(boolean fireEvent) { | |||
@@ -2159,8 +2158,7 @@ public class Binder<BEAN> implements Serializable { | |||
Converter<FIELDVALUE, FIELDVALUE> nullRepresentationConverter = Converter | |||
.from(fieldValue -> fieldValue, | |||
modelValue -> Objects.isNull(modelValue) | |||
? field.getEmptyValue() | |||
: modelValue, | |||
? field.getEmptyValue() : modelValue, | |||
exception -> exception.getMessage()); | |||
ConverterDelegate<FIELDVALUE> converter = new ConverterDelegate<>( | |||
nullRepresentationConverter); | |||
@@ -2490,10 +2488,10 @@ public class Binder<BEAN> implements Serializable { | |||
/** | |||
* Finds and removes all Bindings for the given field. | |||
* | |||
* | |||
* @param field | |||
* the field to remove from bindings | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
public void removeBinding(HasValue<?> field) { | |||
@@ -2506,10 +2504,10 @@ public class Binder<BEAN> implements Serializable { | |||
/** | |||
* Removes the given Binding from this Binder. | |||
* | |||
* | |||
* @param binding | |||
* the binding to remove | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
public void removeBinding(Binding<BEAN, ?> binding) { | |||
@@ -2542,10 +2540,10 @@ public class Binder<BEAN> implements Serializable { | |||
/** | |||
* Finds and removes the Binding for the given property name. | |||
* | |||
* | |||
* @param propertyName | |||
* the propertyName to remove from bindings | |||
* | |||
* | |||
* @since 8.2 | |||
*/ | |||
public void removeBinding(String propertyName) { |
@@ -359,7 +359,9 @@ public class WebBrowser implements Serializable { | |||
* (if the browser supports this feature). | |||
* | |||
* @return the TimeZone Id if provided by the browser, null otherwise. | |||
* @see <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions">Intl.DateTimeFormat.prototype.resolvedOptions()</a> | |||
* @see <a href= | |||
* "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions">Intl.DateTimeFormat.prototype.resolvedOptions()</a> | |||
* @since 8.2 | |||
*/ | |||
public String getTimeZoneId() { | |||
return timeZoneId; | |||
@@ -500,9 +502,9 @@ public class WebBrowser implements Serializable { | |||
this.dstInEffect = Boolean.parseBoolean(dstInEffect); | |||
} | |||
if (tzId == null || "undefined".equals(tzId)) { | |||
this.timeZoneId = null; | |||
timeZoneId = null; | |||
} else { | |||
this.timeZoneId = tzId; | |||
timeZoneId = tzId; | |||
} | |||
if (curDate != null) { | |||
try { |
@@ -23,7 +23,6 @@ import com.vaadin.event.ConnectorEvent; | |||
import com.vaadin.server.AbstractExtension; | |||
import com.vaadin.server.Page; | |||
import com.vaadin.server.Resource; | |||
import com.vaadin.server.ResourceReference; | |||
import com.vaadin.shared.Position; | |||
import com.vaadin.shared.Registration; | |||
import com.vaadin.shared.ui.notification.NotificationServerRpc; | |||
@@ -72,6 +71,8 @@ public class Notification extends AbstractExtension implements Serializable { | |||
/** | |||
* The server RPC. | |||
* | |||
* @since 8.2 | |||
*/ | |||
protected NotificationServerRpc rpc = () -> { | |||
fireEvent(new CloseEvent(Notification.this)); | |||
@@ -287,8 +288,7 @@ public class Notification extends AbstractExtension implements Serializable { | |||
* Sets the position of the notification message. | |||
* | |||
* @param position | |||
* The desired notification position, | |||
* not {@code null} | |||
* The desired notification position, not {@code null} | |||
*/ | |||
public void setPosition(Position position) { | |||
if (position == null) { | |||
@@ -319,8 +319,8 @@ public class Notification extends AbstractExtension implements Serializable { | |||
/** | |||
* Gets the delay before the notification disappears. | |||
* | |||
* @return the delay in milliseconds, {@value #DELAY_FOREVER} | |||
* indicates the message has to be clicked. | |||
* @return the delay in milliseconds, {@value #DELAY_FOREVER} indicates the | |||
* message has to be clicked. | |||
*/ | |||
public int getDelayMsec() { | |||
return getState(false).delay; | |||
@@ -330,8 +330,8 @@ public class Notification extends AbstractExtension implements Serializable { | |||
* Sets the delay before the notification disappears. | |||
* | |||
* @param delayMsec | |||
* the desired delay in milliseconds, {@value #DELAY_FOREVER} | |||
* to require the user to click the message | |||
* the desired delay in milliseconds, {@value #DELAY_FOREVER} to | |||
* require the user to click the message | |||
*/ | |||
public void setDelayMsec(int delayMsec) { | |||
getState().delay = delayMsec; | |||
@@ -374,8 +374,8 @@ public class Notification extends AbstractExtension implements Serializable { | |||
* Checks whether caption and description are interpreted as HTML or plain | |||
* text. | |||
* | |||
* @return {@code true} if the texts are used as HTML, | |||
* {@code false} if used as plain text | |||
* @return {@code true} if the texts are used as HTML, {@code false} if used | |||
* as plain text | |||
* @see #setHtmlContentAllowed(boolean) | |||
*/ | |||
public boolean isHtmlContentAllowed() { | |||
@@ -413,8 +413,7 @@ public class Notification extends AbstractExtension implements Serializable { | |||
* | |||
* @param caption | |||
* The message | |||
* @return | |||
* The Notification | |||
* @return The Notification | |||
*/ | |||
public static Notification show(String caption) { | |||
Notification notification = new Notification(caption); | |||
@@ -437,8 +436,7 @@ public class Notification extends AbstractExtension implements Serializable { | |||
* The message | |||
* @param type | |||
* The message type | |||
* @return | |||
* The Notification | |||
* @return The Notification | |||
*/ | |||
public static Notification show(String caption, Type type) { | |||
Notification notification = new Notification(caption, type); | |||
@@ -463,11 +461,12 @@ public class Notification extends AbstractExtension implements Serializable { | |||
* The message description | |||
* @param type | |||
* The message type | |||
* @return | |||
* The Notification | |||
* @return The Notification | |||
*/ | |||
public static Notification show(String caption, String description, Type type) { | |||
Notification notification = new Notification(caption, description, type); | |||
public static Notification show(String caption, String description, | |||
Type type) { | |||
Notification notification = new Notification(caption, description, | |||
type); | |||
notification.extend(UI.getCurrent()); | |||
return notification; | |||
} | |||
@@ -495,6 +494,11 @@ public class Notification extends AbstractExtension implements Serializable { | |||
} | |||
} | |||
/** | |||
* Event fired when a notification is closed. | |||
* | |||
* @since 8.2 | |||
*/ | |||
public static class CloseEvent extends ConnectorEvent { | |||
/** | |||
@@ -517,8 +521,10 @@ public class Notification extends AbstractExtension implements Serializable { | |||
/** | |||
* An interface used for listening to Notification close events. Add the | |||
* CloseListener to a Notification and | |||
* {@link CloseListener#notificationClose(CloseEvent)} will be called whenever the | |||
* Notification is closed. | |||
* {@link CloseListener#notificationClose(CloseEvent)} will be called | |||
* whenever the Notification is closed. | |||
* | |||
* @since 8.2 | |||
*/ | |||
@FunctionalInterface | |||
public interface CloseListener extends Serializable { |
@@ -1153,7 +1153,8 @@ public class Tree<T> extends Composite | |||
* @param row | |||
* zero based index of the item to scroll to in the current view. | |||
* @throws IllegalArgumentException | |||
* if the provided row is outside the item range | |||
* if the provided row is outside the item range | |||
* @since 8.2 | |||
*/ | |||
public void scrollTo(int row) throws IllegalArgumentException { | |||
treeGrid.scrollTo(row, ScrollDestination.ANY); | |||
@@ -1172,6 +1173,7 @@ public class Tree<T> extends Composite | |||
* {@code null} | |||
* @throws IllegalArgumentException | |||
* if the provided row is outside the item range | |||
* @since 8.2 | |||
*/ | |||
public void scrollTo(int row, ScrollDestination destination) { | |||
treeGrid.scrollTo(row, destination); | |||
@@ -1179,6 +1181,8 @@ public class Tree<T> extends Composite | |||
/** | |||
* Scrolls to the beginning of the first data row. | |||
* | |||
* @since 8.2 | |||
*/ | |||
public void scrollToStart() { | |||
treeGrid.scrollToStart(); | |||
@@ -1186,6 +1190,8 @@ public class Tree<T> extends Composite | |||
/** | |||
* Scrolls to the end of the last data row. | |||
* | |||
* @since 8.2 | |||
*/ | |||
public void scrollToEnd() { | |||
treeGrid.scrollToEnd(); |