Merge remote-tracking branch 'origin/master' into bug2483

This commit is contained in:
fmittag committed 2015-04-20 19:57:13 +02:00
commit 0ef68c4da6
294 files changed
+3572 -2233

No files matched your search

@@ -8,10 +8,14 @@ public class NullProcessor<InputType, ResultType> extends AbstractProcessor<Inpu
public NullProcessor(Class<InputType> inputType, Class<ResultType> resultType) {
super(inputType, resultType);
}
@Override
public boolean canProcessElements() {
return true;
}
@Override
public void processElement(InputType element) {
}
@Override
@@ -21,12 +25,20 @@ public class NullProcessor<InputType, ResultType> extends AbstractProcessor<Inpu
@Override
public void finish() throws InterruptedException {
}
@Override
public boolean isFinished() {
return false;
}
@Override
public void abort() {
}
@Override
public boolean isAborted() {
return false;
}
@Override
@@ -4,16 +4,16 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import com.sap.sailing.datamining.data.HasRaceResultOfCompetitorContext;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasRaceResultOfCompetitorContext;
import com.sap.sailing.datamining.impl.data.RaceResultOfCompetitorWithContext;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class CompetitorOfRaceInLeaderboardRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<HasLeaderboardContext, HasRaceResultOfCompetitorContext> {
AbstractRetrievalProcessor<HasLeaderboardContext, HasRaceResultOfCompetitorContext> {
public CompetitorOfRaceInLeaderboardRetrievalProcessor(ExecutorService executor,
Collection<Processor<HasRaceResultOfCompetitorContext, ?>> resultReceivers, int retrievalLevel) {
@@ -12,9 +12,9 @@ import com.sap.sailing.domain.common.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.GPSFixTrack;
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class GPSFixRetrievalProcessor extends AbstractSimpleRetrievalProcessor<HasTrackedLegOfCompetitorContext, HasGPSFixContext> {
public class GPSFixRetrievalProcessor extends AbstractRetrievalProcessor<HasTrackedLegOfCompetitorContext, HasGPSFixContext> {
public GPSFixRetrievalProcessor(ExecutorService executor, Collection<Processor<HasGPSFixContext, ?>> resultReceivers, int retrievalLevel) {
super(HasTrackedLegOfCompetitorContext.class, HasGPSFixContext.class, executor, resultReceivers, retrievalLevel);
@@ -8,10 +8,9 @@ import com.sap.sailing.datamining.impl.data.LeaderboardGroupWithContext;
import com.sap.sailing.polars.PolarDataService;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class LeaderboardGroupRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<RacingEventService, LeaderboardGroupWithContext> {
public class LeaderboardGroupRetrievalProcessor extends AbstractRetrievalProcessor<RacingEventService, LeaderboardGroupWithContext> {
public LeaderboardGroupRetrievalProcessor(ExecutorService executor,
Collection<Processor<LeaderboardGroupWithContext, ?>> resultReceivers, int retrievalLevel) {
@@ -9,10 +9,9 @@ import com.sap.sailing.datamining.impl.data.LeaderboardGroupWithContext;
import com.sap.sailing.datamining.impl.data.LeaderboardWithContext;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class LeaderboardRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<LeaderboardGroupWithContext, HasLeaderboardContext> {
public class LeaderboardRetrievalProcessor extends AbstractRetrievalProcessor<LeaderboardGroupWithContext, HasLeaderboardContext> {
public LeaderboardRetrievalProcessor(ExecutorService executor,
Collection<Processor<HasLeaderboardContext, ?>> resultReceivers, int retrievalLevel) {
@@ -1,11 +1,11 @@
package com.sap.sailing.datamining.impl.components;
import java.util.Collection;
import java.util.HashSet;
import java.util.NavigableSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.HashSet;
import com.sap.sailing.datamining.data.HasMarkPassingContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.data.MarkPassingWithContext;
@@ -13,10 +13,9 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class MarkPassingRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<HasTrackedRaceContext, HasMarkPassingContext> {
public class MarkPassingRetrievalProcessor extends AbstractRetrievalProcessor<HasTrackedRaceContext, HasMarkPassingContext> {
public MarkPassingRetrievalProcessor(ExecutorService executor,
Collection<Processor<HasMarkPassingContext, ?>> resultReceivers, int retrievalLevel) {
@@ -9,10 +9,9 @@ import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.datamining.impl.data.TrackedLegOfCompetitorWithContext;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class TrackedLegOfCompetitorRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<HasTrackedLegContext, HasTrackedLegOfCompetitorContext> {
public class TrackedLegOfCompetitorRetrievalProcessor extends AbstractRetrievalProcessor<HasTrackedLegContext, HasTrackedLegOfCompetitorContext> {
public TrackedLegOfCompetitorRetrievalProcessor(ExecutorService executor,
Collection<Processor<HasTrackedLegOfCompetitorContext, ?>> resultReceivers, int retrievalLevel) {
@@ -9,10 +9,9 @@ import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.data.TrackedLegWithContext;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class TrackedLegRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<HasTrackedRaceContext, HasTrackedLegContext> {
public class TrackedLegRetrievalProcessor extends AbstractRetrievalProcessor<HasTrackedRaceContext, HasTrackedLegContext> {
public TrackedLegRetrievalProcessor(ExecutorService executor,
Collection<Processor<HasTrackedLegContext, ?>> resultReceivers, int retrievalLevel) {
@@ -12,10 +12,9 @@ import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractSimpleRetrievalProcessor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
public class TrackedRaceRetrievalProcessor extends
AbstractSimpleRetrievalProcessor<HasLeaderboardContext, HasTrackedRaceContext> {
public class TrackedRaceRetrievalProcessor extends AbstractRetrievalProcessor<HasLeaderboardContext, HasTrackedRaceContext> {
public TrackedRaceRetrievalProcessor(ExecutorService executor,
Collection<Processor<HasTrackedRaceContext, ?>> resultReceivers, int retrievalLevel) {
@@ -3,8 +3,9 @@ package com.sap.sailing.domain.common;
import java.io.Serializable;
import com.sap.sailing.domain.common.impl.WindSpeedSteppingWithMaxDistance;
import com.sap.sse.common.settings.Settings;
public interface PolarSheetGenerationSettings extends Serializable {
public interface PolarSheetGenerationSettings extends Serializable, Settings {
Integer getMinimumDataCountPerGraph();
@@ -33,6 +33,8 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
*/
CompetitorDTO getCompetitorFromPrevious(LeaderboardDTO previousVersion);
String getFlagImageURL();
String getImageURL();
}
@@ -24,11 +24,12 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
private String idAsString;
private BoatClassDTO boatClass;
private String imageURL;
private String flagImageURL;
public CompetitorDTOImpl() {}
public CompetitorDTOImpl(String name, Color color, String email, String twoLetterIsoCountryCode, String threeLetterIocCountryCode,
String countryName, String sailID, String idAsString, String imageURL, BoatClassDTO boatClass) {
String countryName, String sailID, String idAsString, String imageURL, String flagImageURL, BoatClassDTO boatClass) {
super(name);
this.color = color;
this.email = email;
@@ -37,8 +38,9 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
this.countryName = countryName;
this.sailID = sailID;
this.idAsString = idAsString;
this.boatClass = boatClass;
this.imageURL = imageURL;
this.flagImageURL = flagImageURL;
this.boatClass = boatClass;
}
@Override
@@ -52,6 +54,7 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((threeLetterIocCountryCode == null) ? 0 : threeLetterIocCountryCode.hashCode());
result = prime * result + ((imageURL == null) ? 0 : imageURL.hashCode());
result = prime * result + ((flagImageURL == null) ? 0 : flagImageURL.hashCode());
return result;
}
@@ -99,6 +102,11 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
return false;
} else if (!imageURL.equals(other.imageURL))
return false;
if (flagImageURL == null) {
if (other.flagImageURL != null)
return false;
} else if (!flagImageURL.equals(other.flagImageURL))
return false;
return true;
}
@@ -127,6 +135,11 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
return imageURL;
}
@Override
public String getFlagImageURL() {
return flagImageURL;
}
@Override
public String getIdAsString() {
return idAsString;
@@ -105,6 +105,12 @@ public class PreviousCompetitorDTOImpl implements CompetitorDTO {
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
}
@Override
public String getFlagImageURL() {
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
}
@Override
public CompetitorDTO getCompetitorFromPrevious(LeaderboardDTO previousVersion) {
return previousVersion.competitors.get(indexInPreviousCompetitorList);
@@ -4,8 +4,9 @@ import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.common.PolarSheetGenerationSettings;
import com.sap.sse.common.settings.AbstractSettings;
public class PolarSheetGenerationSettingsImpl implements PolarSheetGenerationSettings {
public class PolarSheetGenerationSettingsImpl extends AbstractSettings implements PolarSheetGenerationSettings {
public static PolarSheetGenerationSettings createStandardPolarSettings() {
double[] levels = { 4., 6., 8., 10., 12., 14., 16., 20., 25., 30. };
@@ -40,7 +40,7 @@ public class AbstractGPSFixStoreTest {
protected final DeviceIdentifier device = new SmartphoneImeiIdentifier("a");
protected RaceLog raceLog;
protected GPSFixStore store;
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null);
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null);
protected final Mark mark = DomainFactory.INSTANCE.getOrCreateMark("mark");
private final AbstractLogEventAuthor author = new LogEventAuthorImpl("author", 0);
@@ -168,7 +168,7 @@ public class CreateAndTrackWithRaceLogTest {
assertFalse(raceLog.isEmpty());
// add a mapping and one fix in, one out of mapping
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null);
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null, null);
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, t(0), t(10)));
addFixes0(dev1);
@@ -202,7 +202,7 @@ public class CreateAndTrackWithRaceLogTest {
adapter.denoteRaceForRaceLogTracking(service, leaderboard, column, fleet, "race");
// add a mapping and one fix in, one out of mapping
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null);
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null, null);
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), author, t(), UUID.randomUUID(), comp1, dev1,
t(0), t(10)));
@@ -49,7 +49,7 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
@Test
public void areFixesStoredInDb() throws TransformationException, NoCorrespondingServiceRegisteredException,
InterruptedException {
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", null, null, null, null);
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", null, null, null, null, null);
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
DeviceIdentifier device2 = new SmartphoneImeiIdentifier("imei2");
DeviceIdentifier device3 = new SmartphoneImeiIdentifier("imei3");
@@ -52,7 +52,7 @@ public class MultiLogAnalyzerTest {
private AbstractLogEventAuthor author;
private static Competitor createCompetitor(int n) {
return new CompetitorImpl(n, n + "", null, null, null, null);
return new CompetitorImpl(n, n + "", null, null, null, null, null);
}
private static DeviceIdentifier createDevice() {
@@ -22,8 +22,8 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class DeviceMappingFinderTest extends AbstractRaceLogTrackingTest {
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null, null);
private final Competitor competitor2 = new CompetitorImpl("comp2", "Comp2", null, null, null, null);
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null, null, null);
private final Competitor competitor2 = new CompetitorImpl("comp2", "Comp2", null, null, null, null, null);
private final DeviceIdentifier device = new SmartphoneImeiIdentifier("imei");
private int time = 0;
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.base;
import java.net.URI;
import com.sap.sse.common.Color;
import com.sap.sse.common.IsManagedByCache;
import com.sap.sse.common.Named;
@@ -18,7 +20,13 @@ public interface Competitor extends Named, WithID, IsManagedByCache<SharedDomain
String getEmail();
boolean hasEmail();
/**
* an alternative flag image (per default the nation flag
* @return the URI of the flag image
*/
URI getFlagImage();
/**
* Adds a listener to this competitor. The listener is also added to the boat and the team for changes.
* Adding a listener that is already part of this competitor's listeners set remains without effect.
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.base;
import java.io.Serializable;
import java.net.URI;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
@@ -26,5 +27,5 @@ public interface CompetitorFactory {
*/
boolean isCompetitorToUpdateDuringGetOrCreate(Competitor result);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImageURI, DynamicTeam team, DynamicBoat boat);
}
@@ -64,7 +64,7 @@ public interface CompetitorStore extends CompetitorFactory {
* If no competitor with the ID requested is found, the call is a no-op, doing nothing, not even throwing an exception.
*/
Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
Nationality newNationality, URI newTeamImageUri);
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri);
CompetitorDTO convertToCompetitorDTO(Competitor c);
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.base.impl;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.net.URI;
import java.util.HashSet;
import java.util.Set;
@@ -21,14 +22,16 @@ public class CompetitorImpl implements DynamicCompetitor {
private Color color;
private transient Set<CompetitorChangeListener> listeners;
private String email;
private URI flagImage;
public CompetitorImpl(Serializable id, String name, Color color, String email, DynamicTeam team, DynamicBoat boat) {
public CompetitorImpl(Serializable id, String name, Color color, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
this.id = id;
this.name = name;
this.team = team;
this.boat = boat;
this.color = color;
this.email = email;
this.flagImage = flagImage;
this.listeners = new HashSet<CompetitorChangeListener>();
}
@@ -75,7 +78,7 @@ public class CompetitorImpl implements DynamicCompetitor {
@Override
public Competitor resolve(SharedDomainFactory domainFactory) {
Competitor result = domainFactory.getOrCreateCompetitor(getId(), getName(), getColor(), getEmail(), getTeam(), getBoat());
Competitor result = domainFactory.getOrCreateCompetitor(getId(), getName(), getColor(), getEmail(), getFlagImage(), getTeam(), getBoat());
return result;
}
@@ -134,4 +137,14 @@ public class CompetitorImpl implements DynamicCompetitor {
public boolean hasEmail(){
return email != null && !email.isEmpty();
}
@Override
public URI getFlagImage() {
return flagImage;
}
@Override
public void setFlagImage(URI flagImage) {
this.flagImage = flagImage;
}
}
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.base.impl;
import java.net.URI;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.Renamable;
import com.sap.sse.common.Color;
@@ -12,4 +14,6 @@ public interface DynamicCompetitor extends Competitor, Renamable {
void setColor(Color displayColor);
void setEmail(String email);
void setFlagImage(URI flagImage);
}
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -332,11 +333,11 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory {
}
@Override
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
if (logger.isLoggable(Level.FINEST)) {
logger.log(Level.FINEST, "getting or creating competitor "+name+" with ID "+competitorId+" in domain factory "+this);
}
return getCompetitorStore().getOrCreateCompetitor(competitorId, name, displayColor, email, team, boat);
return getCompetitorStore().getOrCreateCompetitor(competitorId, name, displayColor, email, flagImage, team, boat);
}
@Override
@@ -68,8 +68,8 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
listeners.remove(listener);
}
private Competitor createCompetitor(Serializable id, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
Competitor result = new CompetitorImpl(id, name, displayColor, email, team, boat);
private Competitor createCompetitor(Serializable id, String name, Color displayColor, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
Competitor result = new CompetitorImpl(id, name, displayColor, email, flagImage, team, boat);
addNewCompetitor(id, result);
if (logger.isLoggable(Level.FINEST)) {
logger.log(Level.FINEST, "Created competitor "+name+" with ID "+id, new Exception("Here is where it happened"));
@@ -93,21 +93,21 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
}
@Override
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
Competitor result = getExistingCompetitorById(competitorId); // avoid synchronization for successful read access
if (result == null) {
LockUtil.lockForWrite(lock);
try {
result = getExistingCompetitorById(competitorId); // try again, now while holding the write lock
if (result == null) {
result = createCompetitor(competitorId, name, displayColor, email, team, boat);
result = createCompetitor(competitorId, name, displayColor, email, flagImage, team, boat);
}
} finally {
LockUtil.unlockAfterWrite(lock);
}
} else if (isCompetitorToUpdateDuringGetOrCreate(result)) {
updateCompetitor(result.getId().toString(), name, displayColor, email, boat.getSailID(), team.getNationality(),
team.getImage());
team.getImage(), flagImage);
competitorNoLongerToUpdateDuringGetOrCreate(result);
}
return result;
@@ -192,7 +192,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
@Override
public Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
Nationality newNationality, URI newTeamImageUri) {
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri) {
DynamicCompetitor competitor = (DynamicCompetitor) getExistingCompetitorByIdAsString(idAsString);
if (competitor != null) {
LockUtil.lockForWrite(lock);
@@ -200,6 +200,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
competitor.setName(newName);
competitor.setColor(newDisplayColor);
competitor.setEmail(newEmail);
competitor.setFlagImage(newFlagImageUri);
competitor.getBoat().setSailId(newSailId);
competitor.getTeam().setNationality(newNationality);
competitor.getTeam().setImage(newTeamImageUri);
@@ -233,7 +234,9 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
competitorDTO = new CompetitorDTOImpl(c.getName(), c.getColor(), c.getEmail(), countryCode == null ? ""
: countryCode.getTwoLetterISOCode(), countryCode == null ? ""
: countryCode.getThreeLetterIOCCode(), countryCode == null ? "" : countryCode.getName(),
c.getBoat().getSailID(), c.getId().toString(), c.getTeam().getImage() == null ? null : c.getTeam().getImage().toString(),
c.getBoat().getSailID(), c.getId().toString(),
c.getTeam().getImage() == null ? null : c.getTeam().getImage().toString(),
c.getFlagImage() == null ? null : c.getFlagImage().toString(),
new BoatClassDTO(c.getBoat().getBoatClass()
.getName(), c.getBoat().getBoatClass().getDisplayName(), c.getBoat().getBoatClass().getHullLength().getMeters()));
weakCompetitorDTOCache.put(c, competitorDTO);
@@ -124,7 +124,7 @@ public class DomainFactoryImpl implements DomainFactory {
teamMembers.add(person);
}
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /*displayColor*/, null /*email*/, team, boat);
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /*displayColor*/, null /*email*/, null, team, boat);
}
return result;
}
@@ -140,7 +140,7 @@ public class DomainFactoryImpl implements DomainFactory {
}
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
result = baseDomainFactory.getCompetitorStore().getOrCreateCompetitor(getCompetitorID(competitor.getBoatID(), raceId, boatClass),
competitor.getName(), null /*displayColor*/, null /*email*/, team, boat);
competitor.getName(), null /*displayColor*/, null /*email*/, null, team, boat);
return result;
}
@@ -233,7 +233,7 @@ public class LeaderboardDTODiffingTest {
public void testCompetitorListChange() {
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.competitors.add(13, somebodyNew); // insert a competitor; this should mess up all others' indexes; check if this works
CompetitorDTO wolfgang = getPreviousCompetitorByName("HUNGER +JESS");
newVersion.competitors.remove(wolfgang);
@@ -253,7 +253,7 @@ public class LeaderboardDTODiffingTest {
newVersion.setSuppressedCompetitors(newSuppressedCompetitors);
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.setSuppressed(newVersion.competitors.get(13), true); // suppress an existing competitor; compaction should reduce this to a single number only
newVersion.setSuppressed(somebodyNew, true); // check that mixed mode with existing and new competitors works as well
List<CompetitorDTO> newSuppressedCompetitorsBeforeStripping = new ArrayList<CompetitorDTO>();
@@ -275,7 +275,7 @@ public class LeaderboardDTODiffingTest {
public void testDisplayNameChange() {
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.competitors.add(somebodyNew);
newVersion.competitorDisplayNames = new HashMap<CompetitorDTO, String>(newVersion.competitorDisplayNames);
newVersion.competitorDisplayNames.put(newVersion.competitors.get(13), "Humba");
@@ -304,7 +304,7 @@ public class LeaderboardDTODiffingTest {
newVersion.setCompetitorsFromBestToWorst(r9, newOrdering);
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.competitors.add(somebodyNew);
newOrdering.add(somebodyNew);
CompetitorDTO formerRank13 = newOrdering.remove(13);
@@ -15,7 +15,7 @@ import com.sap.sse.common.Color;
public abstract class AbstractLeaderboardTest {
public static CompetitorImpl createCompetitor(String competitorName) {
return new CompetitorImpl(competitorName, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
return new CompetitorImpl(competitorName, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -24,7 +24,7 @@ public abstract class AbstractLeaderboardTest {
}
public static Competitor createCompetitor(String competitorName, CompetitorFactory competitorFactory) {
return competitorFactory.getOrCreateCompetitor(competitorName, competitorName, Color.RED, "someone@nobody.de", new TeamImpl("STG", Collections.singleton(
return competitorFactory.getOrCreateCompetitor(competitorName, competitorName, Color.RED, "someone@nobody.de", null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -33,7 +33,7 @@ public abstract class AbstractLeaderboardTest {
}
public static CompetitorImpl createCompetitor(String competitorName, Serializable id) {
return new CompetitorImpl(id, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
return new CompetitorImpl(id, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -157,7 +157,7 @@ public class LeaderboardCourseChangeTest {
Set<Competitor> competitors = new HashSet<>();
DynamicBoat mockedBoat = mock(DynamicBoat.class);
when(mockedBoat.getBoatClass()).thenReturn(boatClass);
competitors.add(new CompetitorImpl(UUID.randomUUID(), "TestCompetitor", Color.BLACK, null,
competitors.add(new CompetitorImpl(UUID.randomUUID(), "TestCompetitor", Color.BLACK, null, null,
mock(DynamicTeam.class), mockedBoat));
return competitors;
}
@@ -188,7 +188,7 @@ public class OfflineSerializationTest extends AbstractSerializationTest {
DomainFactory senderDomainFactory = new DomainFactoryImpl();
DomainFactory receiverDomainFactory = new DomainFactoryImpl();
String competitorName = "Tina Maximiliane Lutz";
Competitor sendersCompetitor1 = new CompetitorImpl(123, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor sendersCompetitor1 = new CompetitorImpl(123, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, senderDomainFactory.getOrCreateNationality("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", senderDomainFactory.getOrCreateNationality("GER"),
@@ -117,7 +117,7 @@ public abstract class StoredTrackBasedTest extends TrackBasedTest {
for (String competitorName : getCompetitorNamesOfStoredTracks(KIELER_WOCHE)) {
DynamicPerson p = new PersonImpl(competitorName, /* nationality */ null, /* dateOfBirth */ null, /* description */ null);
DynamicTeam t = new TeamImpl(competitorName, Collections.singleton(p), /* coach */ null);
Competitor c = new CompetitorImpl(competitorName, competitorName, Color.RED, null, t, new BoatImpl(competitorName,
Competitor c = new CompetitorImpl(competitorName, competitorName, Color.RED, null, null, t, new BoatImpl(competitorName,
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
DynamicGPSFixTrack<Competitor, GPSFixMoving> track = readTrack(c, KIELER_WOCHE);
if (track != null) {
@@ -34,7 +34,7 @@ public class TackTest extends StoredTrackBasedTestWithTrackedRace {
@Override
@Before
public void setUp() {
competitor = new CompetitorImpl(123, "Wolfgang Hunger", Color.RED, null, new TeamImpl("STG", Collections.singleton(
competitor = new CompetitorImpl(123, "Wolfgang Hunger", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("Wolfgang Hunger", new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous Wolfgang Hunger")), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -60,7 +60,7 @@ public abstract class TrackBasedTest {
}
public static CompetitorImpl createCompetitor(String competitorName) {
return new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
return new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -270,7 +270,7 @@ public class WindTest {
Waypoint w1 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
Waypoint w2 = domainFactory.createWaypoint(top, /*passingInstruction*/ null);
Waypoint w3 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
Competitor competitor = new CompetitorImpl(123, "Test Competitor", Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor competitor = new CompetitorImpl(123, "Test Competitor", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("Test Competitor", new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous " + "Test Competitor")), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -39,9 +39,9 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class AbstractMockedRaceMarkPassingTest {
protected Competitor ron = new CompetitorImpl("Ron", "Ron", null, null, null, null);
protected Competitor tom = new CompetitorImpl("Tom", "Tom", null, null, null, null);
protected Competitor ben = new CompetitorImpl("Ben", "Ben", null, null, null, null);
protected Competitor ron = new CompetitorImpl("Ron", "Ron", null, null, null, null, null);
protected Competitor tom = new CompetitorImpl("Tom", "Tom", null, null, null, null, null);
protected Competitor ben = new CompetitorImpl("Ben", "Ben", null, null, null, null, null);
protected Mark m = new MarkImpl("Mark");
protected Mark gate1 = new MarkImpl("Gate1");
@@ -258,7 +258,7 @@ public class DomainFactoryImpl implements DomainFactory {
}
DynamicTeam team = getOrCreateTeam(name, nationality, competitorId);
DynamicBoat boat = new BoatImpl(shortName, boatClass, shortName);
result = competitorStore.getOrCreateCompetitor(competitorId, name, null /*displayColor*/, null /*email*/, team, boat);
result = competitorStore.getOrCreateCompetitor(competitorId, name, null /*displayColor*/, null /*email*/, null /*flagImag */, team, boat);
}
return result;
}
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.base.impl;
import java.io.Serializable;
import java.net.URI;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sse.common.Color;
@@ -10,7 +11,8 @@ public interface DynamicCompetitorStore extends CompetitorStore {
DynamicCompetitor getExistingCompetitorById(Serializable competitorId);
@Override
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat);
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImage,
DynamicTeam team, DynamicBoat boat);
@Override
Iterable<? extends DynamicCompetitor> getCompetitors();
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.tracking.impl;
import java.net.URI;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorChangeListener;
@@ -82,6 +84,11 @@ public class DummyMarkPassingWithTimePointOnly implements MarkPassing {
public boolean hasEmail() {
return false;
}
@Override
public URI getFlagImage() {
return null;
}
};
}
}
@@ -163,7 +163,7 @@ public class PolarSheetGenerationServiceTest {
waypoints.add(new WaypointImpl(null));
waypoints.add(new WaypointImpl(null));
ArrayList<Competitor> competitors = new ArrayList<Competitor>();
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null,
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null, null,
new TeamImpl("SAP", null, null), new BoatImpl("Schnelle Forelle", forelle, "GER000"));
competitors.add(competitor);
RaceDefinition race = new RaceDefinitionImpl("Forelle1", new CourseImpl("ForelleCourse", waypoints), forelle, competitors);
@@ -18,7 +18,6 @@ import com.sap.sailing.gwt.common.client.i18n.TextMessages;
import com.sap.sailing.gwt.home.client.place.event.regattaleaderboard.EventRegattaLeaderboardResources;
import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
@@ -26,6 +25,7 @@ import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
public class OldLeaderboard extends Composite {
private static OldLeaderboardUiBinder uiBinder = GWT.create(OldLeaderboardUiBinder.class);
@@ -18,7 +18,6 @@ import com.sap.sailing.gwt.common.client.i18n.TextMessages;
import com.sap.sailing.gwt.home.client.place.event.regattaleaderboard.EventRegattaLeaderboardResources;
import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardPanel;
@@ -26,6 +25,7 @@ import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
public class OldMultiLeaderboard extends Composite {
private static OldMultiLeaderboardUiBinder uiBinder = GWT.create(OldMultiLeaderboardUiBinder.class);
@@ -14,14 +14,15 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChartSettings;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.AbstractSettings;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
/**
@@ -124,7 +125,7 @@ public class RegattaAnalyticsDataManager {
showComponentSettingsDialog(multiCompetitorChart, null);
}
protected <SettingsType> void showComponentSettingsDialog(final Component<SettingsType> component, String componentDisplayName) {
protected <SettingsType extends AbstractSettings> void showComponentSettingsDialog(final Component<SettingsType> component, String componentDisplayName) {
String componentName = componentDisplayName != null ? componentDisplayName : component.getLocalizedShortName();
String debugIdPrefix = DebugIdHelper.createDebugId(componentName);
SettingsDialog<SettingsType> dialog = new SettingsDialog<SettingsType>(component, StringMessages.INSTANCE);
@@ -15,15 +15,16 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChart;
import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardChartSettings;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardPanel;
import com.sap.sse.common.Util;
import com.sap.sse.common.settings.AbstractSettings;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
/**
@@ -148,7 +149,7 @@ public class EventSeriesAnalyticsDataManager {
showComponentSettingsDialog(multiCompetitorChart, null);
}
protected <SettingsType> void showComponentSettingsDialog(final Component<SettingsType> component, String componentDisplayName) {
protected <SettingsType extends AbstractSettings> void showComponentSettingsDialog(final Component<SettingsType> component, String componentDisplayName) {
String componentName = componentDisplayName != null ? componentDisplayName : component.getLocalizedShortName();
String debugIdPrefix = DebugIdHelper.createDebugId(componentName);
SettingsDialog<SettingsType> dialog = new SettingsDialog<SettingsType>(component, StringMessages.INSTANCE);
@@ -40,8 +40,6 @@ import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
@@ -49,6 +47,8 @@ import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public abstract class AbstractTrackedRacesListComposite extends SimplePanel implements Component<TrackedRacesSettings>,
RegattasDisplayer, RaceSelectionChangeListener {
@@ -4,10 +4,6 @@ import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
interface AdminConsoleResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/settings.png")
ImageResource settingsIcon();
@Source("com/sap/sailing/gwt/ui/client/images/settingsActionIcon.png")
ImageResource settingsActionIcon();
@@ -14,7 +14,7 @@ import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.racelog.tracking.QRCodeURLCreationException;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.QRCodeComposite;
import com.sap.sailing.gwt.ui.client.shared.controls.QRCodeComposite;
public abstract class BaseQRIdentifierWidget implements IsWidget {
@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
public class CompetitorConfigImagesBarCell extends ImagesBarCell {
static final String ACTION_EDIT = "ACTION_EDIT";
@@ -41,6 +41,7 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
private final TextBox sailId;
private final TextBox email;
private final StringMessages stringMessages;
private final TextBox flagImageURL;
private final URLFieldWithFileUpload imageUrlAndUploadComposite;
public CompetitorEditDialog(final StringMessages stringMessages, CompetitorDTO competitorToEdit,
@@ -122,6 +123,7 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
}
}
this.sailId = createTextBox(competitorToEdit.getSailID());
this.flagImageURL = createTextBox(competitorToEdit.getFlagImageURL(), 100);
imageUrlAndUploadComposite = new URLFieldWithFileUpload(stringMessages);
imageUrlAndUploadComposite.setURL(competitorToEdit.getImageURL());
}
@@ -180,13 +182,13 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
/* twoLetterIsoCountryCode */ null,
threeLetterIocCountryCode.getValue(threeLetterIocCountryCode.getSelectedIndex()),
/* countryName */ null, sailId.getText(), competitorToEdit.getIdAsString(),
imageUrlAndUploadComposite.getURL(), boatClass);
imageUrlAndUploadComposite.getURL(), flagImageURL.getText(), boatClass);
return result;
}
@Override
protected Widget getAdditionalWidget() {
Grid result = new Grid(7, 2);
Grid result = new Grid(8, 2);
result.setWidget(0, 0, new Label(stringMessages.name()));
result.setWidget(0, 1, name);
result.setWidget(1, 0, new Label(stringMessages.sailNumber()));
@@ -199,8 +201,10 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
result.setWidget(4, 1, email);
result.setWidget(5, 0, new Label(stringMessages.boatClass()));
result.setWidget(5, 1, boatClassName);
result.setWidget(6, 0, new Label(stringMessages.imageURL()));
result.setWidget(6, 1, imageUrlAndUploadComposite);
result.setWidget(6, 0, new Label(stringMessages.flagImageURL()));
result.setWidget(6, 1, flagImageURL);
result.setWidget(7, 0, new Label(stringMessages.imageURL()));
result.setWidget(7, 1, imageUrlAndUploadComposite);
return result;
}
@@ -70,15 +70,23 @@ public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> ext
SafeHtmlBuilder sb = new SafeHtmlBuilder();
ImageResourceRenderer renderer = new ImageResourceRenderer();
final String twoLetterIsoCountryCode = competitor.getTwoLetterIsoCountryCode();
final ImageResource flagImageResource;
if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
}
if (flagImageResource != null) {
sb.append(renderer.render(flagImageResource));
final String imageURL = competitor.getImageURL();
if (imageURL != null && !imageURL.isEmpty()) {
sb.appendHtmlConstant("<img src=\"" + imageURL + "\" width=\"18px\" height=\"12px\" title=\"" + competitor.getName() + "\"/>");
sb.appendHtmlConstant("&nbsp;");
} else {
final ImageResource flagImageResource;
if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
}
if (flagImageResource != null) {
sb.append(renderer.render(flagImageResource));
sb.appendHtmlConstant("&nbsp;");
}
}
sb.appendEscaped(competitor.getSailID());
return sb.toSafeHtml();
@@ -99,7 +107,7 @@ public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> ext
return t.getColor();
}
});
Column<CompetitorDTO, SafeHtml> imageColumn = new Column<CompetitorDTO, SafeHtml>(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(CompetitorDTO competitor) {
@@ -165,7 +173,7 @@ public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> ext
table.addColumn(competitorNameColumn, stringMessages.name());
table.addColumn(boatClassColumn, stringMessages.boatClass());
table.addColumn(displayColorColumn, stringMessages.color());
table.addColumn(imageColumn, stringMessages.imageURL());
table.addColumn(imageColumn, stringMessages.image());
table.addColumn(competitorEMailColumn, stringMessages.email());
table.addColumn(competitorIdColumn, stringMessages.id());
}
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class CourseManagementWidgetWaypointsImagesBarCell extends ImagesBarCell {
@@ -4,7 +4,7 @@ import com.google.gwt.http.client.URL;
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
import com.sap.sailing.domain.common.racelog.tracking.QRCodeURLCreationException;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.QRCodeComposite;
import com.sap.sailing.gwt.ui.client.shared.controls.QRCodeComposite;
public class DeviceMappingQRCodeWidget extends BaseQRIdentifierWidget {
@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class EventConfigImagesBarCell extends ImagesBarCell {
@@ -33,7 +33,7 @@ import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sailing.domain.common.impl.NaturalComparator;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.IconResources;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
@@ -1,7 +1,7 @@
package com.sap.sailing.gwt.ui.adminconsole;
import com.google.gwt.user.cellview.client.Column;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
public class ImagesBarColumn<T, S extends ImagesBarCell> extends Column<T, String> {
public ImagesBarColumn(S imagesBarCell) {
@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class LeaderboardConfigImagesBarCell extends ImagesBarCell {
@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class LeaderboardGroupConfigImagesBarCell extends ImagesBarCell {
@@ -6,7 +6,7 @@ import java.util.List;
import com.google.gwt.core.client.GWT;
import com.sap.sailing.domain.common.LeaderboardType;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
import com.sap.sse.gwt.client.IconResources;
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Arrays;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class MediaActionBarCell extends ImagesBarCell {
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
public class RaceLogTrackingCourseDefinitionDialogMarksImagesBarCell extends ImagesBarCell {
public static final String ACTION_PING = "ACTION_PING";
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sailing.gwt.ui.shared.DeviceMappingDTO;
import com.sap.sse.gwt.client.IconResources;
@@ -5,7 +5,7 @@ import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
public class RaceLogTrackingEventManagementImagesBarCell extends ImagesBarCell {
public static final String ACTION_DENOTE_FOR_RACELOG_TRACKING = "ACTION_DENOTE_FOR_RACELOG_TRACKING";
@@ -6,7 +6,7 @@ import java.util.List;
import com.google.gwt.core.client.GWT;
import com.sap.sailing.gwt.ui.adminconsole.AbstractLeaderboardConfigPanel.RaceColumnDTOAndFleetDTOWithNameBasedEquality;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCell {
public final static String ACTION_DENOTE_FOR_RACELOG_TRACKING = "ACTION_DENOTE_FOR_RACELOG_TRACKING";
@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class RegattaConfigImagesBarCell extends ImagesBarCell {
@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.google.gwt.core.client.GWT;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
import com.sap.sailing.gwt.ui.client.shared.controls.ImagesBarCell;
import com.sap.sse.gwt.client.IconResources;
public class SeriesConfigImagesBarCell extends ImagesBarCell {
@@ -18,11 +18,11 @@ import com.sap.sailing.gwt.ui.client.RegattaRefresher;
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
/**
* Shows the currently tracked events/races in a table. Updated if subscribed as an {@link RegattasDisplayer}, e.g., with
@@ -1,9 +1,11 @@
package com.sap.sailing.gwt.ui.adminconsole;
import com.sap.sse.common.settings.AbstractSettings;
/**
* Settings for a tracked race.
*/
public class TrackedRacesSettings {
public class TrackedRacesSettings extends AbstractSettings {
private long delayToLiveInSeconds;
public TrackedRacesSettings() {
@@ -6,9 +6,9 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LongBox;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class TrackedRacesSettingsDialogComponent<T extends TrackedRacesSettings> implements SettingsDialogComponent<T> {
protected LongBox timeDelayBox;
@@ -5,9 +5,6 @@ import com.google.gwt.resources.client.ImageResource;
public interface ClientResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/settings.png")
ImageResource settingsIcon();
@Source("com/sap/sailing/gwt/ui/client/images/play.png")
ImageResource playIcon();
@@ -5,7 +5,6 @@ import java.util.List;
import java.util.Map;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
@@ -14,6 +13,7 @@ import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements RaceSelectionChangeListener, RaceTimesInfoProviderListener {
private final RaceTimesInfoProvider raceTimesInfoProvider;
@@ -1049,6 +1049,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c
String addRaces();
String withNamePrefix();
String pleaseSelectASeriesFirst();
String image();
String video();
String flagImageURL();
String imageURLs();
String videoURLs();
String sponsorImageURLs();
@@ -1029,6 +1029,9 @@ leaderboardGroupsOfSelectedEvent=Leaderboard Groups Assigned to Event
addRaces=Add races
withNamePrefix=with name prefix
pleaseSelectASeriesFirst=Please select a series first.
image=Image
video=Video
flagImageURL=Flag image URL
imageURLs=Image URLs
videoURLs=Video URLs
sponsorImageURLs=Sponsor Image URLs
@@ -1023,6 +1023,9 @@ leaderboardGroupsOfSelectedEvent=Der Veranstaltung zugewiesene Ranglisten-Gruppe
addRaces=Wettfahrten hinzufügen
withNamePrefix=mit Namenspräfix
pleaseSelectASeriesFirst=Bitte zuerst eine Serie auswählen.
image=Bild
video=Video
flagImageURL=Flaggenbild-URL
imageURLs=Bilder-URLs
videoURLs=Video-URLs
sponsorImageURLs=Sponsorenlogo-URLs
@@ -1179,6 +1182,7 @@ dashboardSpeedInKts=Geschwindigkeit in kts
fixedMarkPassing=(fest)
suppressedMarkPassing=(unterdrückt)
windUp=Wind von oben anzeigen
filterBy=Gefiltert nach
currentFilterSelection=Aktuelle Filter-Selektion
notCapableOfGeneratingACodeForIdentifier=Für diesen Identifier kann kein Barcode generiert werden.
serverUrl=Server URL
@@ -984,6 +984,9 @@ leaderboardGroupsOfSelectedEvent=Leaderboard Groups Assigned to Event
addRaces=Add races
withNamePrefix=with name prefix
pleaseSelectASeriesFirst=Please select a series first.
image=Image
video=Video
flagImageURL=Flag image URL
imageURLs=Image URLs
videoURLs=Video URLs
sponsorImageURLs=Sponsor Image URLs
@@ -20,9 +20,6 @@ import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.TimePanelCssResources.TimePanelCss;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.controls.slider.SliderBar;
import com.sap.sse.gwt.client.controls.slider.TimeSlider;
import com.sap.sse.gwt.client.player.PlayStateListener;
@@ -33,6 +30,9 @@ import com.sap.sse.gwt.client.player.TimeZoomChangeListener;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class TimePanel<T extends TimePanelSettings> extends SimplePanel implements Component<T>, TimeListener, TimeZoomChangeListener,
TimeRangeChangeListener, PlayStateListener, RequiresResize {
@@ -1,6 +1,8 @@
package com.sap.sailing.gwt.ui.client;
public class TimePanelSettings {
import com.sap.sse.common.settings.AbstractSettings;
public class TimePanelSettings extends AbstractSettings {
private long refreshInterval;
public TimePanelSettings() {
@@ -5,9 +5,9 @@ import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class TimePanelSettingsDialogComponent<T extends TimePanelSettings>
implements SettingsDialogComponent<T> {
@@ -36,10 +36,9 @@ import com.sap.sailing.gwt.ui.client.media.popup.YoutubeWindowPlayer;
import com.sap.sailing.gwt.ui.client.media.shared.MediaPlayer;
import com.sap.sailing.gwt.ui.client.media.shared.VideoPlayer;
import com.sap.sailing.gwt.ui.client.media.shared.VideoSynchPlayer;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.settings.AbstractSettings;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
import com.sap.sse.gwt.client.player.PlayStateListener;
@@ -47,13 +46,15 @@ import com.sap.sse.gwt.client.player.TimeListener;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
import com.sap.sse.gwt.client.useragent.UserAgentDetails.AgentTypes;
import com.sap.sse.security.shared.DefaultRoles;
import com.sap.sse.security.ui.client.UserService;
import com.sap.sse.security.ui.shared.UserDTO;
public class MediaPlayerManagerComponent implements Component<Void>, PlayStateListener, TimeListener,
public class MediaPlayerManagerComponent implements Component<AbstractSettings>, PlayStateListener, TimeListener,
MediaPlayerManager, CloseHandler<Window>, ClosingHandler {
static interface VideoContainerFactory<T> {
@@ -733,12 +734,12 @@ public class MediaPlayerManagerComponent implements Component<Void>, PlayStateLi
}
@Override
public SettingsDialogComponent<Void> getSettingsDialogComponent() {
public SettingsDialogComponent<AbstractSettings> getSettingsDialogComponent() {
throw new UnsupportedOperationException();
}
@Override
public void updateSettings(Void newSettings) {
public void updateSettings(AbstractSettings newSettings) {
throw new UnsupportedOperationException();
}
@@ -6,9 +6,9 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public abstract class AbstractChartSettingsComponent<SettingsType extends ChartSettings> implements SettingsDialogComponent<SettingsType> {
private final ChartSettings settings;
@@ -39,21 +39,22 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.AbstractLazyComponent;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sse.common.Util;
import com.sap.sse.common.filter.Filter;
import com.sap.sse.common.filter.FilterSet;
import com.sap.sse.common.settings.AbstractSettings;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.TimeListener;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.shared.components.AbstractLazyComponent;
import com.sap.sse.gwt.client.shared.components.Component;
/**
* A base class for a leaderboard chart showing competitor data for all race columns of a leaderboard.
*/
public abstract class AbstractCompetitorLeaderboardChart<SettingsType> extends AbstractLazyComponent<SettingsType> implements Component<SettingsType>,
public abstract class AbstractCompetitorLeaderboardChart<SettingsType extends AbstractSettings> extends AbstractLazyComponent<SettingsType> implements Component<SettingsType>,
CompetitorSelectionChangeListener, RequiresResize, TimeListener {
public static final String LODA_LEADERBOARD_CHART_DATA_CATEGORY = "loadLeaderboradChartData";
@@ -48,7 +48,6 @@ import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.CompetitorRaceDataDTO;
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
import com.sap.sse.common.Util;
@@ -59,6 +58,7 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.shared.components.Component;
/**
* AbstractCompetitorChart is a chart that can show one sort of competitor data (e.g. current speed over ground, windward
@@ -22,7 +22,6 @@ import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.charts.ChartCssResources.ChartsCss;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
@@ -32,6 +31,7 @@ import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
import com.sap.sse.gwt.client.player.TimeZoomChangeListener;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
public abstract class AbstractRaceChart extends AbsolutePanel implements RaceSelectionChangeListener,
TimeListener, TimeZoomChangeListener, TimeRangeChangeListener {
@@ -93,7 +93,7 @@ public abstract class AbstractRaceChart extends AbsolutePanel implements RaceSel
}
/**
* Subclasses implement this, e.g., by calling {@link SettingsDialog#createSettingsButton(com.sap.sailing.gwt.ui.client.shared.components.Component, StringMessages)}.
* Subclasses implement this, e.g., by calling {@link SettingsDialog#createSettingsButton(com.sap.sse.gwt.client.shared.components.Component, StringMessages)}.
* This class's constructor will add the {@link ChartsCss#settingsButtonStyle()} and the {@link ChartsCss#settingsButtonBackgroundImage()}.
*/
protected abstract Button createSettingsButton();
@@ -1,6 +1,8 @@
package com.sap.sailing.gwt.ui.client.shared.charts;
public class ChartSettings {
import com.sap.sse.common.settings.AbstractSettings;
public class ChartSettings extends AbstractSettings {
private final long stepSize;
public ChartSettings(long stepSize) {
@@ -34,20 +34,21 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.filter.Filter;
import com.sap.sse.common.filter.FilterSet;
import com.sap.sse.common.settings.AbstractSettings;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncAction;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class EditMarkPassingsPanel extends AbsolutePanel implements Component<Void>, RaceSelectionChangeListener,
public class EditMarkPassingsPanel extends AbsolutePanel implements Component<AbstractSettings>, RaceSelectionChangeListener,
CompetitorSelectionChangeListener {
private static class AnchorCell extends AbstractCell<SafeHtml> {
@@ -434,12 +435,12 @@ public class EditMarkPassingsPanel extends AbsolutePanel implements Component<Vo
}
@Override
public SettingsDialogComponent<Void> getSettingsDialogComponent() {
public SettingsDialogComponent<AbstractSettings> getSettingsDialogComponent() {
return null;
}
@Override
public void updateSettings(Void newSettings) {
public void updateSettings(AbstractSettings newSettings) {
}
@Override
@@ -4,10 +4,10 @@ import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class MultiCompetitorLeaderboardChart extends AbstractCompetitorLeaderboardChart<MultiCompetitorLeaderboardChartSettings> {
private MultiCompetitorLeaderboardChartSettings settings;
@@ -1,8 +1,9 @@
package com.sap.sailing.gwt.ui.client.shared.charts;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sse.common.settings.AbstractSettings;
public class MultiCompetitorLeaderboardChartSettings {
public class MultiCompetitorLeaderboardChartSettings extends AbstractSettings {
private final DetailType detailType;
public MultiCompetitorLeaderboardChartSettings(DetailType detailType) {
@@ -11,9 +11,9 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class MultiCompetitorLeaderboardChartSettingsDialogComponent implements SettingsDialogComponent<MultiCompetitorLeaderboardChartSettings> {
private ListBox chartTypeSelectionListBox;
@@ -7,14 +7,14 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
/**
* MultiCompetitorRaceChart is a GWT panel that can show competitor data (e.g. current speed over ground, windward distance to
@@ -11,8 +11,8 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class MultiCompetitorRaceChartSettingsComponent extends AbstractChartSettingsComponent<MultiCompetitorRaceChartSettings> implements
SettingsDialogComponent<MultiCompetitorRaceChartSettings> {
@@ -48,9 +48,6 @@ import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
import com.sap.sailing.gwt.ui.client.shared.components.Component;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.shared.WindDTO;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
@@ -60,6 +57,9 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.shared.components.Component;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class WindChart extends AbstractRaceChart implements Component<WindChartSettings>, RequiresResize {
public static final String LODA_WIND_CHART_DATA_CATEGORY = "loadWindChartData";
@@ -4,8 +4,9 @@ import java.util.LinkedHashSet;
import java.util.Set;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sse.common.settings.AbstractSettings;
public class WindChartSettings {
public class WindChartSettings extends AbstractSettings {
public static final long DEFAULT_RESOLUTION_IN_MILLISECONDS = 10000;
private final Set<WindSourceType> windDirectionSourcesToDisplay;
@@ -18,10 +18,10 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
import com.sap.sailing.gwt.ui.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.controls.IntegerBox;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
public class WindChartSettingsDialogComponent implements SettingsDialogComponent<WindChartSettings> {
private final WindChartSettings initialSettings;
@@ -1,28 +0,0 @@
package com.sap.sailing.gwt.ui.client.shared.components;
import com.google.gwt.user.client.ui.Widget;
public interface Component<SettingsType> extends ComponentSettings<SettingsType> {
/**
* @return the name to display to a user for quick navigation to this component
*/
String getLocalizedShortName();
/**
* A component may or may not have a {@link Widget} used to render its contents. Typically,
* entries with sub-entries don't afford a widget of their own but let the framework choose a container
* in which to aggregate their entries' widgets.
*/
Widget getEntryWidget();
boolean isVisible();
void setVisible(boolean visibility);
/**
* If the component wants to add its specific styling rules, e.g., for the expand/collapse toggle buttons or
* the dragger handle, it should return a non-<code>null</code> value from this method which is then used as
* a dependent CSS class name for those components.
*/
String getDependentCssClassName();
}
@@ -1,10 +0,0 @@
package com.sap.sailing.gwt.ui.client.shared.components;
public interface ComponentGroup<SettingsType> extends Component<SettingsType> {
boolean addComponent(Component<?> component);
boolean removeComponent(Component<?> component);
Iterable<Component<?>> getComponents();
}
@@ -1,19 +0,0 @@
package com.sap.sailing.gwt.ui.client.shared.components;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
interface ComponentResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/open.png")
ImageResource openIcon();
@Source("com/sap/sailing/gwt/ui/client/images/close.png")
ImageResource closeIcon();
@Source("com/sap/sailing/gwt/ui/client/images/settings.png")
ImageResource settingsIcon();
@Source("com/sap/sailing/gwt/ui/client/images/leaderboardsettings.png")
ImageResource darkSettingsIcon();
}
@@ -1,30 +0,0 @@
package com.sap.sailing.gwt.ui.client.shared.components;
/**
*
* @author Axel Uhl (d043530)
*
* @param <SettingsType>
* the type that describes this component's settings (if any). Use {@link Object} in case your components
* doesn't support any settings.
*/public interface ComponentSettings<SettingsType> {
/**
* @return whether this component has settings that a user may change; if so,
*/
boolean hasSettings();
/**
* If this component {@link #hasSettings has settings}, this method may return a component for the settings dialog.
* It will be used to obtain a widget shown in the settings dialog, a validator for the component-specific settings,
* as well as to produce a result from the widget's state when the settings dialog wants to validate or return the
* settings.
*/
SettingsDialogComponent<SettingsType> getSettingsDialogComponent();
/**
* Updates the settings of this component. Expected to be called when a settings dialog using this component's
* {@link #getSettingsDialogComponent()} has been confirmed.
*/
void updateSettings(SettingsType newSettings);
}
@@ -1,11 +0,0 @@
package com.sap.sailing.gwt.ui.client.shared.components;
/**
* Used to describe different view modes for a component viewer
* The view modes are driven by media types.
* @author Frank
*
*/
public enum ComponentViewerViewModes {
WEB_VIEW, TV_VIEW
}
@@ -1,7 +0,0 @@
package com.sap.sailing.gwt.ui.client.shared.components;
import com.google.gwt.user.client.ui.Widget;
public interface LazyComponent<SettingsType> extends Component<SettingsType> {
Widget createWidget();
}
@@ -1,4 +1,4 @@
package com.sap.sailing.gwt.ui.client.shared.components;
package com.sap.sailing.gwt.ui.client.shared.controls;
import com.google.gwt.text.shared.AbstractRenderer;
@@ -1,4 +1,4 @@
package com.sap.sailing.gwt.ui.client.shared.components;
package com.sap.sailing.gwt.ui.client.shared.controls;
import com.google.gwt.cell.client.AbstractSafeHtmlCell;
import com.google.gwt.cell.client.FieldUpdater;
Loaded 100 of 294 files, more files were not shown because too many files have changed in this diff. Show more