From 783a46eb4e03dd03981ed7587db06db36de056d8 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Thu, 11 Jun 2015 16:32:07 +0200 Subject: [PATCH] Initial implementation to generate sample news entries --- .../sailing/gwt/server/HomeServiceImpl.java | 24 ------ .../sailing/gwt/ui/client/HomeService.java | 5 -- .../gwt/ui/client/HomeServiceAsync.java | 5 -- .../ui/server/dispatch/DispatchRPCImpl.java | 5 +- .../ui/shared/dispatch/DispatchContext.java | 3 + .../shared/dispatch/DispatchContextImpl.java | 9 ++- .../event/GetEventOverviewStageAction.java | 80 ++++++++++--------- .../dispatch/news/InfoNewsEntryDTO.java | 12 +-- .../news/LeaderboardNewsEntryDTO.java | 6 +- .../news/impl/AbstractEventNewsItem.java | 2 +- .../sailing/news/impl/InfoEventNewsItem.java | 17 ++++ .../impl/SimpleDemoEventNewsProvider.java | 23 +++++- 12 files changed, 108 insertions(+), 83 deletions(-) create mode 100644 java/com.sap.sailing.news/src/com/sap/sailing/news/impl/InfoEventNewsItem.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java index 22483a81efb..aa6a230e203 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceImpl.java @@ -32,8 +32,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.gwt.ui.client.HomeService; import com.sap.sailing.gwt.ui.server.Activator; import com.sap.sailing.gwt.ui.server.ProxiedRemoteServiceServlet; -import com.sap.sailing.gwt.ui.shared.dispatch.news.InfoNewsEntryDTO; -import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO; import com.sap.sailing.gwt.ui.shared.eventlist.EventListEventDTO; import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO; import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO; @@ -51,8 +49,6 @@ 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; -import com.sap.sailing.news.EventNewsItem; -import com.sap.sailing.news.EventNewsService; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; @@ -78,23 +74,17 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home private static final int MAX_VIDEO_COUNT = 3; private final ServiceTracker racingEventServiceTracker; - private final ServiceTracker eventNewsServiceTracker; public HomeServiceImpl() { BundleContext context = Activator.getDefault(); racingEventServiceTracker = ServiceTrackerFactory.createAndOpen(context, RacingEventService.class); - eventNewsServiceTracker = ServiceTrackerFactory.createAndOpen(context, EventNewsService.class); } protected RacingEventService getService() { return racingEventServiceTracker.getService(); } - protected EventNewsService getEventNewsService() { - return eventNewsServiceTracker.getService(); - } - private interface EventVisitor { void visit(EventBase event, boolean onRemoteServer, URL baseURL); } @@ -435,20 +425,6 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home return dto; } - @Override - public List getNewsForEvent(UUID eventId, Date lastNewsDate) { - List result = new ArrayList(); - - Event event = getService().getEvent(eventId); - List newsItems = getEventNewsService().getNews(event, lastNewsDate); - - for(EventNewsItem newsItem: newsItems) { - NewsEntryDTO newsDTO = new InfoNewsEntryDTO(newsItem.getTitle(), newsItem.getMessage(), newsItem.getCreatedAtDate()); - result.add(newsDTO); - } - return result; - } - @Override public MediaDTO getMediaForEvent(UUID eventId) { Event event = getService().getEvent(eventId); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeService.java index baa4a9ef4c0..e18d41f1e20 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeService.java @@ -1,11 +1,8 @@ package com.sap.sailing.gwt.ui.client; -import java.util.Date; -import java.util.List; import java.util.UUID; import com.google.gwt.user.client.rpc.RemoteService; -import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO; import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO; import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO; import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO; @@ -21,8 +18,6 @@ public interface HomeService extends RemoteService { MediaDTO getMediaForEventSeries(UUID seriesId); - List getNewsForEvent(UUID eventId, Date lastNewsDate); - EventListViewDTO getEventListView() throws Exception; StartViewDTO getStartView() throws Exception; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeServiceAsync.java index 4b95ea0b330..3be0108d7e8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/HomeServiceAsync.java @@ -1,11 +1,8 @@ package com.sap.sailing.gwt.ui.client; -import java.util.Date; -import java.util.List; import java.util.UUID; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.sap.sailing.gwt.ui.shared.dispatch.news.NewsEntryDTO; import com.sap.sailing.gwt.ui.shared.eventlist.EventListViewDTO; import com.sap.sailing.gwt.ui.shared.eventview.EventViewDTO; import com.sap.sailing.gwt.ui.shared.fakeseries.EventSeriesViewDTO; @@ -20,8 +17,6 @@ public interface HomeServiceAsync { void getEventViewById(UUID id, AsyncCallback callback); void getEventSeriesViewById(UUID id, AsyncCallback asyncCallback); - - void getNewsForEvent(UUID eventId, Date lastNewsDate, AsyncCallback> callback); void getMediaForEvent(UUID eventId, AsyncCallback callback); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java index 3514b566ec4..f5b63215fe3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/dispatch/DispatchRPCImpl.java @@ -12,6 +12,7 @@ import com.sap.sailing.gwt.ui.shared.dispatch.RequestWrapper; import com.sap.sailing.gwt.ui.shared.dispatch.Result; import com.sap.sailing.gwt.ui.shared.dispatch.ResultWrapper; import com.sap.sailing.gwt.ui.shared.dispatch.rpc.DispatchRPC; +import com.sap.sailing.news.EventNewsService; import com.sap.sailing.server.RacingEventService; import com.sap.sse.util.ServiceTrackerFactory; @@ -19,16 +20,18 @@ public class DispatchRPCImpl extends ProxiedRemoteServiceServlet implements Disp private static final long serialVersionUID = -245230476512348999L; private final ServiceTracker racingEventServiceTracker; + private final ServiceTracker eventNewsServiceTracker; public DispatchRPCImpl() { final BundleContext context = Activator.getDefault(); racingEventServiceTracker = ServiceTrackerFactory.createAndOpen(context, RacingEventService.class); + eventNewsServiceTracker = ServiceTrackerFactory.createAndOpen(context, EventNewsService.class); } @Override public > ResultWrapper execute(RequestWrapper request) throws DispatchException { - R executionResult = request.getAction().execute(new DispatchContextImpl(request.getCurrentClientTime(), racingEventServiceTracker.getService(), request.getClientLocaleName())); + R executionResult = request.getAction().execute(new DispatchContextImpl(request.getCurrentClientTime(), racingEventServiceTracker.getService(), eventNewsServiceTracker.getService(), request.getClientLocaleName())); return new ResultWrapper(executionResult); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java index 8ea041e4819..ae000b8a3cb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContext.java @@ -3,12 +3,15 @@ package com.sap.sailing.gwt.ui.shared.dispatch; import java.util.Date; import java.util.Locale; +import com.sap.sailing.news.EventNewsService; import com.sap.sailing.server.RacingEventService; public interface DispatchContext { RacingEventService getRacingEventService(); + + EventNewsService getEventNewsService(); String getClientLocaleName(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java index 1813050dcaf..a99966322fa 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/DispatchContextImpl.java @@ -3,18 +3,21 @@ package com.sap.sailing.gwt.ui.shared.dispatch; import java.util.Date; import java.util.Locale; +import com.sap.sailing.news.EventNewsService; import com.sap.sailing.server.RacingEventService; public class DispatchContextImpl implements DispatchContext { private final RacingEventService racingEventService; + private final EventNewsService eventNewsService; private final Date currentClientTime; // private final Date currentServerTime = new Date(); private String clientLocaleName; - public DispatchContextImpl(Date currentClientTime, RacingEventService racingEventService, String clientLocaleName) { + public DispatchContextImpl(Date currentClientTime, RacingEventService racingEventService, EventNewsService eventNewsService, String clientLocaleName) { this.currentClientTime = currentClientTime; this.racingEventService = racingEventService; + this.eventNewsService = eventNewsService; this.clientLocaleName = clientLocaleName; } @@ -23,6 +26,10 @@ public class DispatchContextImpl implements DispatchContext { return racingEventService; } + public EventNewsService getEventNewsService() { + return eventNewsService; + } + @Override public Date getCurrentClientTime() { return currentClientTime; 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 de2c5d47694..e136eea7570 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 @@ -1,23 +1,20 @@ package com.sap.sailing.gwt.ui.shared.dispatch.event; import java.net.URL; -import java.util.Date; +import java.util.List; import java.util.UUID; import com.google.gwt.core.shared.GwtIncompatible; import com.sap.sailing.domain.base.Event; -import com.sap.sailing.domain.common.BoatClassMasterdata; -import com.sap.sailing.domain.common.LeaderboardNameConstants; -import com.sap.sailing.domain.common.dto.CompetitorDTOImpl; 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; 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.dispatch.news.RaceCompetitorNewsEntryDTO; 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.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.media.MimeType; @@ -48,7 +45,7 @@ public class GetEventOverviewStageAction implements Action(ttl, stage); } @@ -129,37 +126,46 @@ public class GetEventOverviewStageAction implements Action newsItems = dispatchContext.getEventNewsService().getNews(event, event.getStartDate().asDate()); + + for(EventNewsItem newsItem: newsItems) { + if(newsItem instanceof InfoEventNewsItem) { + stage.addNews(new InfoNewsEntryDTO((InfoEventNewsItem) newsItem)); + } } - sb.append(raceName); - if(fleetName != null && !fleetName.isEmpty() && !LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName)) { - sb.append(" - ").append(fleetName); - } - return sb.toString(); +// TODO test contents +// +// boolean singleRegatta = HomeServiceUtil.isSingleRegatta(event); +// +// stage.addNews(new InfoNewsEntryDTO("Sturm", "Heute keine Rennen mehr", new Date(new Date().getTime() - 125000))); +// stage.addNews(new InfoNewsEntryDTO("Abendbespaßung", "Es gibt Freibier und Wurst!!!", new Date())); +// stage.addNews(new LeaderboardNewsEntryDTO("Test LB", "505 m", BoatClassMasterdata._5O5.getDisplayName(), new Date(new Date().getTime() - 120000), LeaderboardNewsEntryDTO.Type.NEW_RESULTS)); +// +// LeaderboardNewsEntryDTO lbEntryWithExternalLink = new LeaderboardNewsEntryDTO("Test LB", "Some Regatta", BoatClassMasterdata.LASER_RADIAL.getDisplayName(), new Date(new Date().getTime() - 270000), LeaderboardNewsEntryDTO.Type.NEW_RESULTS); +// lbEntryWithExternalLink.setExternalURL("http://www.sap.com/"); +// stage.addNews(lbEntryWithExternalLink); +// +// CompetitorDTOImpl testCompetitor = new CompetitorDTOImpl("Peter Mayer", null, null, null, null, null, null, null, null, null, null, null, null); +// String regattaName = "470 Men"; +// String race6 = constructRaceName(regattaName, "R6", "Gold", singleRegatta); +// stage.addNews(new RaceCompetitorNewsEntryDTO(regattaName, "470 R6", race6, BoatClassMasterdata.PIRATE.getDisplayName(), new Date(new Date().getTime() - 1888000), testCompetitor, RaceCompetitorNewsEntryDTO.Type.CRASH)); +// String race7 = constructRaceName(regattaName, "R7", "Gold", singleRegatta); +// stage.addNews(new RaceCompetitorNewsEntryDTO(regattaName, "470 R7", race7, BoatClassMasterdata.PIRATE.getDisplayName(), new Date(new Date().getTime() - 1337000), testCompetitor, RaceCompetitorNewsEntryDTO.Type.WINNER)); } +// +// private String constructRaceName(String regattaDisplayName, String raceName, String fleetName, boolean singleRegatta) { +// StringBuilder sb = new StringBuilder(); +// if(!singleRegatta) { +// sb.append(regattaDisplayName).append(" - "); +// } +// sb.append(raceName); +// if(fleetName != null && !fleetName.isEmpty() && !LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName)) { +// sb.append(" - ").append(fleetName); +// } +// return sb.toString(); +// } } 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 a9c3b9a2378..0847e00aad9 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 @@ -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.InfoEventNewsItem; public class InfoNewsEntryDTO extends NewsEntryDTO { @@ -11,10 +12,11 @@ public class InfoNewsEntryDTO extends NewsEntryDTO { private InfoNewsEntryDTO() { } - public InfoNewsEntryDTO(String title, String subtitle, Date timestamp) { - super(timestamp); - this.title = title; - this.subtitle = subtitle; + @GwtIncompatible + public InfoNewsEntryDTO(InfoEventNewsItem item) { + super(item.getCreatedAtDate()); + this.title = item.getTitle(); + this.subtitle = item.getMessage(); } @Override 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 6d3261135ee..028892132cb 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 @@ -5,7 +5,7 @@ import java.util.Date; public class LeaderboardNewsEntryDTO extends NewsEntryDTO { public enum Type { - NEW_RESULTS + RESULTS_UPDATE } private String leaderboardName; @@ -39,8 +39,8 @@ public class LeaderboardNewsEntryDTO extends NewsEntryDTO { @Override public String getMessage() { switch (type) { - case NEW_RESULTS: - return "New results are available"; + case RESULTS_UPDATE: + return "Result update"; } return ""; } diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractEventNewsItem.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractEventNewsItem.java index 21efebe2d4f..1dd93a2abde 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractEventNewsItem.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/AbstractEventNewsItem.java @@ -6,7 +6,7 @@ import java.util.UUID; import com.sap.sailing.news.EventNewsItem; -public class AbstractEventNewsItem extends AbstractNewsItem implements EventNewsItem { +public abstract class AbstractEventNewsItem extends AbstractNewsItem implements EventNewsItem { private UUID eventId; public AbstractEventNewsItem(UUID eventId, String title, String message, Date createdAtDate, String category, URL relatedItemLink) { diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/InfoEventNewsItem.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/InfoEventNewsItem.java new file mode 100644 index 00000000000..f0b6f7c76c0 --- /dev/null +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/InfoEventNewsItem.java @@ -0,0 +1,17 @@ +package com.sap.sailing.news.impl; + +import java.net.URL; +import java.util.Date; +import java.util.UUID; + +public class InfoEventNewsItem extends AbstractEventNewsItem { + public InfoEventNewsItem(UUID eventId, String title, String message, Date createdAtDate, String category, + URL relatedItemLink) { + super(eventId, title, message, createdAtDate, category, relatedItemLink); + } + + public InfoEventNewsItem(UUID eventId, String title, String message, Date createdAtDate, String category) { + super(eventId, title, message, createdAtDate, category); + } + +} diff --git a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/SimpleDemoEventNewsProvider.java b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/SimpleDemoEventNewsProvider.java index 5511e718901..8331877fdb3 100644 --- a/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/SimpleDemoEventNewsProvider.java +++ b/java/com.sap.sailing.news/src/com/sap/sailing/news/impl/SimpleDemoEventNewsProvider.java @@ -3,6 +3,9 @@ package com.sap.sailing.news.impl; import java.util.Collection; import java.util.Date; import java.util.LinkedList; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; import com.sap.sailing.domain.base.Event; import com.sap.sailing.news.EventNewsItem; @@ -10,12 +13,30 @@ import com.sap.sailing.news.EventNewsProvider; import com.sap.sailing.news.LimitedQueue; public class SimpleDemoEventNewsProvider implements EventNewsProvider { - private final LinkedList newsQueue; + private final LinkedList newsQueue; + + private final Timer timer = new Timer(); public SimpleDemoEventNewsProvider() { newsQueue = new LimitedQueue<>(10); + + final UUID eventId = UUID.fromString("406cffc2-b491-4f7e-b78e-a21abd97006a"); +// final UUID eventId = UUID.fromString("406cffc2-b491-4f7e-b78e-a21abd97006a"); + + timer.scheduleAtFixedRate(new TimerTask() { + int counter=1; + @Override + public void run() { + newsQueue.add(new InfoEventNewsItem(eventId, "Test Entry " + counter, "Content for Test Entry "+counter, new Date(), null)); + counter++; + } + }, 5_000, 30_000); } + protected void finalize() throws Throwable { + timer.cancel(); + }; + @Override public Collection getNews(Event event) { // Iterable leaderboardGroups = event.getLeaderboardGroups();