From bdcf580f943c467a53fc2dfb3c5c736cd5e66fb7 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Thu, 11 Jun 2015 17:55:23 +0200 Subject: [PATCH] Initial implementation to get Leaderboard update news --- .../event/GetEventOverviewStageAction.java | 10 ++- .../news/AbstractRaceNewsEntryDTO.java | 9 +-- .../dispatch/news/InfoNewsEntryDTO.java | 9 +-- .../news/LeaderboardNewsEntryDTO.java | 25 +++---- .../ui/shared/dispatch/news/NewsEntryDTO.java | 9 ++- .../com.sap.sailing.news/META-INF/MANIFEST.MF | 3 +- .../src/com/sap/sailing/news/Activator.java | 2 + .../src/com/sap/sailing/news/NewsItem.java | 2 +- .../sailing/news/impl/AbstractNewsItem.java | 15 ++++ .../news/impl/EventNewsServiceImpl.java | 13 +++- .../LeaderboardUpdateEventNewsProvider.java | 68 +++++++++++++++++++ .../news/impl/LeaderboardUpdateNewsItem.java | 23 +++++++ 12 files changed, 146 insertions(+), 42 deletions(-) create mode 100644 java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java create mode 100644 java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateNewsItem.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java index e136eea7570..0ab9f043c59 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/GetEventOverviewStageAction.java @@ -11,10 +11,12 @@ import com.sap.sailing.gwt.ui.shared.dispatch.Action; import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext; import com.sap.sailing.gwt.ui.shared.dispatch.ResultWithTTL; import com.sap.sailing.gwt.ui.shared.dispatch.news.InfoNewsEntryDTO; +import com.sap.sailing.gwt.ui.shared.dispatch.news.LeaderboardNewsEntryDTO; import com.sap.sailing.gwt.ui.shared.general.EventState; import com.sap.sailing.gwt.ui.shared.media.MediaUtils; import com.sap.sailing.news.EventNewsItem; import com.sap.sailing.news.impl.InfoEventNewsItem; +import com.sap.sailing.news.impl.LeaderboardUpdateNewsItem; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.media.MimeType; @@ -129,15 +131,17 @@ public class GetEventOverviewStageAction implements Action newsItems = dispatchContext.getEventNewsService().getNews(event, event.getStartDate().asDate()); + List newsItems = dispatchContext.getEventNewsService().getNews(event); for(EventNewsItem newsItem: newsItems) { if(newsItem instanceof InfoEventNewsItem) { stage.addNews(new InfoNewsEntryDTO((InfoEventNewsItem) newsItem)); } + if(newsItem instanceof LeaderboardUpdateNewsItem) { + stage.addNews(new LeaderboardNewsEntryDTO((LeaderboardUpdateNewsItem) newsItem)); + } } -// TODO test contents +// TODO remove test contents // // boolean singleRegatta = HomeServiceUtil.isSingleRegatta(event); // diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/AbstractRaceNewsEntryDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/AbstractRaceNewsEntryDTO.java index 592b2df0d14..d2e51a41d81 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/AbstractRaceNewsEntryDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/AbstractRaceNewsEntryDTO.java @@ -6,18 +6,16 @@ public abstract class AbstractRaceNewsEntryDTO extends NewsEntryDTO { private String regattaName; private String trackedRaceName; - private String raceTitle; private String boatClass; protected AbstractRaceNewsEntryDTO() { } public AbstractRaceNewsEntryDTO(String regattaName, String trackedRaceName, String raceTitle, String boatClass, Date timestamp) { - super(timestamp); + super(raceTitle, timestamp); this.regattaName = regattaName; this.trackedRaceName = trackedRaceName; this.boatClass = boatClass; - this.raceTitle = raceTitle; } @Override @@ -25,11 +23,6 @@ public abstract class AbstractRaceNewsEntryDTO extends NewsEntryDTO { return boatClass; } - @Override - public String getTitle() { - return raceTitle; - } - public String getRegattaName() { return regattaName; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/InfoNewsEntryDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/InfoNewsEntryDTO.java index 0847e00aad9..a1fc4309fc4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/InfoNewsEntryDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/InfoNewsEntryDTO.java @@ -5,7 +5,6 @@ import com.sap.sailing.news.impl.InfoEventNewsItem; public class InfoNewsEntryDTO extends NewsEntryDTO { - private String title; private String subtitle; @SuppressWarnings("unused") @@ -14,16 +13,10 @@ public class InfoNewsEntryDTO extends NewsEntryDTO { @GwtIncompatible public InfoNewsEntryDTO(InfoEventNewsItem item) { - super(item.getCreatedAtDate()); - this.title = item.getTitle(); + super(item.getTitle(), item.getCreatedAtDate()); this.subtitle = item.getMessage(); } - @Override - public String getTitle() { - return title; - } - @Override public String getMessage() { return subtitle; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/LeaderboardNewsEntryDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/LeaderboardNewsEntryDTO.java index 028892132cb..08e2077c967 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/LeaderboardNewsEntryDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/LeaderboardNewsEntryDTO.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.shared.dispatch.news; -import java.util.Date; +import com.google.gwt.core.shared.GwtIncompatible; +import com.sap.sailing.news.impl.LeaderboardUpdateNewsItem; public class LeaderboardNewsEntryDTO extends NewsEntryDTO { @@ -9,7 +10,6 @@ public class LeaderboardNewsEntryDTO extends NewsEntryDTO { } private String leaderboardName; - private String leaderboardDisplayName; private String boatClassName; private String externalURL; private Type type; @@ -18,19 +18,14 @@ public class LeaderboardNewsEntryDTO extends NewsEntryDTO { private LeaderboardNewsEntryDTO() { } - public LeaderboardNewsEntryDTO(String leaderboardName, String leaderboardDisplayName, String boatClassName, Date timestamp, Type type) { - super(timestamp); - this.boatClassName = boatClassName; - this.type = type; - this.setLeaderboardName(leaderboardName); - this.leaderboardDisplayName = leaderboardDisplayName; + @GwtIncompatible + public LeaderboardNewsEntryDTO(LeaderboardUpdateNewsItem item) { + super(item.getTitle(), item.getCreatedAtDate()); + this.boatClassName = item.getBoatClass(); + this.type = Type.RESULTS_UPDATE; + this.leaderboardName = item.getLeaderboardName(); } - @Override - public String getTitle() { - return leaderboardDisplayName; - } - @Override public String getBoatClass() { return boatClassName; @@ -56,8 +51,4 @@ public class LeaderboardNewsEntryDTO extends NewsEntryDTO { public String getLeaderboardName() { return leaderboardName; } - - public void setLeaderboardName(String leaderboardName) { - this.leaderboardName = leaderboardName; - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/NewsEntryDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/NewsEntryDTO.java index b6035df84c1..f0c74bb1df7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/NewsEntryDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/news/NewsEntryDTO.java @@ -7,15 +7,20 @@ import com.google.gwt.user.client.rpc.IsSerializable; public abstract class NewsEntryDTO implements IsSerializable { private Date timestamp; + + private String title; protected NewsEntryDTO() { } - public NewsEntryDTO(Date timestamp) { + public NewsEntryDTO(String title, Date timestamp) { + this.title = title; this.timestamp = timestamp; } - public abstract String getTitle(); + public String getTitle() { + return title; + } public abstract String getMessage(); diff --git a/java/com.sap.sailing.news/META-INF/MANIFEST.MF b/java/com.sap.sailing.news/META-INF/MANIFEST.MF index 788cae34614..7a55d57aa39 100644 --- a/java/com.sap.sailing.news/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.news/META-INF/MANIFEST.MF @@ -13,4 +13,5 @@ Import-Package: org.osgi.framework;version="1.5.0", org.osgi.util.tracker;version="1.5.1" Require-Bundle: com.sap.sse.common, com.sap.sailing.server, - com.sap.sailing.domain + com.sap.sailing.domain, + com.sap.sailing.domain.common diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/Activator.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/Activator.java index ff34db323c8..d4b9f01eebb 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/Activator.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/Activator.java @@ -7,6 +7,7 @@ import org.osgi.framework.BundleContext; import com.sap.sailing.news.impl.EventNewsProviderRegistryImpl; import com.sap.sailing.news.impl.EventNewsServiceImpl; +import com.sap.sailing.news.impl.LeaderboardUpdateEventNewsProvider; import com.sap.sailing.news.impl.SimpleDemoEventNewsProvider; public class Activator implements BundleActivator { @@ -19,6 +20,7 @@ public class Activator implements BundleActivator { context.registerService(EventNewsProviderRegistry.class, providerRegistry, null); providerRegistry.registerNewsProvider(new SimpleDemoEventNewsProvider()); + providerRegistry.registerNewsProvider(new LeaderboardUpdateEventNewsProvider()); logger.info("EventNews Service registered."); } diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/NewsItem.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/NewsItem.java index 53cc7d7c17d..df47e9e43fa 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/NewsItem.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/NewsItem.java @@ -9,7 +9,7 @@ import java.util.UUID; * @author Frank * */ -public interface NewsItem { +public interface NewsItem extends Comparable { UUID getId(); String getCategory(); diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractNewsItem.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractNewsItem.java index 36168f415c7..1528859b722 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractNewsItem.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractNewsItem.java @@ -55,4 +55,19 @@ public class AbstractNewsItem implements NewsItem { public UUID getId() { return id; } + + @Override + public int compareTo(NewsItem o) { + Date otherCreatedAtDate = o.getCreatedAtDate(); + if(createdAtDate == otherCreatedAtDate) { + return 0; + } + if(createdAtDate == null) { + return 1; + } + if(otherCreatedAtDate == null) { + return -1; + } + return -createdAtDate.compareTo(otherCreatedAtDate); + } } diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/EventNewsServiceImpl.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/EventNewsServiceImpl.java index 81468634aba..abf923c1bf5 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/EventNewsServiceImpl.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/EventNewsServiceImpl.java @@ -2,6 +2,7 @@ package com.sap.sailing.news.impl; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -25,7 +26,11 @@ public class EventNewsServiceImpl implements EventNewsService { Collection news = provider.getNews(event); result.addAll(news); } - return result; + Collections.sort(result); + if(result.size() <= 15) { + return result; + } + return result.subList(0, 16); } @Override @@ -35,7 +40,11 @@ public class EventNewsServiceImpl implements EventNewsService { Collection news = provider.getNews(event, startingFrom); result.addAll(news); } - return result; + Collections.sort(result); + if(result.size() <= 15) { + return result; + } + return result.subList(0, 16); } @Override diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java new file mode 100644 index 00000000000..54305106f5d --- /dev/null +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateEventNewsProvider.java @@ -0,0 +1,68 @@ +package com.sap.sailing.news.impl; + +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import com.sap.sailing.domain.base.BoatClass; +import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; +import com.sap.sailing.news.EventNewsItem; +import com.sap.sailing.news.EventNewsProvider; +import com.sap.sse.common.TimePoint; + +public class LeaderboardUpdateEventNewsProvider implements EventNewsProvider { + + @Override + public Collection getNews(Event event) { + List result = new LinkedList<>(); + Iterable leaderboardGroups = event.getLeaderboardGroups(); + for(LeaderboardGroup leaderboardGroup: leaderboardGroups) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { + TimePoint timePointOfLatestModification = leaderboard.getTimePointOfLatestModification(); + if(timePointOfLatestModification == null) { + continue; + } + + String displayName = leaderboard.getDisplayName() != null ?leaderboard.getDisplayName() :leaderboard.getName(); + String boatClassName= null; + if(leaderboard instanceof RegattaLeaderboard) { + BoatClass boatClass = ((RegattaLeaderboard) leaderboard).getRegatta().getBoatClass(); + if(boatClass != null) { + boatClassName = boatClass.getDisplayName(); + } + } + result.add(new LeaderboardUpdateNewsItem(event.getId(), timePointOfLatestModification.asDate(), leaderboard.getName(), displayName, boatClassName)); + } + } + + Collections.sort(result); + + if(result.size() <= 10) { + return result; + } + return result.subList(0, 11); + } + + @Override + public Collection getNews(Event event, Date startingFrom) { + // TODO correct implementation + return getNews(event); + } + + @Override + public boolean hasNews(Event event, Date startingFrom) { + // TODO correct implementation + return true; + } + + @Override + public boolean hasNews(Event event) { + return true; + } + +} diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateNewsItem.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateNewsItem.java new file mode 100644 index 00000000000..6a64cacbfce --- /dev/null +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/LeaderboardUpdateNewsItem.java @@ -0,0 +1,23 @@ +package com.sap.sailing.news.impl; + +import java.util.Date; +import java.util.UUID; + +public class LeaderboardUpdateNewsItem extends AbstractEventNewsItem { + private String leaderboardName; + private String boatClass; + + public LeaderboardUpdateNewsItem(UUID eventId, Date updateDate, String leaderboardName, String leaderboardDisplayName, String boatClass) { + super(eventId, leaderboardDisplayName, null, updateDate, null, null); + this.leaderboardName = leaderboardName; + this.boatClass = boatClass; + } + + public String getLeaderboardName() { + return leaderboardName; + } + + public String getBoatClass() { + return boatClass; + } +}