From fe0954a97d9f826f5beda38ba6c46d1c224d1f22 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Fri, 12 Dec 2014 16:09:45 +0200 Subject: Rename client side SelectionChangeEvent (#13334) Change-Id: I317e7eaa0613e1ce87cef0f4e19f29110104ada7 --- .../vaadin/client/connectors/GridConnector.java | 12 +- client/src/com/vaadin/client/ui/grid/Grid.java | 20 +-- .../grid/selection/HasSelectionChangeHandlers.java | 43 ------ .../ui/grid/selection/HasSelectionHandlers.java | 42 +++++ .../ui/grid/selection/SelectionChangeEvent.java | 170 --------------------- .../ui/grid/selection/SelectionChangeHandler.java | 39 ----- .../client/ui/grid/selection/SelectionEvent.java | 170 +++++++++++++++++++++ .../client/ui/grid/selection/SelectionHandler.java | 39 +++++ .../client/ui/grid/selection/SelectionModel.java | 6 +- .../ui/grid/selection/SelectionModelMulti.java | 8 +- .../ui/grid/selection/SelectionModelSingle.java | 4 +- 11 files changed, 276 insertions(+), 277 deletions(-) delete mode 100644 client/src/com/vaadin/client/ui/grid/selection/HasSelectionChangeHandlers.java create mode 100644 client/src/com/vaadin/client/ui/grid/selection/HasSelectionHandlers.java delete mode 100644 client/src/com/vaadin/client/ui/grid/selection/SelectionChangeEvent.java delete mode 100644 client/src/com/vaadin/client/ui/grid/selection/SelectionChangeHandler.java create mode 100644 client/src/com/vaadin/client/ui/grid/selection/SelectionEvent.java create mode 100644 client/src/com/vaadin/client/ui/grid/selection/SelectionHandler.java (limited to 'client/src') diff --git a/client/src/com/vaadin/client/connectors/GridConnector.java b/client/src/com/vaadin/client/connectors/GridConnector.java index e076faeaaa..56903922bd 100644 --- a/client/src/com/vaadin/client/connectors/GridConnector.java +++ b/client/src/com/vaadin/client/connectors/GridConnector.java @@ -52,8 +52,8 @@ import com.vaadin.client.ui.grid.Renderer; import com.vaadin.client.ui.grid.events.SelectAllEvent; import com.vaadin.client.ui.grid.events.SelectAllHandler; import com.vaadin.client.ui.grid.selection.AbstractRowHandleSelectionModel; -import com.vaadin.client.ui.grid.selection.SelectionChangeEvent; -import com.vaadin.client.ui.grid.selection.SelectionChangeHandler; +import com.vaadin.client.ui.grid.selection.SelectionEvent; +import com.vaadin.client.ui.grid.selection.SelectionHandler; import com.vaadin.client.ui.grid.selection.SelectionModelMulti; import com.vaadin.client.ui.grid.selection.SelectionModelNone; import com.vaadin.client.ui.grid.selection.SelectionModelSingle; @@ -320,9 +320,9 @@ public class GridConnector extends AbstractHasComponentsConnector implements private RpcDataSource dataSource; - private SelectionChangeHandler internalSelectionChangeHandler = new SelectionChangeHandler() { + private SelectionHandler internalSelectionChangeHandler = new SelectionHandler() { @Override - public void onSelectionChange(SelectionChangeEvent event) { + public void onSelect(SelectionEvent event) { if (event.isBatchedSelection()) { return; } @@ -377,7 +377,7 @@ public class GridConnector extends AbstractHasComponentsConnector implements getWidget().setSelectionModel(selectionModel); - getWidget().addSelectionChangeHandler(internalSelectionChangeHandler); + getWidget().addSelectionHandler(internalSelectionChangeHandler); getWidget().addSortHandler(new SortHandler() { @Override @@ -785,7 +785,7 @@ public class GridConnector extends AbstractHasComponentsConnector implements // deselected row data. Some data is only stored as keys updatedFromState = true; getWidget().fireEvent( - new SelectionChangeEvent(getWidget(), + new SelectionEvent(getWidget(), (List) null, null, false)); } } diff --git a/client/src/com/vaadin/client/ui/grid/Grid.java b/client/src/com/vaadin/client/ui/grid/Grid.java index a930fcdc66..b9b9c3a623 100644 --- a/client/src/com/vaadin/client/ui/grid/Grid.java +++ b/client/src/com/vaadin/client/ui/grid/Grid.java @@ -89,9 +89,9 @@ import com.vaadin.client.ui.grid.events.SelectAllEvent; import com.vaadin.client.ui.grid.events.SelectAllHandler; import com.vaadin.client.ui.grid.renderers.ComplexRenderer; import com.vaadin.client.ui.grid.renderers.WidgetRenderer; -import com.vaadin.client.ui.grid.selection.HasSelectionChangeHandlers; -import com.vaadin.client.ui.grid.selection.SelectionChangeEvent; -import com.vaadin.client.ui.grid.selection.SelectionChangeHandler; +import com.vaadin.client.ui.grid.selection.HasSelectionHandlers; +import com.vaadin.client.ui.grid.selection.SelectionEvent; +import com.vaadin.client.ui.grid.selection.SelectionHandler; import com.vaadin.client.ui.grid.selection.SelectionModel; import com.vaadin.client.ui.grid.selection.SelectionModel.Multi; import com.vaadin.client.ui.grid.selection.SelectionModelMulti; @@ -156,7 +156,7 @@ import com.vaadin.shared.util.SharedUtil; * @author Vaadin Ltd */ public class Grid extends ResizeComposite implements - HasSelectionChangeHandlers, SubPartAware, DeferredWorker { + HasSelectionHandlers, SubPartAware, DeferredWorker { /** * Abstract base class for Grid header and footer sections. @@ -3359,12 +3359,12 @@ public class Grid extends ResizeComposite implements } }); - // Default action on SelectionChangeEvents. Refresh the body so changed + // Default action on SelectionEvents. Refresh the body so changed // become visible. - addSelectionChangeHandler(new SelectionChangeHandler() { + addSelectionHandler(new SelectionHandler() { @Override - public void onSelectionChange(SelectionChangeEvent event) { + public void onSelect(SelectionEvent event) { refreshBody(); } }); @@ -4959,9 +4959,9 @@ public class Grid extends ResizeComposite implements } @Override - public HandlerRegistration addSelectionChangeHandler( - final SelectionChangeHandler handler) { - return addHandler(handler, SelectionChangeEvent.getType()); + public HandlerRegistration addSelectionHandler( + final SelectionHandler handler) { + return addHandler(handler, SelectionEvent.getType()); } /** diff --git a/client/src/com/vaadin/client/ui/grid/selection/HasSelectionChangeHandlers.java b/client/src/com/vaadin/client/ui/grid/selection/HasSelectionChangeHandlers.java deleted file mode 100644 index 342c426b55..0000000000 --- a/client/src/com/vaadin/client/ui/grid/selection/HasSelectionChangeHandlers.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2000-2014 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.client.ui.grid.selection; - -import com.google.gwt.event.shared.HandlerRegistration; - -/** - * Marker interface for widgets that fires selection change events. - * - * @author Vaadin Ltd - * @since - */ -public interface HasSelectionChangeHandlers { - - /** - * Register a selection change handler. - *

- * This handler is called whenever a - * {@link com.vaadin.ui.components.grid.selection.SelectionModel - * SelectionModel} detects a change in selection state. - * - * @param handler - * a {@link SelectionChangeHandler} - * @return a handler registration object, which can be used to remove the - * handler. - */ - public HandlerRegistration addSelectionChangeHandler( - SelectionChangeHandler handler); - -} diff --git a/client/src/com/vaadin/client/ui/grid/selection/HasSelectionHandlers.java b/client/src/com/vaadin/client/ui/grid/selection/HasSelectionHandlers.java new file mode 100644 index 0000000000..1afdd016aa --- /dev/null +++ b/client/src/com/vaadin/client/ui/grid/selection/HasSelectionHandlers.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.client.ui.grid.selection; + +import com.google.gwt.event.shared.HandlerRegistration; + +/** + * Marker interface for widgets that fires selection events. + * + * @author Vaadin Ltd + * @since + */ +public interface HasSelectionHandlers { + + /** + * Register a selection change handler. + *

+ * This handler is called whenever a + * {@link com.vaadin.ui.components.grid.selection.SelectionModel + * SelectionModel} detects a change in selection state. + * + * @param handler + * a {@link SelectionHandler} + * @return a handler registration object, which can be used to remove the + * handler. + */ + public HandlerRegistration addSelectionHandler(SelectionHandler handler); + +} diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionChangeEvent.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionChangeEvent.java deleted file mode 100644 index 4bebaf0fbb..0000000000 --- a/client/src/com/vaadin/client/ui/grid/selection/SelectionChangeEvent.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2000-2014 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.client.ui.grid.selection; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import com.google.gwt.event.shared.GwtEvent; -import com.vaadin.client.ui.grid.Grid; - -/** - * Event object describing a change in Grid row selection state. - * - * @since - * @author Vaadin Ltd - */ -@SuppressWarnings("rawtypes") -public class SelectionChangeEvent extends GwtEvent { - - private static final Type eventType = new Type(); - - private final Grid grid; - private final List added; - private final List removed; - private final boolean batched; - - /** - * Creates an event with a single added or removed row. - * - * @param grid - * grid reference, used for getSource - * @param added - * the added row, or null if a row was not added - * @param removed - * the removed row, or null if a row was not removed - * @param batched - * whether or not this selection change event is triggered during - * a batched selection/deselection action - * @see SelectionModel.Multi.Batched - */ - public SelectionChangeEvent(Grid grid, T added, T removed, - boolean batched) { - this.grid = grid; - this.batched = batched; - - if (added != null) { - this.added = Collections.singletonList(added); - } else { - this.added = Collections.emptyList(); - } - - if (removed != null) { - this.removed = Collections.singletonList(removed); - } else { - this.removed = Collections.emptyList(); - } - } - - /** - * Creates an event where several rows have been added or removed. - * - * @param grid - * Grid reference, used for getSource - * @param added - * a collection of added rows, or null if no rows - * were added - * @param removed - * a collection of removed rows, or null if no rows - * were removed - * @param batched - * whether or not this selection change event is triggered during - * a batched selection/deselection action - * @see SelectionModel.Multi.Batched - */ - public SelectionChangeEvent(Grid grid, Collection added, - Collection removed, boolean batched) { - this.grid = grid; - this.batched = batched; - - if (added != null) { - this.added = new ArrayList(added); - } else { - this.added = Collections.emptyList(); - } - - if (removed != null) { - this.removed = new ArrayList(removed); - } else { - this.removed = Collections.emptyList(); - } - } - - /** - * Get a reference to the Grid object that fired this event. - * - * @return a grid reference - */ - @Override - public Grid getSource() { - return grid; - } - - /** - * Get all rows added to the selection since the last - * {@link SelectionChangeEvent}. - * - * @return a collection of added rows. Empty collection if no rows were - * added. - */ - public Collection getAdded() { - return Collections.unmodifiableCollection(added); - } - - /** - * Get all rows removed from the selection since the last - * {@link SelectionChangeEvent}. - * - * @return a collection of removed rows. Empty collection if no rows were - * removed. - */ - public Collection getRemoved() { - return Collections.unmodifiableCollection(removed); - } - - /** - * Gets a type identifier for this event. - * - * @return a {@link Type} identifier. - */ - public static Type getType() { - return eventType; - } - - @Override - public Type getAssociatedType() { - return eventType; - } - - @Override - @SuppressWarnings("unchecked") - protected void dispatch(SelectionChangeHandler handler) { - handler.onSelectionChange(this); - } - - /** - * Checks if this selection change event is fired during a batched - * selection/deselection operation. - * - * @return true iff this event is fired during a batched - * selection/deselection operation - */ - public boolean isBatchedSelection() { - return batched; - } -} diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionChangeHandler.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionChangeHandler.java deleted file mode 100644 index a469f5af1f..0000000000 --- a/client/src/com/vaadin/client/ui/grid/selection/SelectionChangeHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2000-2014 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.client.ui.grid.selection; - -import com.google.gwt.event.shared.EventHandler; - -/** - * Handler for {@link SelectionChangeEvent}s. - * - * @since - * @author Vaadin Ltd - * @param - * The row data type - */ -public interface SelectionChangeHandler extends EventHandler { - - /** - * Called when a selection model's selection state is changed. - * - * @param event - * a selection change event, containing info about rows that have - * been added to or removed from the selection. - */ - public void onSelectionChange(SelectionChangeEvent event); - -} diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionEvent.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionEvent.java new file mode 100644 index 0000000000..6a36474d12 --- /dev/null +++ b/client/src/com/vaadin/client/ui/grid/selection/SelectionEvent.java @@ -0,0 +1,170 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.client.ui.grid.selection; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import com.google.gwt.event.shared.GwtEvent; +import com.vaadin.client.ui.grid.Grid; + +/** + * Event object describing a change in Grid row selection state. + * + * @since + * @author Vaadin Ltd + */ +@SuppressWarnings("rawtypes") +public class SelectionEvent extends GwtEvent { + + private static final Type eventType = new Type(); + + private final Grid grid; + private final List added; + private final List removed; + private final boolean batched; + + /** + * Creates an event with a single added or removed row. + * + * @param grid + * grid reference, used for getSource + * @param added + * the added row, or null if a row was not added + * @param removed + * the removed row, or null if a row was not removed + * @param batched + * whether or not this selection change event is triggered during + * a batched selection/deselection action + * @see SelectionModel.Multi.Batched + */ + public SelectionEvent(Grid grid, T added, T removed, + boolean batched) { + this.grid = grid; + this.batched = batched; + + if (added != null) { + this.added = Collections.singletonList(added); + } else { + this.added = Collections.emptyList(); + } + + if (removed != null) { + this.removed = Collections.singletonList(removed); + } else { + this.removed = Collections.emptyList(); + } + } + + /** + * Creates an event where several rows have been added or removed. + * + * @param grid + * Grid reference, used for getSource + * @param added + * a collection of added rows, or null if no rows + * were added + * @param removed + * a collection of removed rows, or null if no rows + * were removed + * @param batched + * whether or not this selection change event is triggered during + * a batched selection/deselection action + * @see SelectionModel.Multi.Batched + */ + public SelectionEvent(Grid grid, Collection added, + Collection removed, boolean batched) { + this.grid = grid; + this.batched = batched; + + if (added != null) { + this.added = new ArrayList(added); + } else { + this.added = Collections.emptyList(); + } + + if (removed != null) { + this.removed = new ArrayList(removed); + } else { + this.removed = Collections.emptyList(); + } + } + + /** + * Get a reference to the Grid object that fired this event. + * + * @return a grid reference + */ + @Override + public Grid getSource() { + return grid; + } + + /** + * Get all rows added to the selection since the last + * {@link SelectionEvent}. + * + * @return a collection of added rows. Empty collection if no rows were + * added. + */ + public Collection getAdded() { + return Collections.unmodifiableCollection(added); + } + + /** + * Get all rows removed from the selection since the last + * {@link SelectionEvent}. + * + * @return a collection of removed rows. Empty collection if no rows were + * removed. + */ + public Collection getRemoved() { + return Collections.unmodifiableCollection(removed); + } + + /** + * Gets a type identifier for this event. + * + * @return a {@link Type} identifier. + */ + public static Type getType() { + return eventType; + } + + @Override + public Type getAssociatedType() { + return eventType; + } + + @Override + @SuppressWarnings("unchecked") + protected void dispatch(SelectionHandler handler) { + handler.onSelect(this); + } + + /** + * Checks if this selection change event is fired during a batched + * selection/deselection operation. + * + * @return true iff this event is fired during a batched + * selection/deselection operation + */ + public boolean isBatchedSelection() { + return batched; + } +} diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionHandler.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionHandler.java new file mode 100644 index 0000000000..0f687cfac3 --- /dev/null +++ b/client/src/com/vaadin/client/ui/grid/selection/SelectionHandler.java @@ -0,0 +1,39 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.client.ui.grid.selection; + +import com.google.gwt.event.shared.EventHandler; + +/** + * Handler for {@link SelectionEvent}s. + * + * @since + * @author Vaadin Ltd + * @param + * The row data type + */ +public interface SelectionHandler extends EventHandler { + + /** + * Called when a selection model's selection state is changed. + * + * @param event + * a selection event, containing info about rows that have been + * added to or removed from the selection. + */ + public void onSelect(SelectionEvent event); + +} diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionModel.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionModel.java index 9f81f8f5f2..cfbe76b707 100644 --- a/client/src/com/vaadin/client/ui/grid/selection/SelectionModel.java +++ b/client/src/com/vaadin/client/ui/grid/selection/SelectionModel.java @@ -141,10 +141,10 @@ public interface SelectionModel { * into one, and a final selection event will be fired when * {@link #commitBatchSelect()} is called. *

- * Note: {@link SelectionChangeEvent SelectionChangeEvents} + * Note: {@link SelectionEvent SelectionChangeEvents} * will still be fired for each selection/deselection. You should * check whether the event is a part of a batch or not with - * {@link SelectionChangeEvent#isBatchedSelection()}. + * {@link SelectionEvent#isBatchedSelection()}. */ public void startBatchSelect(); @@ -153,7 +153,7 @@ public interface SelectionModel { *

* Any and all selections and deselections since the last invocation * of {@link #startBatchSelect()} will be fired at once as one - * collated {@link SelectionChangeEvent}. + * collated {@link SelectionEvent}. */ public void commitBatchSelect(); diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionModelMulti.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionModelMulti.java index 177e3bdca8..a00376fa6e 100644 --- a/client/src/com/vaadin/client/ui/grid/selection/SelectionModelMulti.java +++ b/client/src/com/vaadin/client/ui/grid/selection/SelectionModelMulti.java @@ -107,7 +107,7 @@ public class SelectionModelMulti extends AbstractRowHandleSelectionModel @SuppressWarnings("unchecked") final LinkedHashSet> selectedRowsClone = (LinkedHashSet>) selectedRows .clone(); - SelectionChangeEvent event = new SelectionChangeEvent(grid, + SelectionEvent event = new SelectionEvent(grid, null, getSelectedRows(), isBeingBatchSelected()); selectedRows.clear(); @@ -139,7 +139,7 @@ public class SelectionModelMulti extends AbstractRowHandleSelectionModel } if (added.size() > 0) { - grid.fireEvent(new SelectionChangeEvent(grid, added, null, + grid.fireEvent(new SelectionEvent(grid, added, null, isBeingBatchSelected())); return true; @@ -163,7 +163,7 @@ public class SelectionModelMulti extends AbstractRowHandleSelectionModel } if (removed.size() > 0) { - grid.fireEvent(new SelectionChangeEvent(grid, null, removed, + grid.fireEvent(new SelectionEvent(grid, null, removed, isBeingBatchSelected())); return true; } @@ -244,7 +244,7 @@ public class SelectionModelMulti extends AbstractRowHandleSelectionModel } deselectionBatch.clear(); - grid.fireEvent(new SelectionChangeEvent(grid, added, removed, + grid.fireEvent(new SelectionEvent(grid, added, removed, isBeingBatchSelected())); } diff --git a/client/src/com/vaadin/client/ui/grid/selection/SelectionModelSingle.java b/client/src/com/vaadin/client/ui/grid/selection/SelectionModelSingle.java index 8778b65179..727da8d4af 100644 --- a/client/src/com/vaadin/client/ui/grid/selection/SelectionModelSingle.java +++ b/client/src/com/vaadin/client/ui/grid/selection/SelectionModelSingle.java @@ -83,7 +83,7 @@ public class SelectionModelSingle extends AbstractRowHandleSelectionModel T removed = getSelectedRow(); if (selectByHandle(grid.getDataSource().getHandle(row))) { - grid.fireEvent(new SelectionChangeEvent(grid, row, removed, + grid.fireEvent(new SelectionEvent(grid, row, removed, false)); return true; @@ -100,7 +100,7 @@ public class SelectionModelSingle extends AbstractRowHandleSelectionModel if (isSelected(row)) { deselectByHandle(selectedRow); - grid.fireEvent(new SelectionChangeEvent(grid, null, row, false)); + grid.fireEvent(new SelectionEvent(grid, null, row, false)); return true; } -- cgit v1.2.3