Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@
import com.vaadin.flow.component.shared.HasOverlayClassName;
import com.vaadin.flow.function.SerializableSupplier;
import com.vaadin.flow.internal.UsageStatistics;
import com.vaadin.flow.server.AbstractStreamResource;
import com.vaadin.flow.server.StreamResource;
import com.vaadin.flow.server.streams.DownloadHandler;

/**
Expand All @@ -48,33 +46,6 @@
public class CollaborationAvatarGroup extends Composite<AvatarGroup>
implements HasSize, HasStyle, HasTheme, HasOverlayClassName {

/**
* Callback for creating a stream resource with the image for a specific
* user. This allows loading the user image from a dynamic location such as
* a database.
*
* @see StreamResource
* @see CollaborationAvatarGroup#setImageProvider(ImageProvider)
* @since 1.0
* @deprecated Use {@link #setImageHandler(ImageHandler)} instead.
*/
@FunctionalInterface
@Deprecated(since = "6.5", forRemoval = true)
public interface ImageProvider {
/**
* Gets a stream resource that provides the avatar image for the given
* user.
*
* @param user
* the user for which to get a stream resource with the
* image, not <code>null</code>
* @return the stream resource to use for the image, or
* <code>null</code> to not show use any avatar image for the
* given user
*/
AbstractStreamResource getImageResource(UserInfo user);
}

/**
* Callback for creating a download handler for the avatar image for a
* specific user. This allows loading the user image from a dynamic location
Expand Down Expand Up @@ -109,8 +80,6 @@ public interface ImageHandler {

private String topicId;

private ImageProvider imageProvider;

private ImageHandler imageHandler;

private boolean ownAvatarVisible;
Expand Down Expand Up @@ -292,8 +261,6 @@ private AvatarGroupItem userToAvatarGroupItem(UserInfo user) {

if (imageHandler != null) {
item.setImageHandler(imageHandler.getDownloadHandler(user));
} else if (imageProvider != null) {
item.setImageResource(imageProvider.getImageResource(user));
} else {
item.setImage(user.getImage());
}
Expand All @@ -310,60 +277,6 @@ private boolean isNotLocalUser(UserInfo user) {
return !localUser.equals(user);
}

/**
* 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.
* <p>
* If no image callback is defined, then the image URL defined by
* {@link 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.
* <p>
*
* Usage example:
*
* <pre>
* collaborationAvatarGroup.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;
* });
* </pre>
*
* @param imageProvider
* the image provider to use, or <code>null</code> to use image
* URLs directly from the user info object
* @since 1.0
* @deprecated Use {@link #setImageHandler(ImageHandler)} instead.
*/
@Deprecated(since = "6.5", forRemoval = true)
public void setImageProvider(ImageProvider imageProvider) {
this.imageProvider = imageProvider;
refreshItems();
}

/**
* Gets the currently used image provider callback.
*
* @see #setImageProvider(ImageProvider)
*
* @return the current image provider callback, or <code>null</code> if no
* callback is set
* @since 1.0
* @deprecated Use {@link #setImageHandler(ImageHandler)} instead.
*/
@Deprecated(since = "6.5", forRemoval = true)
public ImageProvider getImageProvider() {
return imageProvider;
}

/**
* 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import java.util.stream.Collectors;

import com.vaadin.collaborationengine.CollaborationAvatarGroup.ImageHandler;
import com.vaadin.collaborationengine.CollaborationAvatarGroup.ImageProvider;
import com.vaadin.flow.component.Composite;
import com.vaadin.flow.component.HasSize;
import com.vaadin.flow.component.HasStyle;
Expand Down Expand Up @@ -69,8 +68,6 @@ public interface MessageConfigurator {

private final SerializableSupplier<CollaborationEngine> ceSupplier;

private ImageProvider imageProvider;

private ImageHandler imageHandler;

private final UserInfo localUser;
Expand Down Expand Up @@ -251,58 +248,6 @@ void appendMessage(String text) {
messageManager.submit(message);
}

/**
* 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.
* <p>
* If no image callback is defined, then the image URL defined by
* {@link 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.
* <p>
*
* Usage example:
*
* <pre>
* 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;
* });
* </pre>
*
* @param imageProvider
* the image provider to use, or <code>null</code> to use image
* URLs directly from the user info object
* @deprecated Use {@link #setImageHandler(ImageHandler)} instead.
*/
@Deprecated(since = "6.5", forRemoval = true)
public void setImageProvider(ImageProvider imageProvider) {
this.imageProvider = imageProvider;
refreshMessages();
}

