From 54fe07eb688a17f5f6cdd59c5b44b8f3ee792f7f Mon Sep 17 00:00:00 2001 From: Lukas Niemeier Date: Tue, 19 Nov 2013 11:58:16 +0100 Subject: [PATCH] # simplified the creation of a RaceState # added a temp method to set the start time via regattaoverview --- .../racelog/state/test/RaceStateTest.java | 4 +- .../impl/EmptyConfiguration.java | 22 ++++++++ .../racelog/state/impl/RaceStateImpl.java | 41 ++++++++++---- .../state/impl/ReadonlyRaceStateImpl.java | 34 ++++++----- .../RacingProcedureFactory.java | 10 ++++ .../impl/RacingProcedureFactoryImpl.java | 56 +++++++------------ .../impl/ReadonlyRacingProcedureFactory.java | 48 ++++++++++++++++ .../sailing/gwt/ui/client/SailingService.java | 2 + .../gwt/ui/client/SailingServiceAsync.java | 4 +- .../RegattaRaceStatesComponent.java | 19 ++++++- .../gwt/ui/server/SailingServiceImpl.java | 19 ++++++- .../impl/EventRaceStatesJsonGetServlet.java | 2 +- .../res/layout/list_fragment.xml | 3 +- .../res/values-de/strings.xml | 5 +- .../res/values/strings.xml | 1 + .../app/data/OfflineDataManager.java | 6 +- .../data/parsers/ManagedRacesDataParser.java | 3 +- .../ui/fragments/lists/NamedListFragment.java | 13 ++++- .../preference/GeneralPreferenceFragment.java | 16 ++++++ 19 files changed, 232 insertions(+), 76 deletions(-) create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/EmptyConfiguration.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/RacingProcedureFactory.java create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java index 939004691ad..6af020d726d 100644 --- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java +++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/state/test/RaceStateTest.java @@ -29,6 +29,7 @@ import com.sap.sailing.domain.racelog.state.RaceStateChangedListener; import com.sap.sailing.domain.racelog.state.impl.RaceStateImpl; import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedure; import com.sap.sailing.domain.racelog.state.racingprocedure.gate.GateStartRacingProcedure; +import com.sap.sailing.domain.racelog.state.racingprocedure.impl.RacingProcedureFactoryImpl; public class RaceStateTest { @@ -52,7 +53,8 @@ public class RaceStateTest { listener = mock(RaceStateChangedListener.class); nowMock = mock(TimePoint.class); - state = new RaceStateImpl(raceLog, author, factory, defaultRacingProcedureType, configuration); + state = new RaceStateImpl(raceLog, author, factory, defaultRacingProcedureType, + new RacingProcedureFactoryImpl(author, factory, configuration)); } @Test diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/EmptyConfiguration.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/EmptyConfiguration.java new file mode 100644 index 00000000000..9f224639c06 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/configuration/impl/EmptyConfiguration.java @@ -0,0 +1,22 @@ +package com.sap.sailing.domain.base.configuration.impl; + +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; + +public class EmptyConfiguration extends RacingProceduresConfigurationImpl implements + StoredRacingProceduresConfiguration { + + private static final long serialVersionUID = -4187341706420504456L; + + @Override + public StoredRacingProceduresConfiguration load() { + // TODO Auto-generated method stub + return this; + } + + @Override + public StoredRacingProceduresConfiguration store() { + // TODO Auto-generated method stub + return this; + } + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java index b9bc874eb3f..e6717376be3 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/RaceStateImpl.java @@ -1,8 +1,8 @@ package com.sap.sailing.domain.racelog.state.impl; import com.sap.sailing.domain.base.CourseBase; -import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.impl.EmptyConfiguration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.racelog.Flags; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; @@ -14,6 +14,7 @@ import com.sap.sailing.domain.racelog.RaceLogEventFactory; import com.sap.sailing.domain.racelog.analyzing.impl.RaceStatusAnalyzer; import com.sap.sailing.domain.racelog.state.RaceState; import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedure; +import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedureFactory; import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedurePrerequisite; import com.sap.sailing.domain.racelog.state.racingprocedure.impl.RacingProcedureFactoryImpl; import com.sap.sailing.domain.tracking.Wind; @@ -23,16 +24,41 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState { private final RaceLogEventAuthor author; private final RaceLogEventFactory factory; + /** + * Creates a {@link RaceState} with the initial racing procedure type set to a fallback value and an empty configuration. + */ + public static RaceState create(RaceLog raceLog, RaceLogEventAuthor author) { + return create(raceLog, author, RaceStateImpl.FallbackInitialProcedureType, new EmptyConfiguration()); + } + + /** + * Creates a {@link RaceState} with the initial racing procedure type set to a fallback value. + */ + public static RaceState create(RaceLog raceLog, RaceLogEventAuthor author, StoredRacingProceduresConfiguration configuration) { + return create(raceLog, author, RaceStateImpl.FallbackInitialProcedureType, configuration); + } + + /** + * Creates a {@link RaceState}. + */ + public static RaceState create(RaceLog raceLog, RaceLogEventAuthor author, RacingProcedureType initalRacingProcedureType, + StoredRacingProceduresConfiguration configuration) { + return new RaceStateImpl(raceLog, author, + RaceLogEventFactory.INSTANCE, + initalRacingProcedureType, + new RacingProcedureFactoryImpl(author, RaceLogEventFactory.INSTANCE, configuration)); + } + public RaceStateImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory eventFactory, - RacingProcedureType initalRacingProcedureType, StoredRacingProceduresConfiguration configuration) { + RacingProcedureType initalRacingProcedureType, RacingProcedureFactory procedureFactory) { this(raceLog, author, eventFactory, initalRacingProcedureType, - new RaceStatusAnalyzer.StandardClock(), configuration); + new RaceStatusAnalyzer.StandardClock(), procedureFactory); } public RaceStateImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory eventFactory, RacingProcedureType initalRacingProcedureType, RaceStatusAnalyzer.Clock analyzersClock, - StoredRacingProceduresConfiguration configuration) { - super(raceLog, initalRacingProcedureType, analyzersClock, configuration); + RacingProcedureFactory procedureFactory) { + super(raceLog, initalRacingProcedureType, analyzersClock, procedureFactory); this.author = author; this.factory = eventFactory; } @@ -134,10 +160,5 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState { public void setWindFix(TimePoint timePoint, Wind wind) { raceLog.add(factory.createWindFixEvent(timePoint, author, raceLog.getCurrentPassId(), wind)); } - - @Override - protected RacingProcedure createRacingProcedure(RacingProcedureType type, RaceLog raceLog, RacingProceduresConfiguration configuration) { - return RacingProcedureFactoryImpl.create(type, raceLog, author, factory, configuration); - } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/ReadonlyRaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/ReadonlyRaceStateImpl.java index c8ba2a5e359..618f88239f3 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/ReadonlyRaceStateImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/impl/ReadonlyRaceStateImpl.java @@ -1,8 +1,7 @@ package com.sap.sailing.domain.racelog.state.impl; import com.sap.sailing.domain.base.CourseBase; -import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; -import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.impl.EmptyConfiguration; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; @@ -27,8 +26,9 @@ import com.sap.sailing.domain.racelog.state.RaceStateChangedListener; import com.sap.sailing.domain.racelog.state.RaceStateEvent; import com.sap.sailing.domain.racelog.state.RaceStateEventScheduler; import com.sap.sailing.domain.racelog.state.ReadonlyRaceState; +import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedureFactory; import com.sap.sailing.domain.racelog.state.racingprocedure.ReadonlyRacingProcedure; -import com.sap.sailing.domain.racelog.state.racingprocedure.impl.RacingProcedureFactoryImpl; +import com.sap.sailing.domain.racelog.state.racingprocedure.impl.ReadonlyRacingProcedureFactory; import com.sap.sailing.domain.tracking.Wind; public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedListener { @@ -37,12 +37,21 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL * When trying to initialize a {@link RaceStateImpl} with an initial {@link RacingProcedureType} * of {@link RacingProcedureType#UNKNOWN} the value of this field will be used instead. */ - private final static RacingProcedureType FallbackInitialProcedureType = RacingProcedureType.RRS26; + protected final static RacingProcedureType FallbackInitialProcedureType = RacingProcedureType.RRS26; + + + /** + * Creates a {@link ReadonlyRaceState} with the initial racing procedure type set to a fallback value and an empty configuration. + */ + public static ReadonlyRaceState create(RaceLog raceLog) { + return new ReadonlyRaceStateImpl(raceLog, ReadonlyRaceStateImpl.FallbackInitialProcedureType, + new ReadonlyRacingProcedureFactory(new EmptyConfiguration())); + } protected final RaceLog raceLog; private final Clock statusAnalyzerClock; - private final StoredRacingProceduresConfiguration configuration; + private final RacingProcedureFactory procedureFactory; private final RaceStateChangedListeners changedListeners; @@ -78,14 +87,14 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL private CourseBase cachedCourseDesign; private Wind cachedWindFix; - public ReadonlyRaceStateImpl(RaceLog raceLog, StoredRacingProceduresConfiguration configuration) { - this(raceLog, RacingProcedureType.UNKNOWN, new RaceStatusAnalyzer.StandardClock(), configuration); + public ReadonlyRaceStateImpl(RaceLog raceLog, RacingProcedureType initalRacingProcedureType, RacingProcedureFactory procedureFactory) { + this(raceLog, initalRacingProcedureType, new RaceStatusAnalyzer.StandardClock(), procedureFactory); } public ReadonlyRaceStateImpl(RaceLog raceLog, RacingProcedureType initalRacingProcedureType, Clock analyzersClock, - StoredRacingProceduresConfiguration configuration) { + RacingProcedureFactory procedureFactory) { this.raceLog = raceLog; - this.configuration = configuration; + this.procedureFactory = procedureFactory; this.changedListeners = new RaceStateChangedListeners(); this.racingProcedureAnalyzer = new RacingProcedureTypeAnalyzer(raceLog); @@ -300,8 +309,7 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL removeChangedListener(racingProcedure); racingProcedure.detach(); } - RacingProceduresConfiguration loadedConfiguration = configuration.load(); - racingProcedure = createRacingProcedure(cachedRacingProcedureType, raceLog, loadedConfiguration); + racingProcedure = procedureFactory.createRacingProcedure(cachedRacingProcedureType, raceLog); racingProcedure.setStateEventScheduler(scheduler); addChangedListener(racingProcedure); @@ -309,9 +317,5 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL // let's do an update because status might have changed with new procedure update(); } - - protected ReadonlyRacingProcedure createRacingProcedure(RacingProcedureType type, RaceLog raceLog, RacingProceduresConfiguration configuration) { - return RacingProcedureFactoryImpl.createReadonly(cachedRacingProcedureType, raceLog, configuration); - } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/RacingProcedureFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/RacingProcedureFactory.java new file mode 100644 index 00000000000..8632a0ea660 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/RacingProcedureFactory.java @@ -0,0 +1,10 @@ +package com.sap.sailing.domain.racelog.state.racingprocedure; + +import com.sap.sailing.domain.common.racelog.RacingProcedureType; +import com.sap.sailing.domain.racelog.RaceLog; + +public interface RacingProcedureFactory { + + ReadonlyRacingProcedure createRacingProcedure(RacingProcedureType type, RaceLog raceLog); + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java index 05ec64becd5..a92d990d31c 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/RacingProcedureFactoryImpl.java @@ -1,45 +1,29 @@ package com.sap.sailing.domain.racelog.state.racingprocedure.impl; -import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; -import com.sap.sailing.domain.common.racelog.RacingProcedureType; -import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; import com.sap.sailing.domain.racelog.RaceLogEventAuthor; import com.sap.sailing.domain.racelog.RaceLogEventFactory; -import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedure; -import com.sap.sailing.domain.racelog.state.racingprocedure.ReadonlyRacingProcedure; -import com.sap.sailing.domain.racelog.state.racingprocedure.ess.impl.ESSRacingProcedureImpl; -import com.sap.sailing.domain.racelog.state.racingprocedure.gate.impl.GateStartRacingProcedureImpl; -import com.sap.sailing.domain.racelog.state.racingprocedure.rrs26.impl.RRS26RacingProcedureImpl; +import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedureFactory; -public class RacingProcedureFactoryImpl { +public class RacingProcedureFactoryImpl extends ReadonlyRacingProcedureFactory implements RacingProcedureFactory { - public static RacingProcedure create(RacingProcedureType type, RaceLog raceLog, RaceLogEventAuthor author, - RaceLogEventFactory factory, RacingProceduresConfiguration configuration) { - switch (type) { - case ESS: - return new ESSRacingProcedureImpl(raceLog, author, factory, configuration); - case GateStart: - return new GateStartRacingProcedureImpl(raceLog, author, factory, configuration); - case RRS26: - return new RRS26RacingProcedureImpl(raceLog, author, factory, configuration); - default: - throw new UnsupportedOperationException("Unknown racing procedure " + type.toString()); - } + private final RaceLogEventAuthor author; + private final RaceLogEventFactory factory; + + public RacingProcedureFactoryImpl(RaceLogEventAuthor author, RaceLogEventFactory factory, + StoredRacingProceduresConfiguration configuration) { + super(configuration); + this.author = author; + this.factory = factory; } - - public static ReadonlyRacingProcedure createReadonly(RacingProcedureType type, RaceLog raceLog, - RacingProceduresConfiguration configuration) { - RaceLogEventAuthor author = null; - RaceLogEventFactory factory = null; - switch (type) { - case ESS: - return new ESSRacingProcedureImpl(raceLog, author, factory, configuration); - case GateStart: - return new GateStartRacingProcedureImpl(raceLog, author, factory, configuration); - case RRS26: - return new RRS26RacingProcedureImpl(raceLog, author, factory, configuration); - default: - throw new UnsupportedOperationException("Unknown racing procedure " + type.toString()); - } + + @Override + protected RaceLogEventAuthor getAuthor() { + return author; + } + + @Override + protected RaceLogEventFactory getEventFactory() { + return factory; } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java new file mode 100644 index 00000000000..fce095fe513 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java @@ -0,0 +1,48 @@ +package com.sap.sailing.domain.racelog.state.racingprocedure.impl; + +import com.sap.sailing.domain.base.configuration.RacingProceduresConfiguration; +import com.sap.sailing.domain.base.configuration.StoredRacingProceduresConfiguration; +import com.sap.sailing.domain.common.racelog.RacingProcedureType; +import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEventAuthor; +import com.sap.sailing.domain.racelog.RaceLogEventFactory; +import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedureFactory; +import com.sap.sailing.domain.racelog.state.racingprocedure.ReadonlyRacingProcedure; +import com.sap.sailing.domain.racelog.state.racingprocedure.ess.impl.ESSRacingProcedureImpl; +import com.sap.sailing.domain.racelog.state.racingprocedure.gate.impl.GateStartRacingProcedureImpl; +import com.sap.sailing.domain.racelog.state.racingprocedure.rrs26.impl.RRS26RacingProcedureImpl; + +public class ReadonlyRacingProcedureFactory implements RacingProcedureFactory { + + private final StoredRacingProceduresConfiguration configuration; + + public ReadonlyRacingProcedureFactory(StoredRacingProceduresConfiguration configuration) { + this.configuration = configuration; + } + + protected RaceLogEventAuthor getAuthor() { + return null; + } + + protected RaceLogEventFactory getEventFactory() { + return null; + } + + @Override + public ReadonlyRacingProcedure createRacingProcedure(RacingProcedureType type, RaceLog raceLog) { + RaceLogEventAuthor author = getAuthor(); + RaceLogEventFactory factory = getEventFactory(); + RacingProceduresConfiguration loadedConfiguration = configuration.load(); + switch (type) { + case ESS: + return new ESSRacingProcedureImpl(raceLog, author, factory, loadedConfiguration); + case GateStart: + return new GateStartRacingProcedureImpl(raceLog, author, factory, loadedConfiguration); + case RRS26: + return new RRS26RacingProcedureImpl(raceLog, author, factory, loadedConfiguration); + default: + throw new UnsupportedOperationException("Unknown racing procedure " + type.toString()); + } + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index cc0ae13af66..e1cbcbcd295 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -342,4 +342,6 @@ public interface SailingService extends RemoteService { DeviceConfigurationMatcherDTO createOrUpdateDeviceConfiguration(DeviceConfigurationMatcherDTO matcherDTO, DeviceConfigurationDTO configurationDTO); boolean removeDeviceConfiguration(DeviceConfigurationMatcherDTO.Type type, List clientIds); + + void fakeNewStartTime(RegattaOverviewEntryDTO dto, Date startTime); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 7df795b71ec..0ba0e68e4df 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -465,7 +465,9 @@ public interface SailingServiceAsync { void createOrUpdateDeviceConfiguration(DeviceConfigurationMatcherDTO matcherDTO, DeviceConfigurationDTO configurationDTO, AsyncCallback callback); - void removeDeviceConfiguration(DeviceConfigurationMatcherDTO.Type type, List clientIds, AsyncCallback asyncCallback); + void removeDeviceConfiguration(DeviceConfigurationMatcherDTO.Type type, List clientIds, AsyncCallback asyncCallback); + + void fakeNewStartTime(RegattaOverviewEntryDTO dto, Date startTime, AsyncCallback callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java index 47b778c7aeb..69be231f3fd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java @@ -27,6 +27,7 @@ import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.ColumnSortEvent; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.TextColumn; +import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; @@ -56,6 +57,7 @@ import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent; import com.sap.sailing.gwt.ui.shared.ClickableSafeHtmlCell; import com.sap.sailing.gwt.ui.shared.CourseAreaDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; +import com.sap.sailing.gwt.ui.shared.RaceCourseDTO; import com.sap.sailing.gwt.ui.shared.RaceGroupDTO; import com.sap.sailing.gwt.ui.shared.RaceGroupSeriesDTO; import com.sap.sailing.gwt.ui.shared.RaceInfoDTO; @@ -415,13 +417,26 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component raceCourseColumn.setFieldUpdater(new FieldUpdater() { @Override public void update(int index, RegattaOverviewEntryDTO object, SafeHtml value) { - if (object.raceInfo.lastCourseDesign.waypoints.size() > 0) { + /*RaceCourseDTO courseDTO = object.raceInfo.lastCourseDesign; + if (courseDTO != null && courseDTO.waypoints.size() > 0) { DialogBox courseViewDialogBox = createCourseViewDialogBox(object.raceInfo); courseViewDialogBox.center(); courseViewDialogBox.setGlassEnabled(true); courseViewDialogBox.setAnimationEnabled(true); courseViewDialogBox.show(); - } + } */ + sailingService.fakeNewStartTime(object, new Date(), new AsyncCallback() { + + @Override + public void onSuccess(Void result) { + + } + + @Override + public void onFailure(Throwable caught) { + + } + }); } }); raceCourseColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 88ed855172c..c0033204d7f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -148,6 +148,7 @@ import com.sap.sailing.domain.persistence.MongoRaceLogStoreFactory; import com.sap.sailing.domain.persistence.MongoWindStoreFactory; import com.sap.sailing.domain.polarsheets.PolarSheetGenerationWorker; import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEventAuthor; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceStateOfSameDayHelper; import com.sap.sailing.domain.racelog.analyzing.impl.AbortingFlagFinder; @@ -155,7 +156,10 @@ import com.sap.sailing.domain.racelog.analyzing.impl.GateLineOpeningTimeFinder; import com.sap.sailing.domain.racelog.analyzing.impl.PathfinderFinder; import com.sap.sailing.domain.racelog.analyzing.impl.RRS26StartModeFlagFinder; import com.sap.sailing.domain.racelog.analyzing.impl.RacingProcedureTypeAnalyzer; +import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl; +import com.sap.sailing.domain.racelog.state.RaceState; import com.sap.sailing.domain.racelog.state.ReadonlyRaceState; +import com.sap.sailing.domain.racelog.state.impl.RaceStateImpl; import com.sap.sailing.domain.racelog.state.impl.ReadonlyRaceStateImpl; import com.sap.sailing.domain.racelog.state.racingprocedure.FlagPoleState; import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter; @@ -662,7 +666,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S RaceLog raceLog = raceColumn.getRaceLog(fleet); if (raceLog != null) { - ReadonlyRaceState state = new ReadonlyRaceStateImpl(raceLog, null); + ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog); TimePoint startTime = state.getStartTime(); if (startTime != null) { @@ -3379,4 +3383,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return configuration; } + @Override + public void fakeNewStartTime(RegattaOverviewEntryDTO dto, Date startTime) { + Leaderboard leaderboard = getService().getLeaderboardByName(dto.regattaName); + RaceColumn column = leaderboard.getRaceColumnByName(dto.raceInfo.raceName); + Fleet fleet = column.getFleetByName(dto.raceInfo.fleetName); + RaceLog raceLog = column.getRaceLog(fleet); + + RaceLogEventAuthor author = new RaceLogEventAuthorImpl("Shore", -1); + RaceState state = RaceStateImpl.create(raceLog, author); + state.setStartTime(MillisecondsTimePoint.now(), new MillisecondsTimePoint(startTime)); + + } + } \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java index ee5bfe7c790..f511af40c6d 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java @@ -129,7 +129,7 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet { RaceLog raceLog = raceColumn.getRaceLog(fleet); if (raceLog != null && !raceLog.isEmpty()) { - ReadonlyRaceState state = new ReadonlyRaceStateImpl(raceLog, null); + ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog); RaceLogRaceStatus status = state.getStatus(); TimePoint startTime = state.getStartTime(); TimePoint finishedTime = state.getFinishedTime(); diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/list_fragment.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/list_fragment.xml index bbaa8b583c6..e82b1227e94 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/layout/list_fragment.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/list_fragment.xml @@ -16,6 +16,7 @@ android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" - android:textIsSelectable="false" /> + android:textIsSelectable="false" + android:visibility="gone"/> \ No newline at end of file diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml index 12f52a654ab..72d1fef14e3 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml @@ -200,11 +200,12 @@ Zeitlimitdauer nach Rennende Zeit in Minuten einstellen, welches Zeitlimit angibt + Zum Übernehmen der Änderung bitte Aktion \'Neuladen\' durchführen. Erweiterte Einstellungen - Wählen sie die Server URL aus. Nach Änderung muss die Option \'Neuladen\' gewählt werden. + Server URL Webservice URL einstellen. Empfänger für Bilder der Ergebnislisten. - Empfänger Ergebnislisten + Empfänger der Ergebnislisten Wählen Sie die maximale Rundenanzahl aus. Maximale Rundenanzahl pro Kurs Wählen Sie die minimale Rundenanzahl aus. diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml index d997c8377fd..8b720bfddc8 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml @@ -201,6 +201,7 @@ Race time frame after finish Time limit in minutes. + Please execute action \'Reload\' to apply changes. Advanced Settings Webservice URL Select the JSON Webservice URL diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java index 9471e5d8422..0692ba121ab 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java @@ -100,7 +100,7 @@ public class OfflineDataManager extends DataManager { ManagedRace q1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl("A.B", new FleetImpl("A"), qualifying, raceGroup), - new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.RRS26, configuration)); + RaceStateImpl.create(log, AppPreferences.on(context).getAuthor(), RacingProcedureType.RRS26, configuration)); log = new RaceLogImpl(UUID.randomUUID()); /* @@ -110,7 +110,7 @@ public class OfflineDataManager extends DataManager { ManagedRace q2 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl("B", new FleetImpl("A.A"), qualifying, raceGroup), - new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.RRS26, configuration)); + RaceStateImpl.create(log, AppPreferences.on(context).getAuthor(), RacingProcedureType.RRS26, configuration)); log = new RaceLogImpl(UUID.randomUUID()); /* @@ -119,7 +119,7 @@ public class OfflineDataManager extends DataManager { */ ManagedRace q3 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl("Q3", new FleetImpl("Default"), qualifying, raceGroup), - new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.RRS26, configuration)); + RaceStateImpl.create(log, AppPreferences.on(context).getAuthor(), RacingProcedureType.RRS26, configuration)); /* * ManagedRace m1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl( "M1", new FleetImpl("Default"), medal, * raceGroup), null); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java index 04babc03807..0d10c52866b 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java @@ -18,7 +18,6 @@ import com.sap.sailing.domain.base.racegroup.SeriesWithRows; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLogEventAuthor; -import com.sap.sailing.domain.racelog.RaceLogEventFactory; import com.sap.sailing.domain.racelog.state.RaceState; import com.sap.sailing.domain.racelog.state.impl.RaceStateImpl; import com.sap.sailing.racecommittee.app.domain.FleetIdentifier; @@ -76,7 +75,7 @@ public class ManagedRacesDataParser implements DataParser extends LoggableListFra return new NamedArrayAdapter(context, items); } - @Override + /*@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.list_fragment, container, false); + }*/ + + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = super.onCreateView(inflater, container, savedInstanceState); + ViewGroup parent = (ViewGroup) inflater.inflate(R.layout.list_fragment, container, false); + parent.addView(v, 0); + return parent; } @Override @@ -77,6 +84,7 @@ public abstract class NamedListFragment extends LoggableListFra } private void loadItems() { + setListShown(false); getLoaderManager().restartLoader(0, null, createLoaderCallbacks(OnlineDataManager.create(getActivity()))); } @@ -98,7 +106,9 @@ public abstract class NamedListFragment extends LoggableListFra textText.setText(getHeaderText()); } + @Override public void onLoadSucceded(Collection data, boolean isCached) { + setListShown(true); namedList.clear(); namedList.addAll(data); Collections.sort(namedList, new NaturalNamedComparator()); @@ -109,6 +119,7 @@ public abstract class NamedListFragment extends LoggableListFra @Override public void onLoadFailed(Exception reason) { + setListShown(true); namedList.clear(); listAdapter.notifyDataSetChanged(); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java index 41bee8ed791..c375785ffd2 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java @@ -4,6 +4,8 @@ package com.sap.sailing.racecommittee.app.ui.fragments.preference; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.widget.Toast; import com.sap.sailing.racecommittee.app.R; @@ -14,11 +16,25 @@ public class GeneralPreferenceFragment extends BasePreferenceFragment { addPreferencesFromResource(R.xml.preference_general); setupLanguageButton(); + setupServerUrlBox(); bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_server_url_key))); bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_course_areas_key))); bindPreferenceSummaryToValue(findPreference(getString(R.string.preference_mail_key))); } + private void setupServerUrlBox() { + Preference preference = findPreference(getString(R.string.preference_server_url_key)); + preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + Toast.makeText(getActivity(), + getString(R.string.settings_please_reload), Toast.LENGTH_LONG).show(); + return true; + } + }); + } + private void setupLanguageButton() { Preference button = findPreference(getString(R.string.preference_language_key)); button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {