Browse Source

Provide a convenience method to get items set via setItems().

Fixes #8357
tags/8.0.0.rc1
Denis 7 years ago
parent
commit
32cfd09280

+ 0
- 7
server/src/main/java/com/vaadin/data/HasDataProvider.java View File

@@ -36,13 +36,6 @@ import com.vaadin.data.provider.DataProvider;
*/
public interface HasDataProvider<T> extends HasItems<T> {

/**
* Returns the source of data items used by this listing.
*
* @return the data provider, not null
*/
public DataProvider<T, ?> getDataProvider();

/**
* Sets the data provider for this listing. The data provider is queried for
* displayed items as needed.

+ 0
- 7
server/src/main/java/com/vaadin/data/HasFilterableDataProvider.java View File

@@ -37,13 +37,6 @@ import com.vaadin.server.SerializableFunction;
*/
public interface HasFilterableDataProvider<T, F> extends HasItems<T> {

/**
* Returns the source of data items used by this listing.
*
* @return the data provider, not <code>null</code>
*/
public DataProvider<T, ?> getDataProvider();

/**
* Sets the data provider for this listing. The data provider is queried for
* displayed items as needed.

+ 65
- 1
server/src/main/java/com/vaadin/data/HasItems.java View File

@@ -22,6 +22,8 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.vaadin.data.provider.BackEndDataProvider;
import com.vaadin.data.provider.DataProvider;
import com.vaadin.data.provider.ListDataProvider;
import com.vaadin.ui.Component;

/**
@@ -33,9 +35,33 @@ import com.vaadin.ui.Component;
* the type of the displayed item
*/
public interface HasItems<T> extends Component, Serializable {

/**
* Returns the source of data items used by this listing.
*
* @return the data provider, not null
*/
public DataProvider<T, ?> getDataProvider();

/**
* Sets the data items of this component provided as a collection.
* <p>
* The provided items are wrapped into a {@link ListDataProvider} and this
* instance is used as a data provider for the
* {@link #setDataProvider(DataProvider)} method. It means that the items
* collection can be accessed later on via
* {@link ListDataProvider#getItems()}:
*
* <pre>
* <code>
* HasDataProvider<String> listing = new CheckBoxGroup<>();
* listing.setItems(Arrays.asList("a","b"));
* ...
*
* Collection<String> collection = ((ListDataProvider<String>)listing.getDataProvider()).getItems();
* </code>
* </pre>
* <p>
* The provided collection instance may be used as-is. Subsequent
* modification of the collection might cause inconsistent data to be shown
* in the component unless it is explicitly instructed to read the data
@@ -49,7 +75,26 @@ public interface HasItems<T> extends Component, Serializable {

/**
* Sets the data items of this listing.
*
* <p>
* The provided items are wrapped into a {@link ListDataProvider} and this
* instance is used as a data provider for the
* {@link #setDataProvider(DataProvider)} method. It means that the items
* collection can be accessed later on via
* {@link ListDataProvider#getItems()}:
*
* <pre>
* <code>
* HasDataProvider<String> listing = new CheckBoxGroup<>();
* listing.setItems(Arrays.asList("a","b"));
* ...
*
* Collection<String> collection = ((ListDataProvider<String>)listing.getDataProvider()).getItems();
* </code>
* </pre>
* <p>
*
* @see #setItems(Collection)
*
* @param items
* the data items to display
*/
@@ -65,6 +110,25 @@ public interface HasItems<T> extends Component, Serializable {
* instead of its array and Collection variations, doesn't save any memory.
* If you have a large data set to bind, using a lazy data provider is
* recommended. See {@link BackEndDataProvider} for more info.
* <p>
* The provided items are wrapped into a {@link ListDataProvider} and this
* instance is used as a data provider for the
* {@link #setDataProvider(DataProvider)} method. It means that the items
* collection can be accessed later on via
* {@link ListDataProvider#getItems()}:
*
* <pre>
* <code>
* HasDataProvider<String> listing = new CheckBoxGroup<>();
* listing.setItems(Arrays.asList("a","b"));
* ...
*
* Collection<String> collection = ((ListDataProvider<String>)listing.getDataProvider()).getItems();
* </code>
* </pre>
* <p>
*
* @see #setItems(Collection)
*
* @param streamOfItems
* the stream of data items to display, not {@code null}

+ 9
- 0
server/src/main/java/com/vaadin/data/provider/ListDataProvider.java View File

@@ -72,6 +72,15 @@ public class ListDataProvider<T>
sortOrder = null;
}

/**
* Returns the underlying data items.
*
* @return the underlying data items
*/
public Collection<T> getItems() {
return backend;
}

@Override
public Stream<T> fetch(Query<T, SerializablePredicate<T>> query) {
Stream<T> stream = getFilteredStream(query);

+ 11
- 0
server/src/test/java/com/vaadin/ui/AbstractMultiSelectTest.java View File

@@ -39,6 +39,7 @@ import org.junit.runners.Parameterized.Parameters;
import org.mockito.Mockito;

import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.data.provider.DataProvider;
import com.vaadin.event.selection.MultiSelectionEvent;
import com.vaadin.event.selection.MultiSelectionListener;
import com.vaadin.server.ServerRpcManager;
@@ -268,6 +269,11 @@ public class AbstractMultiSelectTest<S extends AbstractMultiSelect<String>> {
throw new UnsupportedOperationException(
"Not implemented for this test");
}

@Override
public DataProvider<String, ?> getDataProvider() {
return null;
}
};

Assert.assertSame(set, select.getValue());
@@ -337,6 +343,11 @@ public class AbstractMultiSelectTest<S extends AbstractMultiSelect<String>> {
throw new UnsupportedOperationException(
"Not implemented for this test");
}

@Override
public DataProvider<String, ?> getDataProvider() {
return null;
}
};

AtomicReference<ValueChangeEvent<?>> event = new AtomicReference<>();

+ 5
- 0
server/src/test/java/com/vaadin/ui/AbstractSingleSelectTest.java View File

@@ -272,6 +272,11 @@ public class AbstractSingleSelectTest {
throw new UnsupportedOperationException(
"Not needed in this test");
}

@Override
public DataProvider<String, ?> getDataProvider() {
return null;
}
};

AtomicReference<ValueChangeEvent<?>> event = new AtomicReference<>();

Loading…
Cancel
Save