com.vaadin.collaborationengine.

Class CollaborationMessageList

All Implemented Interfaces:

AttachNotifier, DetachNotifier, HasElement, HasSize, HasStyle, Serializable

public class CollaborationMessageList extends Composite<MessageList> implements HasSize, HasStyle

Extension of the MessageList component which integrates with the CollaborationEngine. It reads the messages from a topic and renders them within the component. The list is automatically updated when new messages are available. You can use the CollaborationMessageInput component for submitting messages.

Since:

3.1

Author:

Vaadin Ltd

See Also:

  • Constructor Details

    • CollaborationMessageList

      public CollaborationMessageList(UserInfo localUser, String topicId)

      Creates a new collaboration message list component with the provided topic id.

      It renders messages received by a CollaborationMessageInput or a custom submitter component connected to this list via setSubmitter(CollaborationMessageSubmitter)

      If a null topic id is provided, the component won't display any messages, until connecting to a non-null topic with setTopic(String).

      Parameters:

      localUser - the information of the end user, not null

      topicId - the id of the topic to connect to, or null to not connect the component to any topic

    • CollaborationMessageList

      public CollaborationMessageList(UserInfo localUser, String topicId, CollaborationMessagePersister persister)

      Creates a new collaboration message list component with the provided topic id and persister of CollaborationMessage items from/to an external source (e.g. a database).

      It renders messages received by a CollaborationMessageInput or a custom submitter component connected to this list via setSubmitter(CollaborationMessageSubmitter)

      If a null topic id is provided, the component won't display any messages, until connecting to a non-null topic with setTopic(String).

      Parameters:

      localUser - the information of the end user, not null

      topicId - the id of the topic to connect to, or null to not connect the component to any topic

      persister - the persister to read/write messages to an external source

  • Method Details

    • setTopic

      public void setTopic(String topicId)

      Sets the topic to use with this component. The connection to the previous topic (if any) and existing messages are removed. A connection to the new topic is opened and the list of messages in the new topic are populated to this component.

      If the topic id is null, no messages will be displayed.

      Parameters:

      topicId - the topic id to use, or null to not use any topic

    • setSubmitter

      public void setSubmitter(CollaborationMessageSubmitter submitter)

      Sets a submitter to handle the append of messages to the list. It can be used to connect a custom input component as an alternative to the provided CollaborationMessageInput. If set to null the existing submitter will be disconnected from the list.

      Parameters:

      submitter - the submitter, or null to remove the current submitter

    • setImageProvider

      @Deprecated(since="6.5", forRemoval=true) public void setImageProvider(CollaborationAvatarGroup.ImageProvider imageProvider)
      Deprecated, for removal: This API element is subject to removal in a future version.

      Sets an image provider callback for dynamically loading avatar images for a given user. The image can be loaded on-demand from a database or using any other source of IO streams.

      If no image callback is defined, then the image URL defined by UserInfo.getImage() is directly passed to the browser. This means that avatar images need to be available as static files or served dynamically from a custom servlet. This is the default.

      Usage example:

       collaborationMessageList.setImageProvider(userInfo -> {
           StreamResource streamResource = new StreamResource(
                   "avatar_" + userInfo.getId(), () -> {
                       User userEntity = userRepository
                               .findById(userInfo.getId());
                       byte[] profilePicture = userEntity.getProfilePicture();
                       return new ByteArrayInputStream(profilePicture);
                   });
           streamResource.setContentType("image/png");
           return streamResource;
       });
       

      Parameters:

      imageProvider - the image provider to use, or null to use image URLs directly from the user info object

    • getImageProvider

      @Deprecated(since="6.5", forRemoval=true) public CollaborationAvatarGroup.ImageProvider getImageProvider()
      Deprecated, for removal: This API element is subject to removal in a future version.

      Gets the currently used image provider callback.

      Returns:

      the current image provider callback, or null if no callback is set

      See Also:

    • setImageHandler

      public void setImageHandler(CollaborationAvatarGroup.ImageHandler imageHandler)

      Sets an image handler callback for dynamically loading avatar images for a given user. The image can be loaded on-demand from a database or using any other source of IO streams.

      If no image handler is defined, then the image URL defined by UserInfo.getImage() is directly passed to the browser. This means that avatar images need to be available as static files or served dynamically from a custom servlet. This is the default. Usage example:

       collaborationMessageList.setImageHandler(userInfo -> {
           DownloadHandler downloadHandler = DownloadHandler
                   .fromInputStream(context -> {
                       User userEntity = userRepository
                               .findById(userInfo.getId());
                       byte[] profilePicture = userEntity.getProfilePicture();
                       return new DownloadResponse(
                               new ByteArrayInputStream(profilePicture),
                               "avatar_" + userInfo.getId(), "image/png", -1);
                   });
           return downloadHandler;
       });
       

      Parameters:

      imageHandler - the image handler to use, or null to use image URLs directly from the user info object

      Since:

      6.5

    • getImageHandler

      public CollaborationAvatarGroup.ImageHandler getImageHandler()

      Gets the currently used image handler callback.

      Returns:

      the current image handler callback, or null if no callback is set

      Since:

      6.5

      See Also:

    • setMessageConfigurator

      public void setMessageConfigurator(CollaborationMessageList.MessageConfigurator messageConfigurator)

      Sets a configurator callback for the messages. It can be used for customizing the properties of the MessageListItem objects after the component has generated them, before sending them to the user's browser.

      Usage example:

       messageList.setMessageConfigurator((message, user) -> {
           message.setUserName(user.getName().toUpperCase());
       });
       

      Parameters:

      messageConfigurator - the configurator to set, or null to remove the current configurator

    • getMessageConfigurator

      public CollaborationMessageList.MessageConfigurator getMessageConfigurator()

      Gets the current message configurator, if any.

      Returns:

      the current message configurator, or null if none has been set

      See Also:

    • setMarkdown

      public void setMarkdown(boolean markdown)

      Wrapper method for MessageList.setMarkdown(boolean). Sets whether the messages should be parsed as markdown. By default this is set to false.

      Parameters:

      markdown - true if the message text is parsed as Markdown.

    • isMarkdown

      public boolean isMarkdown()

      Wrapper method for MessageList.isMarkdown(). Returns whether the messages are parsed as markdown.

      Returns:

      true if the message text is parsed as Markdown.

    • setAnnounceMessages

      public void setAnnounceMessages(boolean announceMessages)

      Wrapper method for MessageList.setAnnounceMessages(boolean). When set to true, new messages are announced to assistive technologies using ARIA live regions. By default, this is set to false.

      Parameters:

      announceMessages - true if new messages should be announced to assistive technologies.

    • isAnnounceMessages

      public boolean isAnnounceMessages()

      Wrapper method for MessageList.isAnnounceMessages(). Returns whether new messages are announced to assistive technologies.

      Returns:

      true if new messages are announced to assistive technologies.