Class AbstractClientConnector
- java.lang.Object
-
- com.vaadin.server.AbstractClientConnector
-
- All Implemented Interfaces:
MethodEventSource
,ClientConnector
,Connector
,Serializable
- Direct Known Subclasses:
AbstractComponent
,AbstractExtension
public abstract class AbstractClientConnector extends Object implements ClientConnector, MethodEventSource
An abstract base class for ClientConnector implementations. This class provides all the basic functionality required for connectors.- Since:
- 7.0.0
- Author:
- Vaadin Ltd
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.vaadin.server.ClientConnector
ClientConnector.AttachEvent, ClientConnector.AttachListener, ClientConnector.ConnectorErrorEvent, ClientConnector.DetachEvent, ClientConnector.DetachListener
-
-
Constructor Summary
Constructors Constructor Description AbstractClientConnector()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addAttachListener(ClientConnector.AttachListener listener)
void
addDetachListener(ClientConnector.DetachListener listener)
protected void
addExtension(Extension extension)
Add an extension to this connector.void
addListener(Class<?> eventType, Object target, Method method)
Registers a new listener with the specified activation method to listen events generated by this component.void
addListener(Class<?> eventType, Object target, String methodName)
Deprecated.As of 7.0.protected void
addListener(String eventIdentifier, Class<?> eventType, Object target, Method method)
Registers a new listener with the specified activation method to listen events generated by this component.protected void
addMethodInvocationToQueue(String interfaceName, Method method, Object[] parameters)
For internal use: adds a method invocation to the pending RPC call queue.void
attach()
Notifies the connector that it is connected to a VaadinSession (and therefore also to a UI).void
beforeClientResponse(boolean initial)
Called before the shared state and RPC invocations are sent to the client.protected SharedState
createState()
Creates the shared state bean to be used in server to client communication.void
detach()
Notifies the connector that it is detached from its VaadinSession.JsonObject
encodeState()
Called by the framework to encode the state to a JSONObject.boolean
equals(Object obj)
protected void
fireEvent(EventObject event)
Sends the event to all listeners.static Iterable<? extends ClientConnector>
getAllChildrenIterable(ClientConnector connector)
Get an Iterable for iterating over all child connectors, including both extensions and child components.String
getConnectorId()
Returns the id for this connector.ErrorHandler
getErrorHandler()
Gets the error handler for the connector.Collection<Extension>
getExtensions()
Get a read-only collection of all extensions attached to this connector.Collection<?>
getListeners(Class<?> eventType)
Returns all listeners that are registered for the given event type or one of its subclasses.protected Resource
getResource(String key)
Gets a resource defined usingsetResource(String, Resource)
with the corresponding key.ServerRpcManager<?>
getRpcManager(String rpcInterfaceName)
Returns the RPC manager instance to use when receiving calls for an RPC interface.protected <T extends ClientRpc>
TgetRpcProxy(Class<T> rpcInterface)
Returns an RPC proxy for a given server to client RPC interface for this component.protected VaadinSession
getSession()
Finds theVaadinSession
to which this connector belongs.protected SharedState
getState()
Returns the shared state for this connector.protected SharedState
getState(boolean markAsDirty)
Returns the shared state for this connector.Class<? extends SharedState>
getStateType()
Returns the type of the shared state for this connectorUI
getUI()
Finds a UI ancestor of this connector.boolean
handleConnectorRequest(VaadinRequest request, VaadinResponse response, String path)
Handle a request directed to this connector.int
hashCode()
protected boolean
hasListeners(Class<?> eventType)
Checks if the givenComponent.Event
type is listened for this component.boolean
isAttached()
Checks if the connector is attached to a VaadinSession.boolean
isConnectorEnabled()
Checks if the communicator is enabled.protected boolean
isThis(Object that)
Deprecated.only defined for framework hacks, do not use.void
markAsDirty()
Marks that this connector's state might have changed.void
markAsDirtyRecursive()
Causes this connector and all connectors below it to be marked as dirty.protected <T extends ServerRpc>
voidregisterRpc(T implementation)
Registers an RPC interface implementation for this component.protected <T extends ServerRpc>
voidregisterRpc(T implementation, Class<T> rpcInterfaceType)
Registers an RPC interface implementation for this component.void
removeAttachListener(ClientConnector.AttachListener listener)
void
removeDetachListener(ClientConnector.DetachListener listener)
void
removeExtension(Extension extension)
Remove an extension from this connector.void
removeListener(Class<?> eventType, Object target)
Removes all registered listeners matching the given parameters.void
removeListener(Class<?> eventType, Object target, Method method)
Removes one registered listener method.void
removeListener(Class<?> eventType, Object target, String methodName)
Deprecated.As of 7.0.protected void
removeListener(String eventIdentifier, Class<?> eventType, Object target)
Removes all registered listeners matching the given parameters.void
requestRepaint()
Deprecated.As of 7.0, usemarkAsDirty()
instead.void
requestRepaintAll()
Deprecated.As of 7.0, usemarkAsDirtyRecursive()
insteadList<ClientMethodInvocation>
retrievePendingRpcCalls()
Returns the list of pending server to client RPC calls and clears the list.void
setErrorHandler(ErrorHandler errorHandler)
Sets the error handler for the connector.protected void
setResource(String key, Resource resource)
Registers a resource with this connector using the given key.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.vaadin.server.ClientConnector
getParent
-
-
-
-
Method Detail
-
addAttachListener
public void addAttachListener(ClientConnector.AttachListener listener)
- Specified by:
addAttachListener
in interfaceClientConnector
-
removeAttachListener
public void removeAttachListener(ClientConnector.AttachListener listener)
- Specified by:
removeAttachListener
in interfaceClientConnector
-
addDetachListener
public void addDetachListener(ClientConnector.DetachListener listener)
- Specified by:
addDetachListener
in interfaceClientConnector
-
removeDetachListener
public void removeDetachListener(ClientConnector.DetachListener listener)
- Specified by:
removeDetachListener
in interfaceClientConnector
-
requestRepaint
@Deprecated public void requestRepaint()
Deprecated.As of 7.0, usemarkAsDirty()
instead. Note that you typically do not need to callmarkAsDirty()
asgetState()
will mark the connector dirty and the framework will then check what, if anything, needs to be sent to the client.LegacyComponent
s which rely on paint might still need to call this ormarkAsDirty()
.- Specified by:
requestRepaint
in interfaceClientConnector
-
markAsDirty
public void markAsDirty()
Description copied from interface:ClientConnector
Marks that this connector's state might have changed. When the framework is about to send new data to the client-side, it will runClientConnector.beforeClientResponse(boolean)
followed byClientConnector.encodeState()
for all connectors that are marked as dirty and send any updated state info to the client.- Specified by:
markAsDirty
in interfaceClientConnector
-
registerRpc
protected <T extends ServerRpc> void registerRpc(T implementation, Class<T> rpcInterfaceType)
Registers an RPC interface implementation for this component. A component can listen to multiple RPC interfaces, and subclasses can register additional implementations.- Parameters:
implementation
- RPC interface implementationrpcInterfaceType
- RPC interface class for which the implementation should be registered- Since:
- 7.0
-
registerRpc
protected <T extends ServerRpc> void registerRpc(T implementation)
Registers an RPC interface implementation for this component. A component can listen to multiple RPC interfaces, and subclasses can register additional implementations.- Parameters:
implementation
- RPC interface implementation. Also used to deduce the type.- Since:
- 7.0
-
getState
protected SharedState getState()
Returns the shared state for this connector. The shared state object is shared between the server connector and the client connector. Changes are only communicated from the server to the client and not in the other direction.As a side effect, marks the connector dirty so any changes done to the state will be sent to the client. Use
getState(false)
to avoid marking the connector as dirty.- Returns:
- The shared state for this connector. Never null.
-
getState
protected SharedState getState(boolean markAsDirty)
Returns the shared state for this connector.- Parameters:
markAsDirty
- true if the connector should automatically be marked dirty, false otherwise- Returns:
- The shared state for this connector. Never null.
- See Also:
getState()
-
encodeState
public JsonObject encodeState()
Description copied from interface:ClientConnector
Called by the framework to encode the state to a JSONObject. This is typically done by calling the static methodLegacyCommunicationManager.encodeState(ClientConnector, SharedState)
.- Specified by:
encodeState
in interfaceClientConnector
- Returns:
- a JSON object with the encoded connector state
-
createState
protected SharedState createState()
Creates the shared state bean to be used in server to client communication.By default a state object of the defined return type of
getState()
is created. Subclasses can override this method and return a new instance of the correct state class but this should rarely be necessary.No configuration of the values of the state should be performed in
createState()
.- Returns:
- new shared state object
- Since:
- 7.0
-
getStateType
public Class<? extends SharedState> getStateType()
Description copied from interface:ClientConnector
Returns the type of the shared state for this connector- Specified by:
getStateType
in interfaceClientConnector
- Returns:
- The type of the state. Must never return null.
-
getRpcProxy
protected <T extends ClientRpc> T getRpcProxy(Class<T> rpcInterface)
Returns an RPC proxy for a given server to client RPC interface for this component. TODO more javadoc, subclasses, ...- Parameters:
rpcInterface
- RPC interface type- Since:
- 7.0
-
addMethodInvocationToQueue
protected void addMethodInvocationToQueue(String interfaceName, Method method, Object[] parameters)
For internal use: adds a method invocation to the pending RPC call queue.- Parameters:
interfaceName
- RPC interface namemethod
- RPC methodparameters
- RPC all parameters- Since:
- 7.0
-
getRpcManager
public ServerRpcManager<?> getRpcManager(String rpcInterfaceName)
Description copied from interface:ClientConnector
Returns the RPC manager instance to use when receiving calls for an RPC interface.- Specified by:
getRpcManager
in interfaceClientConnector
- Parameters:
rpcInterfaceName
- name of the interface for which the call was made- Returns:
- ServerRpcManager or null if none found for the interface
-
retrievePendingRpcCalls
public List<ClientMethodInvocation> retrievePendingRpcCalls()
Description copied from interface:ClientConnector
Returns the list of pending server to client RPC calls and clears the list.- Specified by:
retrievePendingRpcCalls
in interfaceClientConnector
- Returns:
- an unmodifiable ordered list of pending server to client method calls (not null)
-
getConnectorId
public String getConnectorId()
Description copied from interface:Connector
Returns the id for this connector. This is set by the framework and does not change during the lifetime of a connector.- Specified by:
getConnectorId
in interfaceConnector
- Returns:
- The id for the connector.
-
getSession
protected VaadinSession getSession()
Finds theVaadinSession
to which this connector belongs. If the connector has not been attached,null
is returned.- Returns:
- The connector's session, or
null
if not attached
-
getUI
public UI getUI()
Finds a UI ancestor of this connector.null
is returned if no UI ancestor is found (typically because the connector is not attached to a proper hierarchy).- Specified by:
getUI
in interfaceClientConnector
- Returns:
- the UI ancestor of this connector, or
null
if none is found.
-
requestRepaintAll
@Deprecated public void requestRepaintAll()
Deprecated.As of 7.0, usemarkAsDirtyRecursive()
instead- Specified by:
requestRepaintAll
in interfaceClientConnector
-
markAsDirtyRecursive
public void markAsDirtyRecursive()
Description copied from interface:ClientConnector
Causes this connector and all connectors below it to be marked as dirty.This should only be used in special cases, e.g when the state of a descendant depends on the state of an ancestor.
- Specified by:
markAsDirtyRecursive
in interfaceClientConnector
- See Also:
ClientConnector.markAsDirty()
-
getAllChildrenIterable
public static Iterable<? extends ClientConnector> getAllChildrenIterable(ClientConnector connector)
Get an Iterable for iterating over all child connectors, including both extensions and child components.- Parameters:
connector
- the connector to get children for- Returns:
- an Iterable giving all child connectors.
-
getExtensions
public Collection<Extension> getExtensions()
Description copied from interface:ClientConnector
Get a read-only collection of all extensions attached to this connector.- Specified by:
getExtensions
in interfaceClientConnector
- Returns:
- a collection of extensions
-
addExtension
protected void addExtension(Extension extension)
Add an extension to this connector. This method is protected to allow extensions to select which targets they can extend.- Parameters:
extension
- the extension to add
-
removeExtension
public void removeExtension(Extension extension)
Description copied from interface:ClientConnector
Remove an extension from this connector.- Specified by:
removeExtension
in interfaceClientConnector
- Parameters:
extension
- the extension to remove.
-
isAttached
public boolean isAttached()
Description copied from interface:ClientConnector
Checks if the connector is attached to a VaadinSession.- Specified by:
isAttached
in interfaceClientConnector
- Returns:
- true if the connector is attached to a session, false otherwise
-
attach
public void attach()
Description copied from interface:ClientConnector
Notifies the connector that it is connected to a VaadinSession (and therefore also to a UI).The caller of this method is
#setParent(ClientConnector)
if the parent is itself already attached to the session. If not, the parent will call theClientConnector.attach()
for all its children when it is attached to the session. This method is always called before the connector's data is sent to the client-side for the first time.The attachment logic is implemented in
AbstractClientConnector
.- Specified by:
attach
in interfaceClientConnector
-
detach
public void detach()
Notifies the connector that it is detached from its VaadinSession.The caller of this method is
#setParent(ClientConnector)
if the parent is in the session. When the parent is detached from the session it is its responsibility to callClientConnector.detach()
for each of its children.The
getSession()
andgetUI()
methods might returnnull
after this method is called.- Specified by:
detach
in interfaceClientConnector
-
isConnectorEnabled
public boolean isConnectorEnabled()
Description copied from interface:ClientConnector
Checks if the communicator is enabled. An enabled communicator is allowed to receive messages from its counter-part.- Specified by:
isConnectorEnabled
in interfaceClientConnector
- Returns:
- true if the connector can receive messages, false otherwise
-
beforeClientResponse
public void beforeClientResponse(boolean initial)
Description copied from interface:ClientConnector
Called before the shared state and RPC invocations are sent to the client. Gives the connector an opportunity to set computed/dynamic state values or to invoke last minute RPC methods depending on other component features.- Specified by:
beforeClientResponse
in interfaceClientConnector
- Parameters:
initial
-true
if the client-side connector will be created and initialized after this method has been invoked.false
if there is already an initialized client-side connector.
-
handleConnectorRequest
public boolean handleConnectorRequest(VaadinRequest request, VaadinResponse response, String path) throws IOException
Description copied from interface:ClientConnector
Handle a request directed to this connector. This can be used by connectors to dynamically generate a response and it is also used internally when servingConnectorResource
s.Requests to
/APP/connector/[ui id]/[connector id]/
are routed to this method with the remaining part of the requested path available in the path parameter.NOTE that the session is not locked when this method is called. It is the responsibility of the connector to ensure that the session is locked while handling state or other session related data. For best performance the session should be unlocked before writing a large response to the client.
- Specified by:
handleConnectorRequest
in interfaceClientConnector
- Parameters:
request
- the request that should be handledresponse
- the response object to which the response should be writtenpath
- the requested relative path- Returns:
true
if the request has been handled,false
if no response has been written.- Throws:
IOException
- if there is a problem generating a response.
-
getResource
protected Resource getResource(String key)
Gets a resource defined usingsetResource(String, Resource)
with the corresponding key.- Parameters:
key
- the string identifier of the resource- Returns:
- a resource, or
null
if there's no resource associated with the given key - See Also:
setResource(String, Resource)
-
setResource
protected void setResource(String key, Resource resource)
Registers a resource with this connector using the given key. This will make the URL for retrieving the resource available to the client-side connector usingcom.vaadin.terminal.gwt.client.ui.AbstractConnector#getResourceUrl(String)
with the same key.- Parameters:
key
- the string key to associate the resource withresource
- the resource to set, ornull
to clear a previous association.
-
addListener
protected void addListener(String eventIdentifier, Class<?> eventType, Object target, Method method)
Registers a new listener with the specified activation method to listen events generated by this component. If the activation method does not have any arguments the event object will not be passed to it when it's called.
This method additionally informs the event-api to route events with the given eventIdentifier to the components handleEvent function call.
For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.- Parameters:
eventIdentifier
- the identifier of the event to listen foreventType
- the type of the listened event. Events of this type or its subclasses activate the listener.target
- the object instance who owns the activation method.method
- the activation method.- Since:
- 6.2
-
hasListeners
protected boolean hasListeners(Class<?> eventType)
Checks if the givenComponent.Event
type is listened for this component.- Parameters:
eventType
- the event type to be checked- Returns:
- true if a listener is registered for the given event type
-
removeListener
protected void removeListener(String eventIdentifier, Class<?> eventType, Object target)
Removes all registered listeners matching the given parameters. Since this method receives the event type and the listener object as parameters, it will unregister allobject
's methods that are registered to listen to events of typeeventType
generated by this component.This method additionally informs the event-api to stop routing events with the given eventIdentifier to the components handleEvent function call.
For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.- Parameters:
eventIdentifier
- the identifier of the event to stop listening foreventType
- the exact event type theobject
listens to.target
- the target object that has registered to listen to events of typeeventType
with one or more methods.- Since:
- 6.2
-
addListener
public void addListener(Class<?> eventType, Object target, Method method)
Registers a new listener with the specified activation method to listen events generated by this component. If the activation method does not have any arguments the event object will not be passed to it when it's called.
For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.- Specified by:
addListener
in interfaceMethodEventSource
- Parameters:
eventType
- the type of the listened event. Events of this type or its subclasses activate the listener.target
- the object instance who owns the activation method.method
- the activation method.
-
addListener
@Deprecated public void addListener(Class<?> eventType, Object target, String methodName)
Deprecated.As of 7.0. This method should be avoided. UseaddListener(Class, Object, Method)
oraddListener(String, Class, Object, Method)
instead.Convenience method for registering a new listener with the specified activation method to listen events generated by this component. If the activation method does not have any arguments the event object will not be passed to it when it's called.
This version of
addListener
gets the name of the activation method as a parameter. The actual method is reflected fromobject
, and unless exactly one match is found,java.lang.IllegalArgumentException
is thrown.For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.Note: Using this method is discouraged because it cannot be checked during compilation. Use
addListener(Class, Object, Method)
or#addListener(com.vaadin.ui.Component.Listener)
instead.- Specified by:
addListener
in interfaceMethodEventSource
- Parameters:
eventType
- the type of the listened event. Events of this type or its subclasses activate the listener.target
- the object instance who owns the activation method.methodName
- the name of the activation method.
-
removeListener
public void removeListener(Class<?> eventType, Object target)
Removes all registered listeners matching the given parameters. Since this method receives the event type and the listener object as parameters, it will unregister allobject
's methods that are registered to listen to events of typeeventType
generated by this component.For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.- Specified by:
removeListener
in interfaceMethodEventSource
- Parameters:
eventType
- the exact event type theobject
listens to.target
- the target object that has registered to listen to events of typeeventType
with one or more methods.
-
removeListener
public void removeListener(Class<?> eventType, Object target, Method method)
Removes one registered listener method. The given method owned by the given object will no longer be called when the specified events are generated by this component.For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.- Specified by:
removeListener
in interfaceMethodEventSource
- Parameters:
eventType
- the exact event type theobject
listens to.target
- target object that has registered to listen to events of typeeventType
with one or more methods.method
- the method owned bytarget
that's registered to listen to events of typeeventType
.
-
removeListener
@Deprecated public void removeListener(Class<?> eventType, Object target, String methodName)
Deprecated.As of 7.0. This method should be avoided. UseremoveListener(Class, Object, Method)
instead.Removes one registered listener method. The given method owned by the given object will no longer be called when the specified events are generated by this component.
This version of
removeListener
gets the name of the activation method as a parameter. The actual method is reflected fromtarget
, and unless exactly one match is found,java.lang.IllegalArgumentException
is thrown.For more information on the inheritable event mechanism see the
com.vaadin.event package documentation
.- Specified by:
removeListener
in interfaceMethodEventSource
- Parameters:
eventType
- the exact event type theobject
listens to.target
- the target object that has registered to listen to events of typeeventType
with one or more methods.methodName
- the name of the method owned bytarget
that's registered to listen to events of typeeventType
.
-
getListeners
public Collection<?> getListeners(Class<?> eventType)
Returns all listeners that are registered for the given event type or one of its subclasses.- Parameters:
eventType
- The type of event to return listeners for.- Returns:
- A collection with all registered listeners. Empty if no listeners are found.
-
fireEvent
protected void fireEvent(EventObject event)
Sends the event to all listeners.- Parameters:
event
- the Event to be sent to all listeners.
-
getErrorHandler
public ErrorHandler getErrorHandler()
Description copied from interface:ClientConnector
Gets the error handler for the connector. The error handler is dispatched whenever there is an error processing the data coming from the client to this connector.- Specified by:
getErrorHandler
in interfaceClientConnector
- Returns:
- The error handler or null if not set
-
setErrorHandler
public void setErrorHandler(ErrorHandler errorHandler)
Description copied from interface:ClientConnector
Sets the error handler for the connector. The error handler is dispatched whenever there is an error processing the data coming from the client for this connector.- Specified by:
setErrorHandler
in interfaceClientConnector
- Parameters:
errorHandler
- The error handler for this connector
-
isThis
@Deprecated protected boolean isThis(Object that)
Deprecated.only defined for framework hacks, do not use.For internal use only, may be changed or removed in future versions.This method must be protected, because otherwise it will not be redefined by the proxy to actually be called on the underlying instance.
See #14639
-
-