Skip to content

Commit

Permalink
Refactor Grid SelectionModels as extensions (#18624)
Browse files Browse the repository at this point in the history
This patch removes all selection related variables and API from several
core parts of Grid.

Change-Id: Idb7aa48fda69ded1ef58a69c1f7dbc78b7f52a54
  • Loading branch information
Teemu Suo-Anttila committed Sep 1, 2015
1 parent 9899aa2 commit 53a4b2c
Show file tree
Hide file tree
Showing 21 changed files with 1,135 additions and 415 deletions.
2 changes: 2 additions & 0 deletions WebContent/release-notes.html
Expand Up @@ -119,6 +119,8 @@ <h3 id="incompatible">Incompatible or Behavior-altering Changes in @version-mino
This may interfere with custom response compression solutions that do not respect the Content-Encoding response header.</li> This may interfere with custom response compression solutions that do not respect the Content-Encoding response header.</li>
<li>Unused methods related to the "out of sync" message have been removed from SystemMessages class.</li> <li>Unused methods related to the "out of sync" message have been removed from SystemMessages class.</li>
<li>All notifications use the WAI-ARIA alert role to be compatible with Jaws</li> <li>All notifications use the WAI-ARIA alert role to be compatible with Jaws</li>
<li>Grid SelectionModels are now Extensions. This update removes all selection related variables and API from
GridConnector, GridState, GridServerRpc and GridClientRpc</li>
</ul> </ul>
<h3 id="knownissues">Known Issues and Limitations</h3> <h3 id="knownissues">Known Issues and Limitations</h3>
<ul> <ul>
Expand Down
@@ -0,0 +1,82 @@
/*
* 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.connectors;

import java.util.Collection;

import com.vaadin.client.data.DataSource.RowHandle;
import com.vaadin.client.extensions.AbstractExtensionConnector;
import com.vaadin.client.widget.grid.selection.SelectionModel;
import com.vaadin.client.widgets.Grid;
import com.vaadin.shared.ui.grid.GridState;

import elemental.json.JsonObject;

/**
* Base class for all selection model connectors.
*
* @since
* @author Vaadin Ltd
*/
public abstract class AbstractSelectionModelConnector<T extends SelectionModel<JsonObject>>
extends AbstractExtensionConnector {

@Override
public GridConnector getParent() {
return (GridConnector) super.getParent();
}

protected Grid<JsonObject> getGrid() {
return getParent().getWidget();
}

protected RowHandle<JsonObject> getRowHandle(JsonObject row) {
return getGrid().getDataSource().getHandle(row);
}

protected String getRowKey(JsonObject row) {
return row != null ? getParent().getRowKey(row) : null;
}

protected abstract T createSelectionModel();

public abstract static class AbstractSelectionModel implements
SelectionModel<JsonObject> {

@Override
public boolean isSelected(JsonObject row) {
return row.hasKey(GridState.JSONKEY_SELECTED);
}

@Override
public void setGrid(Grid<JsonObject> grid) {
// NO-OP
}

@Override
public void reset() {
// Should not need any actions.
}

@Override
public Collection<JsonObject> getSelectedRows() {
throw new UnsupportedOperationException(
"This client-side selection model "
+ getClass().getSimpleName()
+ " does not know selected rows.");
}
}
}

0 comments on commit 53a4b2c

Please sign in to comment.