Remove DataSource removeDataChangeHandler() Change-Id: I07a92ad6e7d2c75ca8f53a3376d0b8157559cb70feature/vaadin8-book
@@ -18,6 +18,8 @@ package com.vaadin.server.communication.data.typed; | |||
import java.util.LinkedHashSet; | |||
import java.util.Set; | |||
import com.vaadin.event.handler.Registration; | |||
/** | |||
* Base class for AbstractDataSource. Provides tracking for | |||
* {@link DataChangeHandler}s and helper methods to call them. | |||
@@ -26,18 +28,15 @@ import java.util.Set; | |||
*/ | |||
public abstract class AbstractDataSource<T> implements DataSource<T> { | |||
protected Set<DataChangeHandler<T>> handlers = new LinkedHashSet<DataChangeHandler<T>>(); | |||
protected final Set<DataChangeHandler<T>> handlers = new LinkedHashSet<DataChangeHandler<T>>(); | |||
@Override | |||
public void addDataChangeHandler(DataChangeHandler<T> handler) { | |||
public Registration addDataChangeHandler(DataChangeHandler<T> handler) { | |||
if (handler != null) { | |||
handlers.add(handler); | |||
return () -> handlers.remove(handler); | |||
} | |||
} | |||
@Override | |||
public void removeDataChangeHandler(DataChangeHandler<T> handler) { | |||
handlers.remove(handler); | |||
return () -> { /* NO-OP */ }; | |||
} | |||
/** |
@@ -21,6 +21,7 @@ import java.util.HashSet; | |||
import java.util.LinkedHashSet; | |||
import java.util.Set; | |||
import com.vaadin.event.handler.Registration; | |||
import com.vaadin.server.AbstractExtension; | |||
import com.vaadin.server.ClientConnector; | |||
import com.vaadin.shared.data.DataRequestRpc; | |||
@@ -172,7 +173,7 @@ public abstract class DataProvider<T> extends AbstractExtension { | |||
protected DataProviderClientRpc rpc; | |||
protected DataSource<T> dataSource; | |||
private DataChangeHandler<T> dataChangeHandler; | |||
private Registration dataChangeHandler; | |||
private DetachListener detachListener; | |||
private DataKeyMapper<T> keyMapper; | |||
@@ -181,8 +182,8 @@ public abstract class DataProvider<T> extends AbstractExtension { | |||
this.dataSource = dataSource; | |||
rpc = getRpcProxy(DataProviderClientRpc.class); | |||
registerRpc(createRpc()); | |||
dataChangeHandler = createDataChangeHandler(); | |||
this.dataSource.addDataChangeHandler(dataChangeHandler); | |||
dataChangeHandler = this.dataSource | |||
.addDataChangeHandler(createDataChangeHandler()); | |||
keyMapper = createKeyMapper(); | |||
} | |||
@@ -242,7 +243,7 @@ public abstract class DataProvider<T> extends AbstractExtension { | |||
public DataKeyMapper<T> getKeyMapper() { | |||
return keyMapper; | |||
} | |||
public abstract void refresh(T data); | |||
/** | |||
@@ -311,7 +312,7 @@ public abstract class DataProvider<T> extends AbstractExtension { | |||
*/ | |||
protected void cleanUp() { | |||
if (dataSource != null) { | |||
dataSource.removeDataChangeHandler(dataChangeHandler); | |||
dataChangeHandler.removeHandler(); | |||
dataChangeHandler = null; | |||
} | |||
if (detachListener != null) { |
@@ -19,6 +19,8 @@ import java.io.Serializable; | |||
import java.util.Arrays; | |||
import java.util.Collection; | |||
import com.vaadin.event.handler.Registration; | |||
/** | |||
* Minimal DataSource API for communication between the DataProvider and a back | |||
* end service. | |||
@@ -53,15 +55,7 @@ public interface DataSource<T> extends Iterable<T>, Serializable { | |||
* @param handler | |||
* data change handler | |||
*/ | |||
void addDataChangeHandler(DataChangeHandler<T> handler); | |||
/** | |||
* Removed a DataChangeHandler from this DataSource. | |||
* | |||
* @param handler | |||
* data change handler | |||
*/ | |||
void removeDataChangeHandler(DataChangeHandler<T> handler); | |||
Registration addDataChangeHandler(DataChangeHandler<T> handler); | |||
/** | |||
* This method creates a new {@link ListDataSource} from a given Collection. |