Introduced fullscreen viewer for home, moved necessary media classes to sse

This commit is contained in:
Papick Garcia Taboada committed 2015-05-26 17:09:52 +02:00
1 parent 2bce767cf8
commit 1e0f861344
52 files changed
+309 -201

No files matched your search

@@ -1,6 +1,6 @@
package com.sap.sailing.domain.common.impl;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sse.common.media.ImageSize;
public class ImageSizeImpl implements ImageSize {
private static final long serialVersionUID = 1170701774852068780L;
@@ -1,5 +0,0 @@
package com.sap.sailing.domain.common.media;
public enum MediaCategory {
highlight, livestream;
}
@@ -8,6 +8,8 @@ import java.util.Set;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.media.MediaSubType;
import com.sap.sse.common.media.MimeType;
/**
* See http://my.opera.com/core/blog/2010/03/03/everything-you-need-to-know-about-html5-video-and-audio-2
@@ -6,9 +6,9 @@ import java.util.Set;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.media.MimeType;
/**
* Offers CRUD methods for mongo representation of media track objects.
@@ -19,12 +19,12 @@ import com.mongodb.WriteConcern;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.persistence.media.MediaDB;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
/**
* MongoDB Java API examples: http://blog.rasc.ch/?p=1096
@@ -3,11 +3,11 @@ package com.sap.sailing.domain.base;
import java.net.URL;
import java.util.concurrent.ExecutionException;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.common.Renamable;
import com.sap.sse.common.Named;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.WithID;
import com.sap.sse.common.media.ImageSize;
/**
* Base interface for an Event consisting of all static information, which might be shared
@@ -9,8 +9,8 @@ import java.util.concurrent.ExecutionException;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.media.ImageSize;
/**
* A simplified implementation of the {@link EventBase} interface which maintains an immutable collection of
@@ -19,8 +19,8 @@ import org.junit.Test;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.impl.EventImpl;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.common.impl.ImageSizeImpl;
import com.sap.sse.common.media.ImageSize;
public class CalculateImageSizeFromUrlTest {
@@ -4,8 +4,8 @@ import java.net.URL;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sse.common.media.ImageSize;
/**
* An event is a group of {@link Regatta regattas} carried out at a common venue within a common time frame. For
@@ -26,11 +26,11 @@ import javax.imageio.stream.ImageInputStream;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.common.impl.ImageSizeImpl;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.media.ImageSize;
public class EventImpl extends EventBaseImpl implements Event {
private static final long serialVersionUID = 855135446595485715L;
@@ -12,8 +12,9 @@ import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.VideoMetadataDTO;
import com.sap.sailing.gwt.home.client.shared.media.SailingFullscreenViewer;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
import com.sap.sse.gwt.client.controls.carousel.ImageCarousel;
public class MainMedia extends Composite {
@@ -27,7 +28,7 @@ public class MainMedia extends Composite {
DivElement videoLightBoxData;
@UiField
ImageCarousel imageCarousel;
ImageCarousel<SailingImageDTO> imageCarousel;
interface MainMediaUiBinder extends UiBinder<Widget, MainMedia> {
}
@@ -37,20 +38,21 @@ public class MainMedia extends Composite {
public MainMedia(PlaceNavigator navigator) {
MainMediaResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
imageCarousel.registerFullscreenViewer(new SailingFullscreenViewer());
}
public void setData(Collection<VideoMetadataDTO> videos, ArrayList<ImageMetadataDTO> photos) {
Iterator<VideoMetadataDTO> videoIterator = videos.iterator();
public void setData(Collection<SailingVideoDTO> videos, ArrayList<SailingImageDTO> photos) {
Iterator<SailingVideoDTO> videoIterator = videos.iterator();
int videoCount = 0;
while(videoCount < MAX_VIDEO_COUNT && videoIterator.hasNext()) {
VideoMetadataDTO videoDTO = videoIterator.next();
SailingVideoDTO videoDTO = videoIterator.next();
MainMediaVideo video = new MainMediaVideo(videoDTO.getTitle(), videoDTO.getSourceRef(),
videoDTO.getMimeType());
videosPanel.add(video);
videoCount++;
}
for (ImageMetadataDTO image : photos) {
imageCarousel.addImage(image.getSourceRef(), image.getHeightInPx(), image.getWidthInPx());
for (SailingImageDTO image : photos) {
imageCarousel.addImage(image);
}
}
}
@@ -9,10 +9,10 @@ import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.gwt.home.client.shared.LongNamesUtil;
import com.sap.sailing.gwt.ui.client.media.VideoJSPlayer;
import com.sap.sailing.gwt.ui.shared.media.VideoMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
import com.sap.sse.common.media.MimeType;
public class MainMediaVideo extends Composite {
@@ -64,7 +64,7 @@ public class MainMediaVideo extends Composite {
}
public void show(VideoMetadataDTO videoCandidateInfo) {
public void show(SailingVideoDTO videoCandidateInfo) {
vJs.setSource(videoCandidateInfo.getSourceRef(), videoCandidateInfo.getMimeType());
}
@@ -17,9 +17,9 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.media.GalleryImageHolder;
import com.sap.sailing.gwt.ui.client.media.VideoJSPlayer;
import com.sap.sailing.gwt.ui.client.media.VideoThumbnail;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.MediaDTO;
import com.sap.sailing.gwt.ui.shared.media.VideoMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
public class MediaPage extends Composite {
private static MediaPageUiBinder uiBinder = GWT.create(MediaPageUiBinder.class);
@@ -85,7 +85,7 @@ public class MediaPage extends Composite {
break;
}
for (final ImageMetadataDTO holder : media.getPhotos()) {
for (final SailingImageDTO holder : media.getPhotos()) {
if (holder.getSourceRef() != null) {
GalleryImageHolder gih = new GalleryImageHolder(holder);
@@ -96,7 +96,7 @@ public class MediaPage extends Composite {
gih.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
new FullscreenViewer(holder, media.getPhotos());
new SailingFullscreenViewer().show(holder, media.getPhotos());
}
});
}
@@ -113,7 +113,7 @@ public class MediaPage extends Composite {
videoListOuterBoxUi.addClassName(res.mediaCss().large3());
}
boolean first = true;
for (final VideoMetadataDTO videoCandidateInfo : media.getVideos()) {
for (final SailingVideoDTO videoCandidateInfo : media.getVideos()) {
if (first) {
putVideoOnDisplay(videoCandidateInfo, false);
first = false;
@@ -137,7 +137,7 @@ public class MediaPage extends Composite {
}
}
private void putVideoOnDisplay(final VideoMetadataDTO videoCandidateInfo, boolean autoplay) {
private void putVideoOnDisplay(final SailingVideoDTO videoCandidateInfo, boolean autoplay) {
videoDisplayUi = new VideoJSPlayer(true, autoplay);
videoDisplayUi.setSource(videoCandidateInfo.getSourceRef(), videoCandidateInfo.getMimeType());
videoDisplayHolderUi.setWidget(videoDisplayUi);
@@ -15,9 +15,10 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.PopupPanel.PositionCallback;
import com.google.gwt.user.client.ui.RootPanel;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
import com.sap.sse.gwt.client.controls.carousel.ImageCarousel.FullscreenViewer;
public class FullscreenViewer {
public class SailingFullscreenViewer implements FullscreenViewer<SailingImageDTO> {
private PopupPanel popup = new PopupPanel(true) {
protected void onPreviewNativeEvent(NativePreviewEvent event) {
if (event.getTypeInt() == Event.ONKEYDOWN && event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) {
@@ -26,8 +27,8 @@ public class FullscreenViewer {
};
};
public FullscreenViewer(ImageMetadataDTO selected, List<ImageMetadataDTO> images) {
final GalleryPlayer viewer = new GalleryPlayer(selected, images);
public void show(SailingImageDTO selected, List<SailingImageDTO> images) {
final SailingGalleryPlayer viewer = new SailingGalleryPlayer(selected, images);
Window.addResizeHandler(new ResizeHandler() {
@Override
@@ -63,4 +64,5 @@ public class FullscreenViewer {
}
});
}
}
@@ -15,14 +15,14 @@ import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
import com.sap.sse.gwt.client.controls.carousel.ImageCarousel;
public class GalleryPlayer extends ResizeComposite {
private static GalleryPlayerUiBinder uiBinder = GWT.create(GalleryPlayerUiBinder.class);
public class SailingGalleryPlayer extends ResizeComposite {
private static MyBinder uiBinder = GWT.create(MyBinder.class);
private Command closeCommand;
interface GalleryPlayerUiBinder extends UiBinder<Widget, GalleryPlayer> {
interface MyBinder extends UiBinder<Widget, SailingGalleryPlayer> {
}
@UiField
@@ -30,19 +30,19 @@ public class GalleryPlayer extends ResizeComposite {
@UiField
DivElement subSliderUi;
ImageCarousel carousel = new ImageCarousel();
ImageCarousel<SailingImageDTO> carousel = new ImageCarousel<>();
private int selectedIdx;
public GalleryPlayer(ImageMetadataDTO selected, List<ImageMetadataDTO> images) {
public SailingGalleryPlayer(SailingImageDTO selected, List<SailingImageDTO> images) {
initWidget(uiBinder.createAndBindUi(this));
selectedIdx = Math.max(selectedIdx, images.indexOf(selected));
for (ImageMetadataDTO i : images) {
for (SailingImageDTO i : images) {
mainSliderUi.appendChild(createMainImgElement(i));
subSliderUi.appendChild(createThumbImgElement(i));
}
}
private ImageElement createThumbImgElement(ImageMetadataDTO i ) {
private ImageElement createThumbImgElement(SailingImageDTO i ) {
ImageElement img = Document.get().createImageElement();
img.setAttribute("src", i.getSourceRef());
img.setHeight(100);
@@ -50,7 +50,7 @@ public class GalleryPlayer extends ResizeComposite {
return img;
}
private DivElement createMainImgElement(ImageMetadataDTO i) {
private DivElement createMainImgElement(SailingImageDTO i) {
DivElement img = Document.get().createDivElement();
img.getStyle().setBackgroundImage("url(\"" + i.getSourceRef() + "\")");
img.getStyle().setProperty("backgroundSize", "contain");
@@ -32,7 +32,6 @@ public class RegattaOverviewEntryPoint extends AbstractSailingEntryPoint {
private DockLayoutPanel containerPanel;
private RaceDetailPanel detailPanel;
private RegattaOverviewPanel regattaPanel;
private SAPHeader2 logoAndTitlePanel;
private final Label eventNameLabel = new Label();
private final Label venueNameLabel = new Label();
private final Label clockLabel = new Label();
@@ -92,7 +92,6 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
private final VerticalPanel mainPanel;
private final DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HH:mm:ss");
private final DateTimeFormat dateFormatter = DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT);
private final RegattaOverviewResources.LocalCss style = RegattaOverviewResources.INSTANCE.css();
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final UUID eventId;
@@ -390,7 +389,7 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
return result;
}
@SuppressWarnings("unchecked")
private void createColumns() {
regattaOverviewListHandler = new ListHandler<RegattaOverviewEntryDTO>(regattaOverviewDataProvider.getList());
courseAreaColumn = new TextColumn<RegattaOverviewEntryDTO>() {
@@ -25,9 +25,6 @@ import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.RemoteSailingServerReference;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.common.media.MediaType;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
@@ -45,10 +42,10 @@ import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO.EventSeriesSt
import com.sap.sailing.gwt.ui.shared.general.EventMetadataDTO;
import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO;
import com.sap.sailing.gwt.ui.shared.general.EventState;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.MediaDTO;
import com.sap.sailing.gwt.ui.shared.media.MediaUtils;
import com.sap.sailing.gwt.ui.shared.media.VideoMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
import com.sap.sailing.gwt.ui.shared.start.EventStageDTO;
import com.sap.sailing.gwt.ui.shared.start.StageEventType;
import com.sap.sailing.gwt.ui.shared.start.StartViewDTO;
@@ -60,6 +57,9 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.TimeRangeImpl;
import com.sap.sse.common.media.ImageSize;
import com.sap.sse.common.media.MediaType;
import com.sap.sse.common.media.MimeType;
import com.sap.sse.util.ServiceTrackerFactory;
/**
@@ -189,7 +189,7 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
MimeType type = MediaUtils.detectMimeTypeFromUrl(youTubeRandomUrl.toString());
if (type.mediaType == MediaType.video) {
VideoMetadataDTO candidate = new VideoMetadataDTO(eventRef, youTubeRandomUrl, type,
SailingVideoDTO candidate = new SailingVideoDTO(eventRef, youTubeRandomUrl, type,
holder.event.getName());
result.addVideo(candidate);
}
@@ -203,9 +203,9 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
}
});
final Set<ImageMetadataDTO> photoGalleryUrls = new HashSet<>(); // using a HashSet here leads to a reasonable
final Set<SailingImageDTO> photoGalleryUrls = new HashSet<>(); // using a HashSet here leads to a reasonable
// amount of shuffling
final List<VideoMetadataDTO> videoCandidates = new ArrayList<>();
final List<SailingVideoDTO> videoCandidates = new ArrayList<>();
for(EventHolder holder : recentEventsOfLast12Month) {
if(result.getRecentEvents().size() < MAX_RECENT_EVENTS) {
@@ -220,7 +220,7 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
ImageSize imageSize = event.getImageSize(url);
if(imageSize != null) {
// TODO: do we habe a title?
photoGalleryUrls.add(new ImageMetadataDTO(eventRef, url, imageSize, null));
photoGalleryUrls.add(new SailingImageDTO(eventRef, url.toString(), imageSize, null));
}
} catch (Exception e) {
}
@@ -229,7 +229,7 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
MimeType type = MediaUtils.detectMimeTypeFromUrl(videoUrl.toString());
if (type.mediaType == MediaType.video) {
VideoMetadataDTO candidate = new VideoMetadataDTO(eventRef, videoUrl, type, holder.event.getName());
SailingVideoDTO candidate = new SailingVideoDTO(eventRef, videoUrl, type, holder.event.getName());
videoCandidates.add(candidate);
}
}
@@ -238,7 +238,7 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
final int numberOfCandidatesAvailable = videoCandidates.size();
if (numberOfCandidatesAvailable <= (MAX_VIDEO_COUNT - result.getVideos().size())) {
// add all we have, no randomize
for (VideoMetadataDTO video : videoCandidates) {
for (SailingVideoDTO video : videoCandidates) {
result.addVideo(video);
}
} else {
@@ -246,7 +246,7 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
final Random videosRandomizer = new Random(numberOfCandidatesAvailable);
randomlyPick: for (int i = 0; i < numberOfCandidatesAvailable; i++) {
int nextVideoindex = videosRandomizer.nextInt(numberOfCandidatesAvailable);
final VideoMetadataDTO video = videoCandidates.get(nextVideoindex);
final SailingVideoDTO video = videoCandidates.get(nextVideoindex);
result.addVideo(video);
if (result.getVideos().size() == MAX_VIDEO_COUNT) {
break randomlyPick;
@@ -254,12 +254,12 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
}
}
Random random = new Random();
List<ImageMetadataDTO> shuffledPhotoGallery = new ArrayList<>(photoGalleryUrls);
List<SailingImageDTO> shuffledPhotoGallery = new ArrayList<>(photoGalleryUrls);
final int gallerySize = photoGalleryUrls.size();
for (int i = 0; i < gallerySize; i++) {
Collections.swap(shuffledPhotoGallery, i, random.nextInt(gallerySize));
}
for (ImageMetadataDTO holder : shuffledPhotoGallery) {
for (SailingImageDTO holder : shuffledPhotoGallery) {
result.addPhoto(holder);
}
// TODO media
@@ -429,13 +429,13 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
} catch (InterruptedException | ExecutionException e) {
logger.log(Level.FINE, "Was unable to obtain image size for "+url+" earlier.", e);
}
ImageMetadataDTO entry = new ImageMetadataDTO(eventRef, url, imageSize, eventName);
SailingImageDTO entry = new SailingImageDTO(eventRef, url.toString(), imageSize, eventName);
media.addPhoto(entry);
}
for(URL url : event.getVideoURLs()) {
MimeType type = MediaUtils.detectMimeTypeFromUrl(url.toString());
if (type.mediaType == MediaType.video) {
VideoMetadataDTO candidate = new VideoMetadataDTO(eventRef, url, type, null);
SailingVideoDTO candidate = new SailingVideoDTO(eventRef, url, type, null);
media.addVideo(candidate);
}
}
@@ -19,7 +19,6 @@ import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.tracking.TrackedRace;
@@ -27,6 +26,7 @@ import com.sap.sailing.gwt.ui.shared.eventview.HasRegattaMetadata.RegattaState;
import com.sap.sailing.gwt.ui.shared.eventview.RegattaMetadataDTO;
import com.sap.sailing.gwt.ui.shared.general.EventState;
import com.sap.sse.common.Util;
import com.sap.sse.common.media.ImageSize;
public final class HomeServiceUtil {
private HomeServiceUtil() {
@@ -10,7 +10,7 @@ import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
public class GalleryImageHolder extends Widget implements HasClickHandlers {
@@ -22,7 +22,7 @@ public class GalleryImageHolder extends Widget implements HasClickHandlers {
@UiField
DivElement imageHolderUi;
public GalleryImageHolder(ImageMetadataDTO video) {
public GalleryImageHolder(SailingImageDTO video) {
setElement(uiBinder.createAndBindUi(this));
imageHolderUi.getStyle().setBackgroundImage("url(\"" + video.getSourceRef() + "\")");
@@ -24,7 +24,6 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MediaTrack.Status;
import com.sap.sailing.domain.common.media.MediaType;
import com.sap.sailing.domain.common.security.Roles;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
@@ -38,6 +37,7 @@ import com.sap.sailing.gwt.ui.client.media.shared.VideoPlayer;
import com.sap.sailing.gwt.ui.client.media.shared.VideoSynchPlayer;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MediaType;
import com.sap.sse.common.settings.AbstractSettings;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
@@ -14,8 +14,8 @@ import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MediaType;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.media.MediaType;
public class MediaSingleSelectionControl extends AbstractMediaSelectionControl implements CloseHandler<PopupPanel> {
@@ -17,12 +17,12 @@ import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.common.client.YoutubeApi;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
public class NewMediaDialog extends DataEntryDialog<MediaTrack> {
@@ -9,9 +9,9 @@ import com.google.gwt.dom.client.VideoElement;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.media.MediaSubType;
import com.sap.sailing.domain.common.media.MediaType;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sse.common.media.MediaSubType;
import com.sap.sse.common.media.MediaType;
import com.sap.sse.common.media.MimeType;
public class VideoJSPlayer extends Widget {
@@ -11,9 +11,9 @@ import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.media.MediaSubType;
import com.sap.sailing.gwt.ui.common.client.YoutubeApi;
import com.sap.sailing.gwt.ui.shared.media.VideoMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
import com.sap.sse.common.media.MediaSubType;
public class VideoThumbnail extends Widget implements HasClickHandlers {
@@ -28,7 +28,7 @@ public class VideoThumbnail extends Widget implements HasClickHandlers {
@UiField
ImageElement thumbnailUi;
public VideoThumbnail(VideoMetadataDTO video) {
public VideoThumbnail(SailingVideoDTO video) {
setElement(uiBinder.createAndBindUi(this));
getElement().addClassName("videoThumbnail");
captionUi.setInnerText(video.getTitle());
@@ -8,8 +8,8 @@ import java.util.Map;
import java.util.UUID;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.common.dto.NamedDTO;
import com.sap.sse.common.media.ImageSize;
public class EventBaseDTO extends NamedDTO implements IsSerializable {
private static final long serialVersionUID = 818666323178097939L;
@@ -1,6 +1,6 @@
package com.sap.sailing.gwt.ui.shared.dispatch.event;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sse.common.media.MimeType;
public class EventOverviewVideoStageDTO implements EventOverviewStageContentDTO {
public enum Type {
@@ -5,7 +5,6 @@ import java.util.UUID;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.gwt.server.HomeServiceUtil;
import com.sap.sailing.gwt.ui.shared.dispatch.Action;
import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext;
@@ -14,6 +13,7 @@ import com.sap.sailing.gwt.ui.shared.general.EventState;
import com.sap.sailing.gwt.ui.shared.media.MediaUtils;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
public class GetEventOverviewStageAction implements Action<ResultWithTTL<EventOverviewStageDTO>> {
private UUID eventId;
@@ -1,72 +0,0 @@
package com.sap.sailing.gwt.ui.shared.media;
import java.io.Serializable;
import java.net.URL;
import java.util.HashSet;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.domain.common.media.MediaCategory;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO;
public class AbstractMediaDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String title;
private MimeType mimeType;
private MediaCategory category;
private HashSet<String> tags = new HashSet<String>();
private EventReferenceDTO eventRef;
private String sourceRef;
protected AbstractMediaDTO() {
}
@GwtIncompatible
public AbstractMediaDTO(EventReferenceDTO eventRef, URL url, MimeType mimeType, String title) {
this(eventRef, url.toString(), mimeType, title);
}
@GwtIncompatible
public AbstractMediaDTO(EventReferenceDTO eventRef, String sourceRef, MimeType mimeType, String title) {
this.eventRef = eventRef;
this.title = title;
this.mimeType = mimeType;
this.sourceRef = sourceRef;
}
public String getTitle() {
return title;
}
public MimeType getMimeType() {
return mimeType;
}
public MediaCategory getCategory() {
return category;
}
public HashSet<String> getTags() {
return tags;
}
public String getSourceRef() {
return sourceRef;
}
public void setCategory(MediaCategory category) {
this.category = category;
}
public EventReferenceDTO getEventRef() {
return eventRef;
}
}
@@ -6,22 +6,22 @@ import java.util.ArrayList;
public class MediaDTO implements Serializable {
private static final long serialVersionUID = 4932700214423641309L;
private ArrayList<ImageMetadataDTO> photos = new ArrayList<>();
private ArrayList<VideoMetadataDTO> videos = new ArrayList<>();
private ArrayList<SailingImageDTO> photos = new ArrayList<>();
private ArrayList<SailingVideoDTO> videos = new ArrayList<>();
public ArrayList<ImageMetadataDTO> getPhotos() {
public ArrayList<SailingImageDTO> getPhotos() {
return photos;
}
public void addPhoto(ImageMetadataDTO photo) {
public void addPhoto(SailingImageDTO photo) {
photos.add(photo);
}
public ArrayList<VideoMetadataDTO> getVideos() {
public ArrayList<SailingVideoDTO> getVideos() {
return videos;
}
public void addVideo(VideoMetadataDTO video) {
public void addVideo(SailingVideoDTO video) {
videos.add(video);
}
}
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.ui.shared.media;
import java.util.regex.Pattern;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sse.common.media.MimeType;
/**
* Temporary solution for mimetype detection for current videos.
@@ -0,0 +1,58 @@
package com.sap.sailing.gwt.ui.shared.media;
import java.util.Date;
import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO;
import com.sap.sse.common.media.ImageMetadataDTO;
import com.sap.sse.common.media.ImageSize;
public class SailingImageDTO extends ImageMetadataDTO {
private static final long serialVersionUID = 1L;
private String subtitle;
private Date createdAtDate;
private String author;
private EventReferenceDTO eventRef;
protected SailingImageDTO() {
}
public SailingImageDTO(EventReferenceDTO eventRef, String imageURL, ImageSize size, String title) {
super(imageURL, size, title);
this.eventRef = eventRef;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public Date getCreatedAtDate() {
return createdAtDate;
}
public void setCreatedAtDate(Date createdAtDate) {
this.createdAtDate = createdAtDate;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public EventReferenceDTO getEventRef() {
return eventRef;
}
}
@@ -0,0 +1,36 @@
package com.sap.sailing.gwt.ui.shared.media;
import java.net.URL;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO;
import com.sap.sse.common.media.MimeType;
import com.sap.sse.common.media.VideoMetadataDTO;
public class SailingVideoDTO extends VideoMetadataDTO {
private static final long serialVersionUID = 1L;
private EventReferenceDTO eventRef;
@SuppressWarnings("unused")
private SailingVideoDTO() {
}
@GwtIncompatible
public SailingVideoDTO(EventReferenceDTO eventRef, URL url, MimeType mimeType, String title) {
this(eventRef, url.toString(), mimeType, title);
this.eventRef = eventRef;
}
@GwtIncompatible
public SailingVideoDTO(EventReferenceDTO eventRef, String url, MimeType mimeType, String title) {
super(url, mimeType, title);
this.eventRef = eventRef;
}
public EventReferenceDTO getEventRef() {
return eventRef;
}
}
@@ -7,8 +7,8 @@ import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventDTO;
import com.sap.sailing.gwt.ui.shared.media.ImageMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.VideoMetadataDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingImageDTO;
import com.sap.sailing.gwt.ui.shared.media.SailingVideoDTO;
public class StartViewDTO implements IsSerializable {
@@ -16,8 +16,8 @@ public class StartViewDTO implements IsSerializable {
private ArrayList<EventListEventDTO> recentEvents = new ArrayList<EventListEventDTO>();
private ArrayList<ImageMetadataDTO> photos = new ArrayList<>();
private HashSet<VideoMetadataDTO> videos = new HashSet<>();
private ArrayList<SailingImageDTO> photos = new ArrayList<>();
private HashSet<SailingVideoDTO> videos = new HashSet<>();
public List<EventStageDTO> getStageEvents() {
return stageEvents;
@@ -35,19 +35,19 @@ public class StartViewDTO implements IsSerializable {
this.recentEvents.add(event);
}
public ArrayList<ImageMetadataDTO> getPhotos() {
public ArrayList<SailingImageDTO> getPhotos() {
return photos;
}
public void addPhoto(ImageMetadataDTO photo) {
public void addPhoto(SailingImageDTO photo) {
photos.add(photo);
}
public Collection<VideoMetadataDTO> getVideos() {
public Collection<SailingVideoDTO> getVideos() {
return videos;
}
public void addVideo(VideoMetadataDTO video) {
public void addVideo(SailingVideoDTO video) {
videos.add(video);
}
}
@@ -13,13 +13,13 @@ import com.mongodb.MongoException;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.persistence.media.MediaDB;
import com.sap.sailing.domain.persistence.media.MediaDBFactory;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
@@ -11,8 +11,8 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.LeaderboardGroupBase;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.media.ImageSize;
public class EventBaseJsonSerializer implements JsonSerializer<EventBase> {
private static final Logger logger = Logger.getLogger(EventBaseJsonSerializer.class.getName());
@@ -49,7 +49,6 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindImpl;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
@@ -71,6 +70,7 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
import com.sap.sse.replication.ReplicationMasterDescriptor;
import com.sap.sse.replication.impl.ReplicationReceiver;
import com.sap.sse.replication.testsupport.AbstractServerReplicationTestSetUp.ReplicationServiceTestImpl;
@@ -13,11 +13,11 @@ import org.junit.Test;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
public class MediaReplicationTest extends AbstractServerReplicationTest {
@@ -27,7 +27,6 @@ import org.mockito.Mockito;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl;
@@ -37,6 +36,7 @@ import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
public class MasterDataImporterMediaTest {
@@ -12,13 +12,13 @@ import org.junit.Test;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TimeRange;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.TimeRangeImpl;
import com.sap.sse.common.media.MimeType;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
@@ -33,7 +33,6 @@ import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
@@ -52,6 +51,7 @@ import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
public class MediaMasterDataExportTest {
@@ -93,7 +93,6 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindImpl;
import com.sap.sailing.domain.common.impl.WindSourceWithAdditionalID;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
@@ -127,6 +126,7 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
import com.sap.sse.mongodb.MongoDBConfiguration;
import com.sap.sse.mongodb.MongoDBService;
@@ -9,6 +9,7 @@ Export-Package: com.sap.sse.common,
com.sap.sse.common.filter,
com.sap.sse.common.impl,
com.sap.sse.common.mail,
com.sap.sse.common.media,
com.sap.sse.common.scalablevalue,
com.sap.sse.common.search,
com.sap.sse.common.settings,
@@ -0,0 +1,46 @@
package com.sap.sse.common.media;
import java.io.Serializable;
import java.util.HashSet;
public class AbstractMediaDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String title;
private MimeType mimeType;
private HashSet<String> tags = new HashSet<String>();
private String sourceRef;
protected AbstractMediaDTO() {
}
public AbstractMediaDTO(String sourceRef, MimeType mimeType, String title) {
this.title = title;
this.mimeType = mimeType;
this.sourceRef = sourceRef;
}
public String getTitle() {
return title;
}
public MimeType getMimeType() {
return mimeType;
}
public HashSet<String> getTags() {
return tags;
}
public String getSourceRef() {
return sourceRef;
}
}
@@ -1,13 +1,7 @@
package com.sap.sailing.gwt.ui.shared.media;
package com.sap.sse.common.media;
import java.net.URL;
import java.util.Date;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.domain.common.ImageSize;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO;
public class ImageMetadataDTO extends AbstractMediaDTO {
private static final long serialVersionUID = 1L;
@@ -19,12 +13,12 @@ public class ImageMetadataDTO extends AbstractMediaDTO {
private Date createdAtDate;
private String author;
protected ImageMetadataDTO() {
}
@GwtIncompatible
public ImageMetadataDTO(EventReferenceDTO eventRef, URL imageURL, ImageSize size, String title) {
super(eventRef, imageURL.toString(), MimeType.image, title);
public ImageMetadataDTO(String imageURL, ImageSize size, String title) {
super(imageURL, MimeType.image, title);
this.widthInPx = size.getWidth();
this.heightInPx = size.getHeight();
}
@@ -69,4 +63,5 @@ public class ImageMetadataDTO extends AbstractMediaDTO {
this.heightInPx = heightInPx;
}
}
@@ -1,4 +1,4 @@
package com.sap.sailing.domain.common;
package com.sap.sse.common.media;
import java.io.Serializable;
@@ -1,4 +1,4 @@
package com.sap.sailing.domain.common.media;
package com.sap.sse.common.media;
public enum MediaSubType {
ogg, mp4, mpeg, x_aiff, quicktime, aac, webm, youtube, vimeo, unknown;
@@ -1,4 +1,4 @@
package com.sap.sailing.domain.common.media;
package com.sap.sse.common.media;
public enum MediaType {
audio, video, image, unknown;
@@ -1,4 +1,4 @@
package com.sap.sailing.domain.common.media;
package com.sap.sse.common.media;
public enum MimeType {
@@ -1,10 +1,8 @@
package com.sap.sailing.gwt.ui.shared.media;
package com.sap.sse.common.media;
import java.net.URL;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.domain.common.media.MimeType;
import com.sap.sailing.gwt.ui.shared.general.EventReferenceDTO;
public class VideoMetadataDTO extends AbstractMediaDTO {
@@ -13,18 +11,18 @@ public class VideoMetadataDTO extends AbstractMediaDTO {
private int length;
private String thumbnailRef;
@SuppressWarnings("unused")
private VideoMetadataDTO() {
protected VideoMetadataDTO() {
}
@GwtIncompatible
public VideoMetadataDTO(EventReferenceDTO eventRef, URL url, MimeType mimeType, String title) {
this(eventRef, url.toString(), mimeType, title);
public VideoMetadataDTO(URL url, MimeType mimeType, String title) {
this(url.toString(), mimeType, title);
}
@GwtIncompatible
public VideoMetadataDTO(EventReferenceDTO eventRef, String url, MimeType mimeType, String title) {
super(eventRef, url, mimeType, title);
public VideoMetadataDTO(String url, MimeType mimeType, String title) {
super(url, mimeType, title);
}
public void setLength(int length) {
@@ -1,5 +1,8 @@
package com.sap.sse.gwt.client.controls.carousel;
import java.util.LinkedList;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.DivElement;
@@ -11,6 +14,7 @@ import com.google.gwt.safehtml.shared.UriUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.common.media.ImageMetadataDTO;
/**
* Image carousel that uses the open source "slick carousel".
@@ -48,10 +52,11 @@ import com.google.gwt.user.client.ui.Widget;
*
* Created by pgtaboada on 10.11.14.
*/
public class ImageCarousel extends Widget {
public class ImageCarousel<TYPE extends ImageMetadataDTO> extends Widget {
private static SlickSliderUiBinder ourUiBinder = GWT.create(SlickSliderUiBinder.class);
private LinkedList<TYPE> currentImages = new LinkedList<>();
/**
* slick slider property: dots
*/
@@ -81,9 +86,12 @@ public class ImageCarousel extends Widget {
* The height of the images
*/
private int imagesHeight = 300;
private int currentSlideIndex = 0;
private final String uniqueId;
private FullscreenViewer<TYPE> fsViewer;
/**
* Widget constructor
*/
@@ -95,12 +103,38 @@ public class ImageCarousel extends Widget {
init();
}
public void onClick() {
GWT.log("Current slide: " + currentSlideIndex);
if (fsViewer != null) {
fsViewer.show(currentImages.get(currentSlideIndex), currentImages);
}
}
/**
* JSNI wrapper that does setup the slider
*
* @param uniqueId
*/
native void setupSlider(ImageCarousel sliderReference) /*-{
native void setupSlider(ImageCarousel<?> sliderReference) /*-{
var slider = $wnd
.$('.'
+ (sliderReference.@com.sap.sse.gwt.client.controls.carousel.ImageCarousel::uniqueId));
slider
.on(
'click',
'.slick-slide',
function() {
sliderReference.@com.sap.sse.gwt.client.controls.carousel.ImageCarousel::onClick()();
});
slider
.on(
'afterChange',
function(event, index) {
sliderReference.@com.sap.sse.gwt.client.controls.carousel.ImageCarousel::currentSlideIndex = index.currentSlide;
});
$wnd
.$(
@@ -136,8 +170,12 @@ public class ImageCarousel extends Widget {
*
* @param url
*/
public void addImage(String url, int height, int width) {
public void addImage(TYPE image) {
currentImages.add(image);
String url = image.getSourceRef();
int height = image.getHeightInPx();
int width = image.getWidthInPx();
DivElement imageHolder = Document.get().createDivElement();
ImageElement imageElement = Document.get().createImageElement();
imageElement.setAttribute("data-lazy", UriUtils.fromString(url).asString());
@@ -209,7 +247,7 @@ public class ImageCarousel extends Widget {
/**
* UiBinder interface
*/
interface SlickSliderUiBinder extends UiBinder<DivElement, ImageCarousel> {
interface SlickSliderUiBinder extends UiBinder<DivElement, ImageCarousel<?>> {
}
/**
@@ -242,7 +280,7 @@ public class ImageCarousel extends Widget {
* Apply slick js to constructed dom tree.
*/
private void init() {
final ImageCarousel reference = this;
final ImageCarousel<TYPE> reference = this;
Scheduler.get().scheduleDeferred(new Command() {
@@ -265,4 +303,13 @@ public class ImageCarousel extends Widget {
});
}
public void registerFullscreenViewer(FullscreenViewer<TYPE> fsViewer) {
this.fsViewer = fsViewer;
}
public interface FullscreenViewer<TYPE> {
public void show(TYPE selectedImage, List<TYPE> imageList);
}
}