Notification preferences are now saved to different keys

This commit is contained in:
Steffen Schaefer committed 2016-07-11 11:25:53 +02:00
1 parent 793c2c0341
commit 72aed5a00c
7 files changed
+27 -64

No files matched your search

@@ -32,7 +32,8 @@ import com.sap.sailing.domain.polars.PolarDataService;
import com.sap.sailing.server.MasterDataImportClassLoaderService;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceMXBean;
import com.sap.sailing.server.impl.preferences.model.NotificationPreferences;
import com.sap.sailing.server.impl.preferences.model.BoatClassNotificationPreferences;
import com.sap.sailing.server.impl.preferences.model.CompetitorNotificationPreferences;
import com.sap.sse.common.TypeBasedServiceFinder;
import com.sap.sse.common.Util;
import com.sap.sse.osgi.CachedOsgiTypeBasedServiceFinderFactory;
@@ -152,9 +153,10 @@ public class Activator implements BundleActivator {
}
protected void registerPreferenceConvertersForUserStore(UserStore userStore) {
userStore.registerPreferenceConverter(NotificationPreferences.PREF_NAME,
new GenericJSONPreferenceConverter<NotificationPreferences>(
() -> new NotificationPreferences(racingEventService)));
userStore.registerPreferenceConverter(CompetitorNotificationPreferences.PREF_NAME,
new GenericJSONPreferenceConverter<>(() -> new CompetitorNotificationPreferences(racingEventService)));
userStore.registerPreferenceConverter(BoatClassNotificationPreferences.PREF_NAME,
new GenericJSONPreferenceConverter<>(() -> new BoatClassNotificationPreferences(racingEventService)));
}
public void stop(BundleContext context) throws Exception {
@@ -6,21 +6,21 @@ import java.util.Set;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.server.impl.preferences.model.BoatClassNotificationPreference;
import com.sap.sailing.server.impl.preferences.model.NotificationPreferences;
import com.sap.sailing.server.impl.preferences.model.BoatClassNotificationPreferences;
import com.sap.sse.security.PreferenceObjectBasedNotificationSet;
import com.sap.sse.security.UserStore;
public abstract class AbstractBoatClassNotificationSet
extends PreferenceObjectBasedNotificationSet<NotificationPreferences, BoatClass> {
extends PreferenceObjectBasedNotificationSet<BoatClassNotificationPreferences, BoatClass> {
public AbstractBoatClassNotificationSet(UserStore store) {
super(NotificationPreferences.PREF_NAME, store);
super(BoatClassNotificationPreferences.PREF_NAME, store);
}
@Override
protected Collection<BoatClass> calculateObjectsToNotify(NotificationPreferences preference) {
protected Collection<BoatClass> calculateObjectsToNotify(BoatClassNotificationPreferences preference) {
Set<BoatClass> result = new HashSet<>();
for (BoatClassNotificationPreference pref : preference.getBoatClassPreferences().getBoatClasses()) {
for (BoatClassNotificationPreference pref : preference.getBoatClasses()) {
if (shouldNotifyFor(pref)) {
result.add(pref.getBoatClass());
}
@@ -6,21 +6,21 @@ import java.util.Set;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.impl.preferences.model.CompetitorNotificationPreference;
import com.sap.sailing.server.impl.preferences.model.NotificationPreferences;
import com.sap.sailing.server.impl.preferences.model.CompetitorNotificationPreferences;
import com.sap.sse.security.PreferenceObjectBasedNotificationSet;
import com.sap.sse.security.UserStore;
public abstract class AbstractCompetitorNotificationSet
extends PreferenceObjectBasedNotificationSet<NotificationPreferences, Competitor> {
extends PreferenceObjectBasedNotificationSet<CompetitorNotificationPreferences, Competitor> {
public AbstractCompetitorNotificationSet(UserStore store) {
super(NotificationPreferences.PREF_NAME, store);
super(CompetitorNotificationPreferences.PREF_NAME, store);
}
@Override
protected Collection<Competitor> calculateObjectsToNotify(NotificationPreferences preference) {
protected Collection<Competitor> calculateObjectsToNotify(CompetitorNotificationPreferences preference) {
Set<Competitor> result = new HashSet<>();
for (CompetitorNotificationPreference pref : preference.getCompetitorPreferences().getCompetitors()) {
for (CompetitorNotificationPreference pref : preference.getCompetitors()) {
if (shouldNotifyFor(pref)) {
result.add(pref.getCompetitor());
}
@@ -7,11 +7,11 @@ import com.sap.sse.common.settings.generic.SettingsList;
public class BoatClassNotificationPreferences extends AbstractGenericSerializableSettings {
private static final long serialVersionUID = -3682996540081614053L;
public static final String PREF_NAME = SailingPreferences.NOTIFICATION_PREFERENCES_PREFIX + "boatclasses";
private transient SettingsList<BoatClassNotificationPreference> boatClasses;
public BoatClassNotificationPreferences(String name, AbstractGenericSerializableSettings settings,
RacingEventService racingEventService) {
super(name, settings);
public BoatClassNotificationPreferences(RacingEventService racingEventService) {
boatClasses = new SettingsList<>("boatClasses", this,
() -> new BoatClassNotificationPreference(racingEventService.getBaseDomainFactory()));
}
@@ -6,12 +6,12 @@ import com.sap.sse.common.settings.generic.SettingsList;
public class CompetitorNotificationPreferences extends AbstractGenericSerializableSettings {
private static final long serialVersionUID = -3682996540081614053L;
public static final String PREF_NAME = SailingPreferences.NOTIFICATION_PREFERENCES_PREFIX + "competitors";
private transient SettingsList<CompetitorNotificationPreference> competitors;
public CompetitorNotificationPreferences(String name, AbstractGenericSerializableSettings settings,
RacingEventService racingEventService) {
super(name, settings);
public CompetitorNotificationPreferences(RacingEventService racingEventService) {
competitors = new SettingsList<>("competitors", this,
() -> new CompetitorNotificationPreference(racingEventService.getCompetitorStore()));
}
@@ -1,44 +0,0 @@
package com.sap.sailing.server.impl.preferences.model;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.common.settings.generic.AbstractGenericSerializableSettings;
/**
* Preferences for Sailing users that define for which Objects a user wants to receive specific notifications.
* This currently includes:
* <ul>
* <li>Results for a favorite Competitor</li>
* <li>Results for a favorite BoatClass</li>
* <li>Upcoming races for a favorite BoatClass</li>
* </ul>
*/
public class NotificationPreferences extends AbstractGenericSerializableSettings {
private static final long serialVersionUID = 8865010526321472376L;
public static final String PREF_NAME = "sailing.notifications";
private transient BoatClassNotificationPreferences boatClassPreferences;
private transient CompetitorNotificationPreferences competitorPreferences;
public NotificationPreferences(RacingEventService racingEventService) {
boatClassPreferences = new BoatClassNotificationPreferences("boatClassPreferences", this, racingEventService);
competitorPreferences = new CompetitorNotificationPreferences("competitorPreferences", this, racingEventService);
}
@Override
protected void addChildSettings() {
// We do not create the Setting instances here, because access to the RacingEventService would not be given.
// Doing this, Java/GWT Serialization isn't working anymore. Because the preferences are only serialized as JSON
// in the backend an transferred as DTO to the frontend, this isn't a problem. Due to usage of BoatClass and
// Competitor domain objects, it wouldn't be GWT compatible anyway.
// The usage of Java Serialization isn't planned by now too.
}
public BoatClassNotificationPreferences getBoatClassPreferences() {
return boatClassPreferences;
}
public CompetitorNotificationPreferences getCompetitorPreferences() {
return competitorPreferences;
}
}
@@ -0,0 +1,5 @@
package com.sap.sailing.server.impl.preferences.model;
public interface SailingPreferences {
public static final String NOTIFICATION_PREFERENCES_PREFIX = "sailing.notifications.";
}