Initial implementation to get Leaderboard update news

This commit is contained in:
Steffen Schaefer committed 2015-06-11 17:55:23 +02:00
1 parent 783a46eb4e
commit bdcf580f94
12 files changed
+146 -42

No files matched your search

@@ -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<ResultWithTTL<EventOv
@GwtIncompatible
private void addNews(DispatchContext dispatchContext, Event event, EventOverviewStageDTO stage) {
// TODO correct date
List<EventNewsItem> newsItems = dispatchContext.getEventNewsService().getNews(event, event.getStartDate().asDate());
List<EventNewsItem> 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);
//
@@ -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;
}
@@ -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;
@@ -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;
}
}
@@ -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();
@@ -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
@@ -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.");
}
@@ -9,7 +9,7 @@ import java.util.UUID;
* @author Frank
*
*/
public interface NewsItem {
public interface NewsItem extends Comparable<NewsItem> {
UUID getId();
String getCategory();
@@ -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);
}
}
@@ -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<? extends EventNewsItem> 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<? extends EventNewsItem> 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
@@ -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<? extends EventNewsItem> getNews(Event event) {
List<LeaderboardUpdateNewsItem> result = new LinkedList<>();
Iterable<LeaderboardGroup> 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<? extends EventNewsItem> 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;
}
}
@@ -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;
}
}