/**
* Gets the currently used image provider callback.
*
* @see #setImageProvider(ImageProvider)
*
* @return the current image provider callback, or <code>null</code> if no
* callback is set
* @deprecated Use {@link #setImageHandler(ImageHandler)} instead.
*/
@Deprecated(since = "6.5", forRemoval = true)
public ImageProvider getImageProvider() {
return imageProvider;
}

/**
* 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
Expand Down Expand Up @@ -450,9 +395,6 @@ private MessageListItem convertToMessageListItem(
if (imageHandler != null) {
messageListItem.setUserImageHandler(
imageHandler.getDownloadHandler(message.getUser()));
} else if (imageProvider != null) {
messageListItem.setUserImageResource(
imageProvider.getImageResource(message.getUser()));
} else {
messageListItem.setUserImage(message.getUser().getImage());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.vaadin.collaborationengine.CollaborationAvatarGroup.ImageProvider;
import com.vaadin.collaborationengine.CollaborationAvatarGroup.ImageHandler;

/**
* User information of a collaborating user, used with various features of the
Expand Down Expand Up @@ -73,7 +73,7 @@ public UserInfo(String userId, String name) {
* If this user info is given to a {@link CollaborationAvatarGroup}, the
* image URL is used to load the user's avatar. Alternatively, the user
* images can be loaded from a backend to the avatar group with
* {@link CollaborationAvatarGroup#setImageProvider(ImageProvider)}.
* {@link CollaborationAvatarGroup#setImageHandler(ImageHandler)}.
*
*
* @param userId
Expand Down Expand Up @@ -177,7 +177,7 @@ public String getImage() {
* If this user info is given to a {@link CollaborationAvatarGroup}, the
* image URL is used to load the user's avatar. Alternatively, the user
* images can be loaded from a backend to the avatar group with
* {@link CollaborationAvatarGroup#setImageProvider(ImageProvider)}.
* {@link CollaborationAvatarGroup#setImageHandler(ImageHandler)}.
*
* @param imageUrl
* the image URL to set
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import com.vaadin.collaborationengine.util.MockService;
import com.vaadin.collaborationengine.util.MockUI;
import com.vaadin.collaborationengine.util.ReflectionUtils;
import com.vaadin.collaborationengine.util.TestStreamResource;
import com.vaadin.collaborationengine.util.TestUtils;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.avatar.Avatar;
Expand Down Expand Up @@ -358,77 +357,6 @@ public void avatarGroup_replicateRelevantAPIs() {
}
}

@Test
public void imageProvider_beforeAttach_streamResourceIsUsed() {
UI.setCurrent(client1.ui);
client1.group.setImageProvider(
user -> new TestStreamResource(user.getName()));
client1.attach();
client2.attach();

List<AvatarGroupItem> items = client1.getItems();
assertEquals(2, items.size());
AvatarGroupItem item = items.get(1);

Assert.assertThat(item.getImage(),
CoreMatchers.startsWith("VAADIN/dynamic"));
assertEquals("name2", item.getImageResource().getName());
}

@Test
public void imageProvider_afterAttach_streamResourceIsUsed() {
UI.setCurrent(client1.ui);
client1.attach();
client2.attach();

client1.group.setImageProvider(
user -> new TestStreamResource(user.getName()));

List<AvatarGroupItem> items = client1.getItems();
assertEquals(2, items.size());

AvatarGroupItem item = items.get(1);

Assert.assertThat(item.getImage(),
CoreMatchers.startsWith("VAADIN/dynamic"));
assertEquals("name2", item.getImageResource().getName());
}

@Test
public void imageProvider_nullStream_noImage() {
UI.setCurrent(client1.ui);
client1.attach();
client2.attach();

client1.group.setImageProvider(user -> null);

List<AvatarGroupItem> items = client1.getItems();
assertEquals(2, items.size());

AvatarGroupItem item = items.get(1);

Assert.assertNull(item.getImage());
Assert.assertNull(item.getImageResource());
}

@Test
public void imageProvider_clearProvider_imageIsSetFromUserInfo() {
UI.setCurrent(client1.ui);
client1.group.setImageProvider(
user -> new TestStreamResource(user.getName()));
client1.attach();
client2.attach();

client1.group.setImageProvider(null);

List<AvatarGroupItem> items = client1.getItems();
assertEquals(2, items.size());
AvatarGroupItem item = items.get(1);

Assert.assertNull(item.getImageResource());
assertEquals("image2", item.getImage());
}

@Test
public void imageHandler_beforeAttach_downloadHandlerIsUsed() {
UI.setCurrent(client1.ui);
Expand Down
Loading