mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-13 22:15:26 +00:00
Merge branch 'master' into permission-vertical
This commit is contained in:
commit
242513b42e
28 files changed
+578
-355
No files matched your search
+6
-7
@@ -1895,11 +1895,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
Document dbObject = (Document) object;
|
||||
final Serializable competitorId = (Serializable) dbObject.get(FieldNames.COMPETITOR_ID.name());
|
||||
String competitorDisplayName = (String) dbObject.get(FieldNames.COMPETITOR_DISPLAY_NAME.name());
|
||||
// The Competitor name is a new field in the list. Therefore the name might be null for existing events. In
|
||||
// this case a standard name is set.
|
||||
if (competitorDisplayName == null) {
|
||||
competitorDisplayName = "loaded competitor";
|
||||
}
|
||||
String competitorShortName = (String) dbObject.get(FieldNames.COMPETITOR_SHORT_NAME.name());
|
||||
String competitorBoatName = (String) dbObject.get(FieldNames.COMPETITOR_BOAT_NAME.name());
|
||||
String competitorBoatSailId = (String) dbObject.get(FieldNames.COMPETITOR_BOAT_SAIL_ID.name());
|
||||
// At this point we do not retrieve the competitor object since at any point in time, especially after a
|
||||
// server restart, the DomainFactory and its competitor
|
||||
// cache might be empty. But at this time the race log is loaded from database, so the competitor would be
|
||||
@@ -1925,8 +1923,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
} else {
|
||||
mergeState = MergeState.valueOf(mergeStateAsString);
|
||||
}
|
||||
CompetitorResultImpl positionedCompetitor = new CompetitorResultImpl(
|
||||
competitorId, competitorDisplayName, rank == null ? rankCounter : rank, maxPointsReason, score, finishingTime, comment, mergeState);
|
||||
CompetitorResultImpl positionedCompetitor = new CompetitorResultImpl(competitorId, competitorDisplayName,
|
||||
competitorShortName, competitorBoatName, competitorBoatSailId, rank == null ? rankCounter : rank,
|
||||
maxPointsReason, score, finishingTime, comment, mergeState);
|
||||
positionedCompetitors.add(positionedCompetitor);
|
||||
rankCounter++;
|
||||
}
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ public enum FieldNames {
|
||||
// SwissTiming configuration parameters:
|
||||
ST_CONFIG_NAME, ST_CONFIG_HOSTNAME, ST_CONFIG_PORT,
|
||||
|
||||
COMPETITOR_ID, COMPETITOR_DISPLAY_NAME,
|
||||
COMPETITOR_ID, COMPETITOR_DISPLAY_NAME, COMPETITOR_SHORT_NAME, COMPETITOR_BOAT_NAME, COMPETITOR_BOAT_SAIL_ID,
|
||||
|
||||
// leaderboard:
|
||||
LEADERBOARD_NAME, LEADERBOARD_DISPLAY_NAME, LEADERBOARD_SUPPRESSED_COMPETITORS, LEADERBOARD_SUPPRESSED_COMPETITOR_IDS,
|
||||
|
||||
+4
-1
@@ -1255,7 +1255,10 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
private Document storePositionedCompetitor(CompetitorResult competitorResult) {
|
||||
Document result = new Document();
|
||||
result.put(FieldNames.COMPETITOR_ID.name(), competitorResult.getCompetitorId());
|
||||
result.put(FieldNames.COMPETITOR_DISPLAY_NAME.name(), competitorResult.getCompetitorDisplayName());
|
||||
result.put(FieldNames.COMPETITOR_DISPLAY_NAME.name(), competitorResult.getName());
|
||||
result.put(FieldNames.COMPETITOR_SHORT_NAME.name(), competitorResult.getShortName());
|
||||
result.put(FieldNames.COMPETITOR_BOAT_NAME.name(), competitorResult.getBoatName());
|
||||
result.put(FieldNames.COMPETITOR_BOAT_SAIL_ID.name(), competitorResult.getBoatSailId());
|
||||
result.put(FieldNames.LEADERBOARD_SCORE_CORRECTION_MAX_POINTS_REASON.name(), competitorResult.getMaxPointsReason() == null ? null : competitorResult.getMaxPointsReason().name());
|
||||
result.put(FieldNames.LEADERBOARD_CORRECTED_SCORE.name(), competitorResult.getScore());
|
||||
result.put(FieldNames.RACE_LOG_FINISHING_TIME_AS_MILLIS.name(), competitorResult.getFinishingTime() == null ? null : competitorResult.getFinishingTime().asMillis());
|
||||
|
||||
+10
-10
@@ -57,10 +57,10 @@ public class ConfirmedFinishPositioningListFinderTest extends
|
||||
public void testMostRecent() {
|
||||
RaceLogFinishPositioningConfirmedEvent event1 = createEvent(RaceLogFinishPositioningConfirmedEvent.class, 1);
|
||||
RaceLogFinishPositioningConfirmedEvent event2 = createEvent(RaceLogFinishPositioningConfirmedEvent.class, 2);
|
||||
final CompetitorResultImpl oldResultC1 = new CompetitorResultImpl("Comp1", "Comp 1", 1, MaxPointsReason.NONE, 1.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl oldResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", 2, MaxPointsReason.NONE, 2.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl oldResultC1 = new CompetitorResultImpl("Comp1", "Comp 1", "Comp 1 Short", "Comp 1 Boat", "Comp 1 Boat Id", 1, MaxPointsReason.NONE, 1.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl oldResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", "Comp 2 Short", "Comp 2 Boat", "Comp 2 Boat Id", 2, MaxPointsReason.NONE, 2.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResults olderResults = mockCompetitorResults(oldResultC1, oldResultC2);
|
||||
final CompetitorResultImpl newResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl newResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", "Comp 3 Short", "Comp 3 Boat", "Comp 3 Boat Id", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResults newerResults = mockCompetitorResults(newResultC2);
|
||||
when(event1.getPositionedCompetitorsIDsNamesMaxPointsReasons()).thenReturn(olderResults);
|
||||
when(event2.getPositionedCompetitorsIDsNamesMaxPointsReasons()).thenReturn(newerResults);
|
||||
@@ -75,16 +75,16 @@ public class ConfirmedFinishPositioningListFinderTest extends
|
||||
RaceLogFinishPositioningConfirmedEvent event2 = createEvent(/* priority */ 1, RaceLogFinishPositioningConfirmedEvent.class, 2);
|
||||
RaceLogFinishPositioningConfirmedEvent event3 = createEvent(/* priority */ 2, RaceLogFinishPositioningConfirmedEvent.class, 3);
|
||||
RaceLogFinishPositioningConfirmedEvent event4 = createEvent(/* priority */ 1, RaceLogFinishPositioningConfirmedEvent.class, 4);
|
||||
final CompetitorResultImpl e1ResultC1 = new CompetitorResultImpl("Comp1", "Comp 1", 1, MaxPointsReason.DNC, 6.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e1ResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", 2, MaxPointsReason.NONE, 2.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e1ResultC1 = new CompetitorResultImpl("Comp1", "Comp 1", "Comp 1 Short", "Comp 1 Boat", "Comp 1 Boat Id", 1, MaxPointsReason.DNC, 6.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e1ResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", "Comp 2 Short", "Comp 2 Boat", "Comp 2 Boat Id", 2, MaxPointsReason.NONE, 2.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResults e1Results = mockCompetitorResults(e1ResultC1, e1ResultC2);
|
||||
final CompetitorResultImpl e2ResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e2ResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", "Comp 2 Short", "Comp 2 Boat", "Comp 2 Boat Id", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResults e2Results = mockCompetitorResults(e2ResultC2);
|
||||
final CompetitorResultImpl e3ResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", 2, MaxPointsReason.DSQ, 6.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e3ResultC3 = new CompetitorResultImpl("Comp3", "Comp 3", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e3ResultC2 = new CompetitorResultImpl("Comp2", "Comp 2", "Comp 2 Short", "Comp 2 Boat", "Comp 2 Boat Id", 2, MaxPointsReason.DSQ, 6.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e3ResultC3 = new CompetitorResultImpl("Comp3", "Comp 3", "Comp 3 Short", "Comp 3 Boat", "Comp 3 Boat Id", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResults e3Results = mockCompetitorResults(e3ResultC2, e3ResultC3);
|
||||
final CompetitorResultImpl e4ResultC1 = new CompetitorResultImpl("Comp1", "Comp 1", 1, /* maxPointsReason */ null, /* score */ null, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e4ResultC4 = new CompetitorResultImpl("Comp4", "Comp 4", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e4ResultC1 = new CompetitorResultImpl("Comp1", "Comp 1", "Comp 1 Short", "Comp 1 Boat", "Comp 1 Boat Id", 1, /* maxPointsReason */ null, /* score */ null, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResultImpl e4ResultC4 = new CompetitorResultImpl("Comp4", "Comp 4", "Comp 4 Short", "Comp 4 Boat", "Comp 4 Boat Id", 2, MaxPointsReason.DNF, 3.0, /* finishing time */ null, /* comment */ null, MergeState.OK);
|
||||
final CompetitorResults e4Results = mockCompetitorResults(e4ResultC1, e4ResultC4);
|
||||
when(event1.getPositionedCompetitorsIDsNamesMaxPointsReasons()).thenReturn(e1Results);
|
||||
when(event2.getPositionedCompetitorsIDsNamesMaxPointsReasons()).thenReturn(e2Results);
|
||||
|
||||
+7
-1
@@ -40,7 +40,13 @@ public interface CompetitorResult extends Serializable {
|
||||
|
||||
Serializable getCompetitorId();
|
||||
|
||||
String getCompetitorDisplayName();
|
||||
String getName();
|
||||
|
||||
String getShortName();
|
||||
|
||||
String getBoatName();
|
||||
|
||||
String getBoatSailId();
|
||||
|
||||
int getOneBasedRank();
|
||||
|
||||
|
||||
+66
-16
@@ -11,7 +11,9 @@ public class CompetitorResultImpl implements CompetitorResult {
|
||||
|
||||
private final Serializable competitorId;
|
||||
|
||||
private final String competitorDisplayName;
|
||||
private final String competitorName;
|
||||
|
||||
private final String competitorShortName;
|
||||
|
||||
private final int oneBasedRank;
|
||||
|
||||
@@ -24,13 +26,32 @@ public class CompetitorResultImpl implements CompetitorResult {
|
||||
private final String comment;
|
||||
|
||||
private final MergeState mergeState;
|
||||
|
||||
public CompetitorResultImpl(Serializable competitorId, String competitorDisplayName, int oneBasedRank,
|
||||
MaxPointsReason maxPointsReason, Double score, TimePoint finishingTime, String comment,
|
||||
MergeState mergeState) {
|
||||
|
||||
private final String boatName;
|
||||
|
||||
private final String boatSailId;
|
||||
|
||||
public CompetitorResultImpl(CompetitorResult item) {
|
||||
this(item.getCompetitorId(), item.getName(), item.getShortName(), item.getBoatName(), item.getBoatSailId(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState());
|
||||
}
|
||||
|
||||
public CompetitorResultImpl(CompetitorResult item, int oneBasedRank) {
|
||||
this(item.getCompetitorId(), item.getName(), item.getShortName(), item.getBoatName(), item.getBoatSailId(),
|
||||
oneBasedRank, item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState());
|
||||
}
|
||||
|
||||
public CompetitorResultImpl(Serializable competitorId, String competitorName, String competitorShortName,
|
||||
String boatName, String boatSailId, int oneBasedRank, MaxPointsReason maxPointsReason, Double score,
|
||||
TimePoint finishingTime, String comment, MergeState mergeState) {
|
||||
super();
|
||||
this.competitorId = competitorId;
|
||||
this.competitorDisplayName = competitorDisplayName;
|
||||
this.competitorName = competitorName;
|
||||
this.competitorShortName = competitorShortName;
|
||||
this.boatName = boatName;
|
||||
this.boatSailId = boatSailId;
|
||||
this.oneBasedRank = oneBasedRank;
|
||||
this.maxPointsReason = maxPointsReason;
|
||||
this.score = score;
|
||||
@@ -45,10 +66,25 @@ public class CompetitorResultImpl implements CompetitorResult {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCompetitorDisplayName() {
|
||||
return competitorDisplayName;
|
||||
public String getName() {
|
||||
return competitorName;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getShortName() {
|
||||
return competitorShortName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBoatName() {
|
||||
return boatName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBoatSailId() {
|
||||
return boatSailId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOneBasedRank() {
|
||||
return oneBasedRank;
|
||||
@@ -84,8 +120,11 @@ public class CompetitorResultImpl implements CompetitorResult {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((comment == null) ? 0 : comment.hashCode());
|
||||
result = prime * result + ((competitorDisplayName == null) ? 0 : competitorDisplayName.hashCode());
|
||||
result = prime * result + ((competitorName == null) ? 0 : competitorName.hashCode());
|
||||
result = prime * result + ((competitorShortName == null) ? 0 : competitorShortName.hashCode());
|
||||
result = prime * result + ((competitorId == null) ? 0 : competitorId.hashCode());
|
||||
result = prime * result + ((boatName == null) ? 0 : boatName.hashCode());
|
||||
result = prime * result + ((boatSailId == null) ? 0 : boatSailId.hashCode());
|
||||
result = prime * result + ((finishingTime == null) ? 0 : finishingTime.hashCode());
|
||||
result = prime * result + ((maxPointsReason == null) ? 0 : maxPointsReason.hashCode());
|
||||
result = prime * result + oneBasedRank;
|
||||
@@ -108,16 +147,26 @@ public class CompetitorResultImpl implements CompetitorResult {
|
||||
return false;
|
||||
} else if (!comment.equals(other.comment))
|
||||
return false;
|
||||
if (competitorDisplayName == null) {
|
||||
if (other.competitorDisplayName != null)
|
||||
if (competitorName == null) {
|
||||
if (other.competitorName != null)
|
||||
return false;
|
||||
} else if (!competitorDisplayName.equals(other.competitorDisplayName))
|
||||
} else if (!competitorName.equals(other.competitorName))
|
||||
return false;
|
||||
if (competitorId == null) {
|
||||
if (other.competitorId != null)
|
||||
return false;
|
||||
} else if (!competitorId.equals(other.competitorId))
|
||||
return false;
|
||||
if (boatName == null) {
|
||||
if (other.boatName != null)
|
||||
return false;
|
||||
} else if (!boatName.equals(other.boatName))
|
||||
return false;
|
||||
if (boatSailId == null) {
|
||||
if (other.boatSailId != null)
|
||||
return false;
|
||||
} else if (!boatSailId.equals(other.boatSailId))
|
||||
return false;
|
||||
if (finishingTime == null) {
|
||||
if (other.finishingTime != null)
|
||||
return false;
|
||||
@@ -142,9 +191,10 @@ public class CompetitorResultImpl implements CompetitorResult {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CompetitorResultImpl [competitorId=" + competitorId + ", competitorName=" + competitorDisplayName + ", rank="
|
||||
+ oneBasedRank + ", maxPointsReason=" + maxPointsReason + ", score=" + score + ", finishingTime="
|
||||
+ finishingTime + ", comment=" + comment + ", mergeState=" + mergeState + "]";
|
||||
return "CompetitorResultImpl [competitorId=" + competitorId + ", competitorName=" + competitorName
|
||||
+ ", competitorShortName=" + competitorShortName + ", boatName=" + boatName+ ", boatSailId="
|
||||
+ boatSailId + ", rank=" + oneBasedRank + ", maxPointsReason=" + maxPointsReason + ", score="+ score
|
||||
+ ", finishingTime=" + finishingTime + ", comment=" + comment + ", mergeState=" + mergeState + "]";
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -153,8 +153,8 @@ public class MarkPassingUpdateFromRaceLogFinishPositioingListTest extends Abstra
|
||||
final CompetitorResults results = new CompetitorResultsImpl();
|
||||
int rank = 1;
|
||||
for (Pair<Competitor, TimePoint> finishingTime : finishingTimes) {
|
||||
results.add(new CompetitorResultImpl(finishingTime.getA().getId(), finishingTime.getA().getName(), rank++, /* maxPointsReason */
|
||||
null, /* score */null, finishingTime.getB(), /* comment */null, MergeState.OK));
|
||||
results.add(new CompetitorResultImpl(finishingTime.getA().getId(), finishingTime.getA().getName(), finishingTime.getA().getShortName(),
|
||||
"BoatName", "BoatSailId", rank++, /* maxPointsReason */ null, /* score */null, finishingTime.getB(), /* comment */null, MergeState.OK));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
+17
-6
@@ -55,11 +55,13 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartProcedureChanged
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.Wind;
|
||||
@@ -307,9 +309,12 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
|
||||
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", "SAP",
|
||||
Color.RED, "someone@nowhere.de", null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), /* rank */
|
||||
1, MaxPointsReason.NONE, /* score */ null, /* finishingTimePoint */null, /* comment */null, MergeState.OK));
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), storedCompetitor.getShortName(),
|
||||
storedBoat.getName(), storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTimePoint */null,
|
||||
/* comment */null, MergeState.OK));
|
||||
RaceLogFinishPositioningConfirmedEvent event = new RaceLogFinishPositioningConfirmedEventImpl(now, author, 0, storedPositioningList);
|
||||
addAndStoreRaceLogEvent(leaderboard, raceColumnName, event);
|
||||
RaceLog loadedRaceLog = retrieveRaceLog();
|
||||
@@ -331,11 +336,14 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
|
||||
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", "SAP",
|
||||
Color.RED, "someone@nowhere.de", null, null,
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
|
||||
final TimePoint finishingTimePoint = MillisecondsTimePoint.now();
|
||||
final String comment = "This is a comment";
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), /* rank */
|
||||
1, MaxPointsReason.NONE, /* score */ 12.3, finishingTimePoint, comment, MergeState.OK));
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), storedCompetitor.getShortName(),
|
||||
storedBoat.getName(), storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.NONE, /* score */ 12.3, finishingTimePoint, comment,
|
||||
MergeState.OK));
|
||||
RaceLogFinishPositioningConfirmedEvent event = new RaceLogFinishPositioningConfirmedEventImpl(now, author, 0, storedPositioningList);
|
||||
addAndStoreRaceLogEvent(leaderboard, raceColumnName, event);
|
||||
RaceLog loadedRaceLog = retrieveRaceLog();
|
||||
@@ -399,9 +407,12 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
|
||||
public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogFinishPositioningListChangeEvent() {
|
||||
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", "SAP", Color.RED,
|
||||
"someone@nowhere.de", null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), /* rank */
|
||||
1, MaxPointsReason.NONE, /* score */ null, /* finishingTimePoint */null, /* comment */null, MergeState.OK));
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), storedCompetitor.getShortName(),
|
||||
storedBoat.getName(), storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTimePoint */null,
|
||||
/* comment */null, MergeState.OK));
|
||||
RaceLogFinishPositioningListChangedEvent event = new RaceLogFinishPositioningListChangedEventImpl(now, author, 0, storedPositioningList);
|
||||
|
||||
addAndStoreRaceLogEvent(leaderboard, raceColumnName, event);
|
||||
|
||||
+12
-2
@@ -43,6 +43,7 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartProcedureChangedEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -50,6 +51,7 @@ import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.FleetImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
@@ -207,8 +209,12 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
|
||||
public void testStoreAndRetrieveRegattaWithRaceLogFinishPositioningListChangeEvent() {
|
||||
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", "SAP", Color.RED,
|
||||
"someone@nowhere.de", null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), storedCompetitor.getShortName(),
|
||||
storedBoat.getName(), storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null,
|
||||
/* comment */ null, MergeState.OK));
|
||||
RaceLogFinishPositioningListChangedEvent event = new RaceLogFinishPositioningListChangedEventImpl(now, author, 0, storedPositioningList);
|
||||
addAndStoreRaceLogEvent(regatta, raceColumnName, event);
|
||||
RaceLog loadedRaceLog = retrieveRaceLog();
|
||||
@@ -231,8 +237,12 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
|
||||
public void testStoreAndRetrieveRegattaWithRaceLogFinishPositioningConfirmedEvent() {
|
||||
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", "SAP", Color.RED,
|
||||
"someone@nowhere.de", null, null, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null);
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
storedPositioningList.add(new CompetitorResultImpl(storedCompetitor.getId(), storedCompetitor.getName(), storedCompetitor.getShortName(),
|
||||
storedBoat.getName(), storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null,
|
||||
/* comment */ null, MergeState.OK));
|
||||
RaceLogFinishPositioningConfirmedEvent event = new RaceLogFinishPositioningConfirmedEventImpl(now, author, 0, storedPositioningList);
|
||||
addAndStoreRaceLogEvent(regatta, raceColumnName, event);
|
||||
RaceLog loadedRaceLog = retrieveRaceLog();
|
||||
|
||||
+7
-2
@@ -49,7 +49,10 @@ public abstract class RaceLogFinishPositioningEventDeserializer extends BaseRace
|
||||
JSONObject jsonPositionedCompetitor = Helpers.toJSONObjectSafe(object);
|
||||
Serializable competitorId = (Serializable) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_COMPETITOR_ID);
|
||||
competitorId = UUIDHelper.tryUuidConversion(competitorId);
|
||||
final String competitorDisplayName = (String) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_COMPETITOR_NAME);
|
||||
final String competitorName = (String) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_COMPETITOR_NAME);
|
||||
final String competitorShortName = (String) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_COMPETITOR_SHORT_NAME);
|
||||
final String competitorBoatName = (String) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_COMPETITOR_BOAT_NAME);
|
||||
final String competitorBoatSailId = (String) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_COMPETITOR_BOAT_SAIL_ID);
|
||||
final String maxPointsReasonName = (String) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON);
|
||||
final MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName);
|
||||
final Number rank = (Number) jsonPositionedCompetitor.get(RaceLogFinishPositioningConfirmedEventSerializer.FIELD_RANK);
|
||||
@@ -65,7 +68,9 @@ public abstract class RaceLogFinishPositioningEventDeserializer extends BaseRace
|
||||
mergeState = MergeState.valueOf(mergeStateAsString);
|
||||
}
|
||||
CompetitorResultImpl positionedCompetitor = new CompetitorResultImpl(
|
||||
competitorId, competitorDisplayName, rank == null ? rankCounter : rank.intValue(), maxPointsReason, score, finishingTime, comment, mergeState);
|
||||
competitorId, competitorName, competitorShortName, competitorBoatName, competitorBoatSailId,
|
||||
rank == null ? rankCounter : rank.intValue(), maxPointsReason, score, finishingTime, comment,
|
||||
mergeState);
|
||||
rankCounter++;
|
||||
positionedCompetitors.add(positionedCompetitor);
|
||||
}
|
||||
|
||||
+7
-1
@@ -14,6 +14,9 @@ public abstract class RaceLogFinishPositioningEventSerializer extends BaseRaceLo
|
||||
public static final String FIELD_POSITIONED_COMPETITORS = "positionedCompetitors";
|
||||
public static final String FIELD_COMPETITOR_ID = "competitorId";
|
||||
public static final String FIELD_COMPETITOR_NAME = "competitorName";
|
||||
public static final String FIELD_COMPETITOR_SHORT_NAME = "competitorShortName";
|
||||
public static final String FIELD_COMPETITOR_BOAT_NAME = "competitorBoatName";
|
||||
public static final String FIELD_COMPETITOR_BOAT_SAIL_ID = "competitorBoatSailId";
|
||||
public static final String FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON = "maxPointsReason";
|
||||
public static final String FIELD_SCORE = "score";
|
||||
public static final String FIELD_COMMENT = "comment";
|
||||
@@ -42,7 +45,10 @@ public abstract class RaceLogFinishPositioningEventSerializer extends BaseRaceLo
|
||||
for (CompetitorResult positionedCompetitor : positionedCompetitors) {
|
||||
JSONObject jsonPositionedCompetitor = new JSONObject();
|
||||
jsonPositionedCompetitor.put(FIELD_COMPETITOR_ID, positionedCompetitor.getCompetitorId().toString());
|
||||
jsonPositionedCompetitor.put(FIELD_COMPETITOR_NAME, positionedCompetitor.getCompetitorDisplayName());
|
||||
jsonPositionedCompetitor.put(FIELD_COMPETITOR_NAME, positionedCompetitor.getName());
|
||||
jsonPositionedCompetitor.put(FIELD_COMPETITOR_SHORT_NAME, positionedCompetitor.getShortName());
|
||||
jsonPositionedCompetitor.put(FIELD_COMPETITOR_BOAT_NAME, positionedCompetitor.getBoatName());
|
||||
jsonPositionedCompetitor.put(FIELD_COMPETITOR_BOAT_SAIL_ID, positionedCompetitor.getBoatSailId());
|
||||
jsonPositionedCompetitor.put(FIELD_SCORE_CORRECTIONS_MAX_POINTS_REASON, positionedCompetitor.getMaxPointsReason().name());
|
||||
jsonPositionedCompetitor.put(FIELD_SCORE, positionedCompetitor.getScore());
|
||||
jsonPositionedCompetitor.put(FIELD_COMMENT, positionedCompetitor.getComment());
|
||||
|
||||
+8
-2
@@ -21,8 +21,10 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogFinishPositioningConfirmed
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogFinishPositioningConfirmedEventImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CompetitorJsonDeserializer;
|
||||
@@ -34,6 +36,7 @@ import com.sap.sailing.server.gateway.serialization.impl.NationalityJsonSerializ
|
||||
import com.sap.sailing.server.gateway.serialization.impl.PersonJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.TeamJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogFinishPositioningConfirmedEventSerializer;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
@@ -68,8 +71,11 @@ public class RaceLogFinishPositioningConfirmedEventSerializerTest {
|
||||
|
||||
@Test
|
||||
public void testSerializeAndDeserializeRaceLogFinishPositioningConfirmedEvent() throws JsonDeserializationException {
|
||||
positioningList.add(new CompetitorResultImpl(UUID.randomUUID(), "SAP Extreme", /* rank */ 1,
|
||||
MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
positioningList.add(new CompetitorResultImpl(UUID.randomUUID(), "SAP Extreme", "SAP Ext", storedBoat.getName(),
|
||||
storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null,
|
||||
/* comment */ null, MergeState.OK));
|
||||
event = new RaceLogFinishPositioningConfirmedEventImpl(now, author, 0, positioningList);
|
||||
JSONObject jsonConfirmationEvent = serializer.serialize(event);
|
||||
RaceLogFinishPositioningConfirmedEvent deserializedEvent = (RaceLogFinishPositioningConfirmedEvent) deserializer.deserialize(jsonConfirmationEvent);
|
||||
|
||||
+12
-3
@@ -23,11 +23,13 @@ import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl.RacingProcedureFactoryImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.configuration.impl.EmptyRegattaConfiguration;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.NationalityImpl;
|
||||
import com.sap.sailing.domain.base.impl.PersonImpl;
|
||||
import com.sap.sailing.domain.base.impl.TeamImpl;
|
||||
@@ -94,13 +96,16 @@ public class ApplyScoresFromRaceLogTest extends LeaderboardScoringAndRankingTest
|
||||
final Map<Competitor, MaxPointsReason> mprs = new HashMap<>();
|
||||
int oneBasedRank = 1;
|
||||
final CompetitorResults results = new CompetitorResultsImpl();
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
for (final Competitor c : competitors) {
|
||||
final MaxPointsReason mpr = new MaxPointsReason[] { null, MaxPointsReason.NONE, MaxPointsReason.DNF, MaxPointsReason.OCS }[oneBasedRank%4];
|
||||
final Double score = oneBasedRank%5 == 0 ? null : 20*Math.random();
|
||||
scores.put(c, score);
|
||||
mprs.put(c, mpr);
|
||||
results.add(new CompetitorResultImpl(c.getId(), c.getName(),
|
||||
oneBasedRank++, mpr, score, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
results.add(new CompetitorResultImpl(c.getId(), c.getName(), c.getShortName(), storedBoat.getName(),
|
||||
storedBoat.getSailID(), oneBasedRank++, mpr, score, /* finishingTime */ null, /* comment */ null,
|
||||
MergeState.OK));
|
||||
}
|
||||
final RaceLog f1RaceLog = f1Column.getRaceLog(f1Column.getFleets().iterator().next());
|
||||
final LogEventAuthorImpl author = new LogEventAuthorImpl("Axel", 0);
|
||||
@@ -229,6 +234,10 @@ public class ApplyScoresFromRaceLogTest extends LeaderboardScoringAndRankingTest
|
||||
|
||||
private void setResultForCompetitor(final Competitor competitor, int oneBasedRank,
|
||||
final CompetitorResults results, MaxPointsReason maxPointsReason, Double explicitScore) {
|
||||
results.add(new CompetitorResultImpl(competitor.getId(), competitor.getName(), oneBasedRank, maxPointsReason, explicitScore, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
results.add(new CompetitorResultImpl(competitor.getId(), competitor.getName(),
|
||||
competitor.getShortName(), storedBoat.getName(), storedBoat.getSailID(), oneBasedRank,
|
||||
maxPointsReason, explicitScore, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
}
|
||||
}
|
||||
+8
-2
@@ -1007,10 +1007,16 @@ public class MasterDataImportTest {
|
||||
// Add a competitor-related race log event to ensure that no competitor resolution is attempted while receiving
|
||||
TimePoint logTimePoint2 = logTimePoint.plus(10);
|
||||
CompetitorResults positionedCompetitors = new CompetitorResultsImpl();
|
||||
Boat storedBoat = DomainFactory.INSTANCE.getOrCreateBoat(UUID.randomUUID(), "SAP Extreme Sailing Team",
|
||||
new BoatClassImpl("X40", false), "123", Color.RED);
|
||||
positionedCompetitors.add(new CompetitorResultImpl(
|
||||
competitor.getId(), competitor.getName(), /* rank */ 1, MaxPointsReason.DNS, /* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
competitor.getId(), competitor.getName(), competitor.getShortName(), storedBoat.getName(),
|
||||
storedBoat.getSailID(), /* rank */ 1, MaxPointsReason.DNS, /* score */ null, /* finishingTime */ null,
|
||||
/* comment */ null, MergeState.OK));
|
||||
positionedCompetitors.add(new CompetitorResultImpl(
|
||||
competitor2.getId(), competitor2.getName(), /* rank */ 2, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK));
|
||||
competitor2.getId(), competitor2.getName(), competitor.getShortName(), storedBoat.getName(),
|
||||
storedBoat.getSailID(), /* rank */ 2, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null,
|
||||
/* comment */ null, MergeState.OK));
|
||||
RaceLogFinishPositioningConfirmedEvent finishPositioningConfirmedEvent = new RaceLogFinishPositioningConfirmedEventImpl(
|
||||
logTimePoint2, author, 1, positionedCompetitors);
|
||||
raceColumn.getRaceLog(testFleet1).add(finishPositioningConfirmedEvent);
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:id="@+id/by_short_name"
|
||||
android:title="@string/sort_by_short_name" />
|
||||
<item
|
||||
android:id="@+id/by_boat"
|
||||
android:title="@string/sort_by_boat" />
|
||||
|
||||
@@ -518,6 +518,7 @@
|
||||
<string name="non_public_changed_title">Nicht öffentliche Events</string>
|
||||
<string name="competitor_list">Teilnehmerliste</string>
|
||||
<string name="sort_by_boat">nach Segelnummer</string>
|
||||
<string name="sort_by_short_name">nach Kurzname</string>
|
||||
<string name="sort_by_name">nach Namen</string>
|
||||
<string name="sort_by_start">nach Abstand zur Startlinie</string>
|
||||
<string name="sort_by_goal">nach getracktem Zieldurchgang</string>
|
||||
|
||||
@@ -547,6 +547,7 @@
|
||||
|
||||
<string name="competitor_list">Results</string>
|
||||
<string name="sort_by_boat">by Sail Number</string>
|
||||
<string name="sort_by_short_name">by Short Name</string>
|
||||
<string name="sort_by_name">by Competitor Name</string>
|
||||
<string name="sort_by_start">by Position to Start Line</string>
|
||||
<string name="sort_by_goal">by Tracked Position</string>
|
||||
|
||||
+61
-20
@@ -10,20 +10,40 @@ public class CompetitorResultEditableImpl implements CompetitorResult {
|
||||
private static final long serialVersionUID = 3928498127285186791L;
|
||||
|
||||
private Serializable mCompetitorId;
|
||||
private String mCompetitorDisplayName;
|
||||
private int mOneBasedRank;
|
||||
private MaxPointsReason mMaxPointsReason;
|
||||
private Double mScore;
|
||||
private TimePoint mFinishingTime;
|
||||
private String mComment;
|
||||
private MergeState mMergeState;
|
||||
private String mCompetitorName;
|
||||
private String mCompetitorShortName;
|
||||
private String mBoatName;
|
||||
private String mBoatSailId;
|
||||
|
||||
private boolean mDirty;
|
||||
private boolean mChecked;
|
||||
|
||||
public CompetitorResultEditableImpl(CompetitorResult result) {
|
||||
mCompetitorId = result.getCompetitorId();
|
||||
mCompetitorDisplayName = result.getCompetitorDisplayName();
|
||||
mCompetitorName = result.getName();
|
||||
mCompetitorShortName = result.getShortName();
|
||||
mBoatName = result.getBoatName();
|
||||
mBoatSailId = result.getBoatSailId();
|
||||
mOneBasedRank = result.getOneBasedRank();
|
||||
mMaxPointsReason = result.getMaxPointsReason();
|
||||
mScore = result.getScore();
|
||||
mFinishingTime = result.getFinishingTime();
|
||||
mComment = result.getComment();
|
||||
mMergeState = result.getMergeState();
|
||||
}
|
||||
|
||||
public void setValue(CompetitorResult result) {
|
||||
mCompetitorId = result.getCompetitorId();
|
||||
mCompetitorName = result.getName();
|
||||
mCompetitorShortName = result.getShortName();
|
||||
mBoatName = result.getBoatName();
|
||||
mBoatSailId = result.getBoatSailId();
|
||||
mOneBasedRank = result.getOneBasedRank();
|
||||
mMaxPointsReason = result.getMaxPointsReason();
|
||||
mScore = result.getScore();
|
||||
@@ -42,12 +62,39 @@ public class CompetitorResultEditableImpl implements CompetitorResult {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCompetitorDisplayName() {
|
||||
return mCompetitorDisplayName;
|
||||
public String getName() {
|
||||
return mCompetitorName;
|
||||
}
|
||||
|
||||
public void setCompetitorDisplayName(String competitorDisplayName) {
|
||||
mCompetitorDisplayName = competitorDisplayName;
|
||||
public void setName(String name) {
|
||||
mCompetitorName = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getShortName() {
|
||||
return mCompetitorShortName;
|
||||
}
|
||||
|
||||
public void setShortName(String shortName) {
|
||||
mCompetitorShortName = shortName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBoatName() {
|
||||
return mBoatName;
|
||||
}
|
||||
|
||||
public void setBoatName(String name) {
|
||||
mBoatName = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBoatSailId() {
|
||||
return mBoatSailId;
|
||||
}
|
||||
|
||||
public void setBoatSailId(String id) {
|
||||
mBoatSailId = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -119,17 +166,6 @@ public class CompetitorResultEditableImpl implements CompetitorResult {
|
||||
this.mMergeState = mergeState;
|
||||
}
|
||||
|
||||
public void setValue(CompetitorResult result) {
|
||||
mCompetitorId = result.getCompetitorId();
|
||||
mCompetitorDisplayName = result.getCompetitorDisplayName();
|
||||
mOneBasedRank = result.getOneBasedRank();
|
||||
mMaxPointsReason = result.getMaxPointsReason();
|
||||
mScore = result.getScore();
|
||||
mFinishingTime = result.getFinishingTime();
|
||||
mComment = result.getComment();
|
||||
mMergeState = result.getMergeState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o)
|
||||
@@ -143,8 +179,11 @@ public class CompetitorResultEditableImpl implements CompetitorResult {
|
||||
return false;
|
||||
if (mCompetitorId != null ? !mCompetitorId.equals(that.mCompetitorId) : that.mCompetitorId != null)
|
||||
return false;
|
||||
if (mCompetitorDisplayName != null ? !mCompetitorDisplayName.equals(that.mCompetitorDisplayName)
|
||||
: that.mCompetitorDisplayName != null)
|
||||
if (mCompetitorName != null ? !mCompetitorName.equals(that.mCompetitorName) : that.mCompetitorName != null)
|
||||
return false;
|
||||
if (mBoatName != null ? !mBoatName.equals(that.mBoatName) : that.mBoatName != null)
|
||||
return false;
|
||||
if (mBoatSailId != null ? !mBoatSailId.equals(that.mBoatSailId) : that.mBoatSailId != null)
|
||||
return false;
|
||||
if (mMaxPointsReason != that.mMaxPointsReason)
|
||||
return false;
|
||||
@@ -159,7 +198,9 @@ public class CompetitorResultEditableImpl implements CompetitorResult {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = mCompetitorId != null ? mCompetitorId.hashCode() : 0;
|
||||
result = 31 * result + (mCompetitorDisplayName != null ? mCompetitorDisplayName.hashCode() : 0);
|
||||
result = 31 * result + (mCompetitorName != null ? mCompetitorName.hashCode() : 0);
|
||||
result = 31 * result + (mBoatName != null ? mBoatName.hashCode() : 0);
|
||||
result = 31 * result + (mBoatSailId != null ? mBoatSailId.hashCode() : 0);
|
||||
result = 31 * result + mOneBasedRank;
|
||||
result = 31 * result + (mMaxPointsReason != null ? mMaxPointsReason.hashCode() : 0);
|
||||
result = 31 * result + (mScore != null ? mScore.hashCode() : 0);
|
||||
|
||||
+9
-8
@@ -15,16 +15,17 @@ public class CompetitorResultWithIdImpl extends CompetitorResultImpl {
|
||||
private Boat mBoat;
|
||||
|
||||
public CompetitorResultWithIdImpl(long id, Boat boat, CompetitorResult result) {
|
||||
this(id, boat, result.getCompetitorId(), result.getCompetitorDisplayName(), result.getOneBasedRank(),
|
||||
result.getMaxPointsReason(), result.getScore(), result.getFinishingTime(), result.getComment(),
|
||||
result.getMergeState());
|
||||
this(id, boat, result.getCompetitorId(), result.getName(), result.getShortName(),
|
||||
result.getOneBasedRank(), result.getMaxPointsReason(), result.getScore(), result.getFinishingTime(),
|
||||
result.getComment(), result.getMergeState());
|
||||
}
|
||||
|
||||
public CompetitorResultWithIdImpl(long id, Boat boat, Serializable competitorId, String competitorDisplayName,
|
||||
int oneBasedRank, MaxPointsReason maxPointsReason, Double score, TimePoint finishingTime, String comment,
|
||||
MergeState mergeState) {
|
||||
super(competitorId, competitorDisplayName, oneBasedRank, maxPointsReason, score, finishingTime, comment,
|
||||
mergeState);
|
||||
public CompetitorResultWithIdImpl(long id, Boat boat, Serializable competitorId, String competitorName,
|
||||
String shortName, int oneBasedRank, MaxPointsReason maxPointsReason, Double score, TimePoint finishingTime,
|
||||
String comment, MergeState mergeState) {
|
||||
super(competitorId, competitorName, shortName,
|
||||
boat == null ? null : boat.getName(), boat == null ? null : boat.getSailID(),
|
||||
oneBasedRank, maxPointsReason, score, finishingTime, comment, mergeState);
|
||||
|
||||
mId = id;
|
||||
mBoat = boat;
|
||||
|
||||
+11
-14
@@ -1,14 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.adapters;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -16,6 +7,16 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.CompetitorUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CompetitorAndBoatAdapter extends RecyclerView.Adapter<CompetitorAndBoatAdapter.ViewHolder> {
|
||||
|
||||
private static final String TAG = CompetitorAndBoatAdapter.class.getName();
|
||||
@@ -49,11 +50,7 @@ public class CompetitorAndBoatAdapter extends RecyclerView.Adapter<CompetitorAnd
|
||||
ViewHelper.setColors(holder.vesselId, boat.getColor().getAsHtml());
|
||||
}
|
||||
}
|
||||
String name = "";
|
||||
if (competitor.getShortInfo() != null) {
|
||||
name += competitor.getShortInfo() + " - ";
|
||||
}
|
||||
name += competitor.getName();
|
||||
String name = CompetitorUtils.getDisplayName(competitor);
|
||||
if (holder.competitor != null) {
|
||||
holder.competitor.setText(name);
|
||||
}
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import com.sap.sailing.racecommittee.app.domain.impl.CompetitorResultWithIdImpl;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.dragandswipelist.BaseDraggableSwipeAdapter;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.dragandswipelist.BaseDraggableSwipeViewHolder;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.CompetitorUtils;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -90,7 +91,7 @@ public class FinishListAdapter extends BaseDraggableSwipeAdapter<FinishListAdapt
|
||||
ViewHelper.setColors(holder.vesselId, item.getBoat().getColor().getAsHtml());
|
||||
}
|
||||
}
|
||||
holder.competitor.setText(item.getCompetitorDisplayName());
|
||||
holder.competitor.setText(CompetitorUtils.getDisplayName(item));
|
||||
Drawable warning;
|
||||
switch (item.getMergeState()) {
|
||||
case ERROR:
|
||||
|
||||
+29
-41
@@ -21,9 +21,11 @@ import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.CompetitorResultEditableImpl;
|
||||
import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorSailIdComparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorShortNameComparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.CompetitorUtils;
|
||||
import com.sap.sailing.racecommittee.app.utils.StringHelper;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -36,8 +38,9 @@ import java.util.Map;
|
||||
|
||||
public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHolder> {
|
||||
|
||||
private static final int SAILING_NUMBER_POSITION = 0;
|
||||
private static final int COMPETITOR_NAME_POSITION = 1;
|
||||
private static final int COMPETITOR_SHORT_NAME_POSITION = 0;
|
||||
private static final int SAILING_NUMBER_POSITION = 1;
|
||||
private static final int COMPETITOR_NAME_POSITION = 2;
|
||||
|
||||
private final Context mContext;
|
||||
private final ItemListener mListener;
|
||||
@@ -71,7 +74,7 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
|
||||
bgId = R.attr.sap_gray_black_20;
|
||||
}
|
||||
holder.itemView.setBackgroundColor(ThemeHelper.getColor(mContext, bgId));
|
||||
holder.mItemText.setText(item.getCompetitorDisplayName());
|
||||
holder.mItemText.setText(CompetitorUtils.getDisplayName(item));
|
||||
final boolean hasReason = !MaxPointsReason.NONE.equals(item.getMaxPointsReason());
|
||||
holder.mItemPenalty.setVisibility(hasReason ? View.VISIBLE : View.GONE);
|
||||
if (hasReason) {
|
||||
@@ -156,7 +159,7 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
|
||||
result.addAll(mCompetitor);
|
||||
} else {
|
||||
for (int i = 0; i < mCompetitor.size(); i++) {
|
||||
if (StringHelper.on(mContext).containsIgnoreCase(mCompetitor.get(i).getCompetitorDisplayName(),
|
||||
if (StringHelper.on(mContext).containsIgnoreCase(CompetitorUtils.getDisplayName(mCompetitor.get(i)),
|
||||
mFilter)) {
|
||||
result.add(mCompetitor.get(i));
|
||||
}
|
||||
@@ -169,16 +172,17 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
|
||||
private void sortData() {
|
||||
Comparator<CompetitorResultEditableImpl> comparator = null;
|
||||
switch (mOrderBy) {
|
||||
case SAILING_NUMBER:
|
||||
comparator = new DisplayNameComparator(SAILING_NUMBER_POSITION);
|
||||
break;
|
||||
|
||||
case COMPETITOR_NAME:
|
||||
comparator = new DisplayNameComparator(COMPETITOR_NAME_POSITION);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
case COMPETITOR_SHORT_NAME:
|
||||
comparator = new DisplayNameComparator(COMPETITOR_SHORT_NAME_POSITION);
|
||||
break;
|
||||
case SAILING_NUMBER:
|
||||
comparator = new DisplayNameComparator(SAILING_NUMBER_POSITION);
|
||||
break;
|
||||
case COMPETITOR_NAME:
|
||||
comparator = new DisplayNameComparator(COMPETITOR_NAME_POSITION);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (mFiltered != null && comparator != null) {
|
||||
@@ -188,7 +192,7 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
|
||||
}
|
||||
|
||||
public enum OrderBy {
|
||||
SAILING_NUMBER, COMPETITOR_NAME, START_LINE, FINISH_LINE
|
||||
COMPETITOR_SHORT_NAME, SAILING_NUMBER, COMPETITOR_NAME, START_LINE, FINISH_LINE
|
||||
}
|
||||
|
||||
public interface ItemListener {
|
||||
@@ -212,32 +216,16 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
|
||||
|
||||
@Override
|
||||
public int compare(CompetitorResultEditableImpl lhs, CompetitorResultEditableImpl rhs) {
|
||||
String[] left = splitDisplayName(lhs.getCompetitorDisplayName());
|
||||
String[] right = splitDisplayName(rhs.getCompetitorDisplayName());
|
||||
|
||||
int leftPos = mPos;
|
||||
int rightPos = mPos;
|
||||
if (left.length == 1) {
|
||||
leftPos = 0;
|
||||
switch (mPos) {
|
||||
case COMPETITOR_SHORT_NAME_POSITION:
|
||||
return CompetitorShortNameComparator
|
||||
.compare(lhs.getShortName(), rhs.getShortName(), mNaturalComparator);
|
||||
case SAILING_NUMBER_POSITION:
|
||||
return CompetitorSailIdComparator
|
||||
.compare(lhs.getBoatSailId(), rhs.getBoatSailId(), mNaturalComparator);
|
||||
default:
|
||||
return mNaturalComparator.compare(lhs.getName(), rhs.getName());
|
||||
}
|
||||
if (right.length == 1) {
|
||||
rightPos = 0;
|
||||
}
|
||||
String leftItem = left[leftPos];
|
||||
String rightItem = right[rightPos];
|
||||
if (mPos == SAILING_NUMBER_POSITION) {
|
||||
for (String leftData : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(leftItem)) {
|
||||
leftItem = leftData;
|
||||
}
|
||||
for (String rightData : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(rightItem)) {
|
||||
rightItem = rightData;
|
||||
}
|
||||
}
|
||||
return mNaturalComparator.compare(leftItem, rightItem);
|
||||
}
|
||||
|
||||
private String[] splitDisplayName(String displayName) {
|
||||
return displayName.split(" - ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+27
-18
@@ -1,13 +1,13 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.comparators;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
|
||||
public class CompetitorSailIdComparator implements Comparator<Map.Entry<Competitor, Boat>> {
|
||||
|
||||
private Comparator<String> comparator;
|
||||
@@ -22,22 +22,31 @@ public class CompetitorSailIdComparator implements Comparator<Map.Entry<Competit
|
||||
&& rightCompetitor.getValue() != null) {
|
||||
Boat left = leftCompetitor.getValue();
|
||||
Boat right = rightCompetitor.getValue();
|
||||
|
||||
// if right is null, left will be greater
|
||||
if (right == null || right.getSailID() == null) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
String leftBoat = "";
|
||||
for (String lh : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(left.getSailID())) {
|
||||
leftBoat = lh;
|
||||
}
|
||||
String rightBoat = "";
|
||||
for (String rh : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(right.getSailID())) {
|
||||
rightBoat = rh;
|
||||
}
|
||||
return comparator.compare(leftBoat, rightBoat);
|
||||
String leftSailId = left == null ? null : left.getSailID();
|
||||
String rightSailId = right == null ? null : right.getSailID();
|
||||
return compare(leftSailId, rightSailId, comparator);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int compare(String leftSailId, String rightSailId, Comparator<String> comparator) {
|
||||
if (leftSailId == null && rightSailId == null) {
|
||||
return 0;
|
||||
}
|
||||
if (leftSailId == null) {
|
||||
return -1;
|
||||
}
|
||||
if (rightSailId == null) {
|
||||
return 1;
|
||||
}
|
||||
String leftBoat = "";
|
||||
for (String lh : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(leftSailId)) {
|
||||
leftBoat = lh;
|
||||
}
|
||||
String rightBoat = "";
|
||||
for (String rh : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(rightSailId)) {
|
||||
rightBoat = rh;
|
||||
}
|
||||
return comparator.compare(leftBoat, rightBoat);
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.comparators;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
|
||||
public class CompetitorShortNameComparator implements Comparator<Map.Entry<Competitor, Boat>> {
|
||||
|
||||
private NaturalComparator comparator;
|
||||
|
||||
public CompetitorShortNameComparator() {
|
||||
this.comparator = new NaturalComparator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(Map.Entry<Competitor, Boat> leftCompetitor, Map.Entry<Competitor, Boat> rightCompetitor) {
|
||||
if (leftCompetitor != null && leftCompetitor.getKey() != null && rightCompetitor != null
|
||||
&& rightCompetitor.getKey() != null) {
|
||||
Competitor left = leftCompetitor.getKey();
|
||||
Competitor right = rightCompetitor.getKey();
|
||||
return compare(left.getShortName(), right.getShortName(), comparator);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int compare(String leftShortName, String rightShortName,
|
||||
Comparator<String> comparator) {
|
||||
if (TextUtils.isEmpty(leftShortName) && TextUtils.isEmpty(rightShortName)) {
|
||||
return 0;
|
||||
}
|
||||
if (TextUtils.isEmpty(leftShortName)) {
|
||||
return -1;
|
||||
}
|
||||
if (TextUtils.isEmpty(rightShortName)) {
|
||||
return 1;
|
||||
}
|
||||
return comparator.compare(leftShortName, rightShortName);
|
||||
}
|
||||
}
|
||||
+100
-107
@@ -62,6 +62,7 @@ import com.sap.sailing.racecommittee.app.ui.adapters.StringArraySpinnerAdapter;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.layouts.CompetitorEditLayout;
|
||||
import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.CompetitorUtils;
|
||||
import com.sap.sailing.racecommittee.app.ui.views.SearchView;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
import com.sap.sse.common.Util;
|
||||
@@ -130,11 +131,11 @@ public class PenaltyFragment extends BaseFragment
|
||||
RaceFragment fragment = TrackingListFragment.newInstance(new Bundle(), 1);
|
||||
int viewId = R.id.race_content;
|
||||
switch (getRaceState().getStatus()) {
|
||||
case FINISHED:
|
||||
viewId = getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case FINISHED:
|
||||
viewId = getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
replaceFragment(fragment, viewId);
|
||||
}
|
||||
@@ -238,17 +239,17 @@ public class PenaltyFragment extends BaseFragment
|
||||
if (procedure instanceof ConfigurableStartModeFlagRacingProcedure) {
|
||||
ConfigurableStartModeFlagRacingProcedure racingProcedure = getRaceState().getTypedRacingProcedure();
|
||||
switch (racingProcedure.getStartModeFlag()) {
|
||||
case BLACK:
|
||||
selection = mPenaltyAdapter.getPosition(MaxPointsReason.BFD.name());
|
||||
break;
|
||||
case BLACK:
|
||||
selection = mPenaltyAdapter.getPosition(MaxPointsReason.BFD.name());
|
||||
break;
|
||||
|
||||
case UNIFORM:
|
||||
selection = mPenaltyAdapter.getPosition(MaxPointsReason.UFD.name());
|
||||
break;
|
||||
case UNIFORM:
|
||||
selection = mPenaltyAdapter.getPosition(MaxPointsReason.UFD.name());
|
||||
break;
|
||||
|
||||
default:
|
||||
// nothing
|
||||
break;
|
||||
default:
|
||||
// nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (getRaceState().getStatus() == RaceLogRaceStatus.FINISHED) {
|
||||
@@ -257,34 +258,34 @@ public class PenaltyFragment extends BaseFragment
|
||||
mPenaltyDropDown.setSelection(selection);
|
||||
}
|
||||
switch (getRaceState().getStatus()) {
|
||||
case FINISHED:
|
||||
if (mHeader != null) {
|
||||
if (AppUtils.with(getActivity()).isPhone()) {
|
||||
mHeader.setVisibility(View.VISIBLE);
|
||||
mHeader.setHeaderOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
|
||||
sendIntent(AppConstants.INTENT_ACTION_SHOW_SUMMARY_CONTENT);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mHeader.setVisibility(View.GONE);
|
||||
case FINISHED:
|
||||
if (mHeader != null) {
|
||||
if (AppUtils.with(getActivity()).isPhone()) {
|
||||
mHeader.setVisibility(View.VISIBLE);
|
||||
mHeader.setHeaderOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
|
||||
sendIntent(AppConstants.INTENT_ACTION_SHOW_SUMMARY_CONTENT);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mHeader.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
case FINISHING:
|
||||
if (mListButton != null) {
|
||||
mListButton.setImageDrawable(BitmapHelper.getAttrDrawable(getActivity(), R.attr.list_both_24dp));
|
||||
}
|
||||
if (mListButtonLayout != null) {
|
||||
mListButtonLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
break;
|
||||
case FINISHING:
|
||||
if (mListButton != null) {
|
||||
mListButton.setImageDrawable(BitmapHelper.getAttrDrawable(getActivity(), R.attr.list_both_24dp));
|
||||
}
|
||||
if (mListButtonLayout != null) {
|
||||
mListButtonLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (mListButtonLayout != null) {
|
||||
mListButtonLayout.setVisibility(View.GONE);
|
||||
}
|
||||
default:
|
||||
if (mListButtonLayout != null) {
|
||||
mListButtonLayout.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
if (mListButtonLayout != null) {
|
||||
mSearchView.isEditSmall(mListButtonLayout.getVisibility() == View.VISIBLE);
|
||||
@@ -297,9 +298,7 @@ public class PenaltyFragment extends BaseFragment
|
||||
mDraftData.clear();
|
||||
if (getRaceState().getFinishPositioningList() != null) {
|
||||
for (CompetitorResult item : getRaceState().getFinishPositioningList()) {
|
||||
mDraftData.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
mDraftData.add(new CompetitorResultImpl(item));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,9 +309,7 @@ public class PenaltyFragment extends BaseFragment
|
||||
mConfirmedData.clear();
|
||||
if (getRaceState().getConfirmedFinishPositioningList() != null) {
|
||||
for (CompetitorResult item : getRaceState().getConfirmedFinishPositioningList()) {
|
||||
mConfirmedData.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
mConfirmedData.add(new CompetitorResultImpl(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -424,18 +421,19 @@ public class PenaltyFragment extends BaseFragment
|
||||
|
||||
private void onLoadCompetitorsSucceeded(Map<Competitor, Boat> data) {
|
||||
mCompetitorResults.clear();
|
||||
for (Competitor item : data.keySet()) { // add loaded competitors
|
||||
String name = "";
|
||||
if (item.getShortInfo() != null) {
|
||||
name += item.getShortInfo() + " - ";
|
||||
}
|
||||
name += item.getName();
|
||||
CompetitorResult result = new CompetitorResultImpl(item.getId(), name, 0, MaxPointsReason.NONE,
|
||||
/* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK);
|
||||
|
||||
for (Map.Entry<Competitor, Boat> item : data.entrySet()) {
|
||||
Competitor competitor = item.getKey();
|
||||
Boat boat = item.getValue();
|
||||
|
||||
CompetitorResult result = new CompetitorResultImpl(competitor.getId(), competitor.getName(),
|
||||
competitor.getShortName(), boat.getName(), boat.getSailID(), 0, MaxPointsReason.NONE,
|
||||
/* score */ null, /* finishingTime */ null, /* comment */ null,
|
||||
MergeState.OK);
|
||||
mCompetitorResults.add(new CompetitorResultEditableImpl(result));
|
||||
}
|
||||
if (getRaceState() != null && getRaceState().getFinishPositioningList() != null) { // mix with finish position
|
||||
// list
|
||||
// list
|
||||
for (CompetitorResult result : getRaceState().getFinishPositioningList()) {
|
||||
int pos = 0;
|
||||
for (int i = 0; i < mCompetitorResults.size(); i++) {
|
||||
@@ -475,21 +473,25 @@ public class PenaltyFragment extends BaseFragment
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
OrderBy orderBy = OrderBy.SAILING_NUMBER;
|
||||
switch (item.getItemId()) {
|
||||
case R.id.by_name:
|
||||
orderBy = OrderBy.COMPETITOR_NAME;
|
||||
break;
|
||||
case R.id.by_short_name:
|
||||
orderBy = OrderBy.COMPETITOR_SHORT_NAME;
|
||||
break;
|
||||
|
||||
case R.id.by_start:
|
||||
orderBy = OrderBy.START_LINE;
|
||||
break;
|
||||
case R.id.by_name:
|
||||
orderBy = OrderBy.COMPETITOR_NAME;
|
||||
break;
|
||||
|
||||
case R.id.by_goal:
|
||||
orderBy = OrderBy.FINISH_LINE;
|
||||
loadLeaderboardResult();
|
||||
break;
|
||||
case R.id.by_start:
|
||||
orderBy = OrderBy.START_LINE;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
case R.id.by_goal:
|
||||
orderBy = OrderBy.FINISH_LINE;
|
||||
loadLeaderboardResult();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
mAdapter.setOrderedBy(orderBy);
|
||||
@@ -532,7 +534,7 @@ public class PenaltyFragment extends BaseFragment
|
||||
setMergeState(item, MergeState.ERROR);
|
||||
}
|
||||
item.setMaxPointsReason(result.getMaxPointsReason());
|
||||
changedCompetitor.put(item.getCompetitorId(), item.getCompetitorDisplayName());
|
||||
changedCompetitor.put(item.getCompetitorId(), CompetitorUtils.getDisplayName(item));
|
||||
}
|
||||
|
||||
// check score
|
||||
@@ -548,12 +550,12 @@ public class PenaltyFragment extends BaseFragment
|
||||
setMergeState(item, MergeState.ERROR);
|
||||
}
|
||||
item.setScore(result.getScore());
|
||||
changedCompetitor.put(item.getCompetitorId(), item.getCompetitorDisplayName());
|
||||
changedCompetitor.put(item.getCompetitorId(), CompetitorUtils.getDisplayName(item));
|
||||
}
|
||||
} else if (result.getScore() != null) {
|
||||
setMergeState(item, MergeState.ERROR);
|
||||
item.setScore(result.getScore());
|
||||
changedCompetitor.put(item.getCompetitorId(), item.getCompetitorDisplayName());
|
||||
changedCompetitor.put(item.getCompetitorId(), CompetitorUtils.getDisplayName(item));
|
||||
}
|
||||
|
||||
// check score
|
||||
@@ -569,18 +571,18 @@ public class PenaltyFragment extends BaseFragment
|
||||
setMergeState(item, MergeState.ERROR);
|
||||
}
|
||||
item.setComment(item.getComment() + " ## " + result.getComment());
|
||||
changedCompetitor.put(item.getCompetitorId(), item.getCompetitorDisplayName());
|
||||
changedCompetitor.put(item.getCompetitorId(), CompetitorUtils.getDisplayName(item));
|
||||
}
|
||||
} else if (result.getComment() != null) {
|
||||
setMergeState(item, MergeState.ERROR);
|
||||
item.setComment(result.getComment());
|
||||
changedCompetitor.put(item.getCompetitorId(), item.getCompetitorDisplayName());
|
||||
changedCompetitor.put(item.getCompetitorId(), CompetitorUtils.getDisplayName(item));
|
||||
}
|
||||
|
||||
// check merge state
|
||||
if (!item.getMergeState().equals(result.getMergeState())) {
|
||||
setMergeState(item, result.getMergeState());
|
||||
changedCompetitor.put(item.getCompetitorId(), item.getCompetitorDisplayName());
|
||||
changedCompetitor.put(item.getCompetitorId(), CompetitorUtils.getDisplayName(item));
|
||||
}
|
||||
} else {
|
||||
item.setValue(result);
|
||||
@@ -607,26 +609,26 @@ public class PenaltyFragment extends BaseFragment
|
||||
|
||||
private void setMergeState(CompetitorResultEditableImpl item, MergeState newState) {
|
||||
switch (item.getMergeState()) {
|
||||
case ERROR:
|
||||
if (newState != MergeState.ERROR) {
|
||||
case ERROR:
|
||||
if (newState != MergeState.ERROR) {
|
||||
break;
|
||||
}
|
||||
item.setDirty(true);
|
||||
item.setMergeState(newState);
|
||||
break;
|
||||
}
|
||||
item.setDirty(true);
|
||||
item.setMergeState(newState);
|
||||
break;
|
||||
|
||||
case WARNING:
|
||||
if (newState != MergeState.WARNING && newState != MergeState.ERROR) {
|
||||
case WARNING:
|
||||
if (newState != MergeState.WARNING && newState != MergeState.ERROR) {
|
||||
break;
|
||||
}
|
||||
item.setDirty(true);
|
||||
item.setMergeState(newState);
|
||||
break;
|
||||
}
|
||||
item.setDirty(true);
|
||||
item.setMergeState(newState);
|
||||
break;
|
||||
|
||||
case OK:
|
||||
item.setDirty(true);
|
||||
item.setMergeState(newState);
|
||||
break;
|
||||
case OK:
|
||||
item.setDirty(true);
|
||||
item.setMergeState(newState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -677,17 +679,14 @@ public class PenaltyFragment extends BaseFragment
|
||||
}
|
||||
}
|
||||
competitor.setMergeState(MergeState.OK);
|
||||
CompetitorResultWithIdImpl item = new CompetitorResultWithIdImpl(0, getBoat(competitor.getCompetitorId()),
|
||||
competitor.getCompetitorId(), competitor.getCompetitorDisplayName(), competitor.getOneBasedRank(),
|
||||
competitor.getMaxPointsReason(), competitor.getScore(), competitor.getFinishingTime(),
|
||||
competitor.getComment(), competitor.getMergeState());
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
|
||||
builder.setTitle(item.getCompetitorDisplayName());
|
||||
CompetitorResultWithIdImpl item = new CompetitorResultWithIdImpl(0, getBoat(competitor.getCompetitorId()), competitor);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AppTheme_AlertDialog);
|
||||
builder.setTitle(CompetitorUtils.getDisplayName(item));
|
||||
final CompetitorEditLayout layout = new CompetitorEditLayout(getActivity(), item,
|
||||
mCompetitorResults.getFirstRankZeroPosition() +
|
||||
/*
|
||||
* allow for setting rank as the new last in the list in case the competitor did not have a rank so far
|
||||
*/
|
||||
/*
|
||||
* allow for setting rank as the new last in the list in case the competitor did not have a rank so far
|
||||
*/
|
||||
(item.getOneBasedRank() == 0 ? 1 : 0),
|
||||
competitor.getMergeState() == MergeState.ERROR);
|
||||
builder.setView(layout);
|
||||
@@ -755,17 +754,13 @@ public class PenaltyFragment extends BaseFragment
|
||||
boolean found = false;
|
||||
for (CompetitorResult published : results) {
|
||||
if (item.getCompetitorId().equals(published.getCompetitorId())) {
|
||||
result.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
result.add(new CompetitorResultImpl(item));
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found && item.isDirty()) {
|
||||
result.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
result.add(new CompetitorResultImpl(item));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -777,9 +772,7 @@ public class PenaltyFragment extends BaseFragment
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
result.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
result.add(new CompetitorResultImpl(item));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Regular → Executable
+64
-87
@@ -61,9 +61,11 @@ import com.sap.sailing.racecommittee.app.ui.adapters.dragandswipelist.ItemTouchH
|
||||
import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorGoalPassingComparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorNameComparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorSailIdComparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorShortNameComparator;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.layouts.CompetitorEditLayout;
|
||||
import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.CompetitorUtils;
|
||||
import com.sap.sailing.racecommittee.app.ui.views.SearchView;
|
||||
import com.sap.sailing.racecommittee.app.utils.StringHelper;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
@@ -90,10 +92,11 @@ public class TrackingListFragment extends BaseFragment
|
||||
private static final int COMPETITOR_LOADER = 0;
|
||||
private static final int LEADERBOARD_ORDER_LOADER = 2;
|
||||
|
||||
private static final int SORT_SAIL_NUMBER = 0;
|
||||
private static final int SORT_NAME = 1;
|
||||
private static final int SORT_GOAL = 2;
|
||||
private static final int SORT_START = 3;
|
||||
private static final int SORT_SHORT_NAME = 0;
|
||||
private static final int SORT_SAIL_NUMBER = 1;
|
||||
private static final int SORT_NAME = 2;
|
||||
private static final int SORT_GOAL = 3;
|
||||
private static final int SORT_START = 4;
|
||||
|
||||
private RecyclerView mFinishView;
|
||||
private FinishListAdapter mFinishedAdapter;
|
||||
@@ -224,6 +227,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mComparators = new ArrayList<>();
|
||||
mComparators.add(SORT_SHORT_NAME, new CompetitorShortNameComparator());
|
||||
mComparators.add(SORT_SAIL_NUMBER, new CompetitorSailIdComparator());
|
||||
mComparators.add(SORT_NAME, new CompetitorNameComparator());
|
||||
mComparators.add(SORT_GOAL, new CompetitorGoalPassingComparator());
|
||||
@@ -311,9 +315,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
mConfirmedData.clear();
|
||||
if (getRaceState().getConfirmedFinishPositioningList() != null) {
|
||||
for (CompetitorResult item : getRaceState().getConfirmedFinishPositioningList()) {
|
||||
mConfirmedData.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
mConfirmedData.add(new CompetitorResultImpl(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -377,6 +379,9 @@ public class TrackingListFragment extends BaseFragment
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.by_short_name:
|
||||
mComparator = mComparators.get(SORT_SHORT_NAME);
|
||||
break;
|
||||
case R.id.by_name:
|
||||
mComparator = mComparators.get(SORT_NAME);
|
||||
break;
|
||||
@@ -598,15 +603,12 @@ public class TrackingListFragment extends BaseFragment
|
||||
context = actionBar.getThemedContext();
|
||||
}
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setTitle(item.getCompetitorDisplayName());
|
||||
final CompetitorEditLayout layout = new CompetitorEditLayout(getContext(),
|
||||
getRace().getState().getFinishingTime(), item, getFirstRankZeroPosition() +
|
||||
/*
|
||||
* allow for setting rank as the new last in the list in case the competitor did not have a rank so far
|
||||
*/
|
||||
(item.getOneBasedRank() == 0 ? 1 : 0),
|
||||
false, item.getMergeState() == MergeState.ERROR);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AppTheme_AlertDialog);
|
||||
builder.setTitle(CompetitorUtils.getDisplayName(item));
|
||||
final CompetitorEditLayout layout = new CompetitorEditLayout(getActivity(), getRace().getState().getFinishingTime(), item,
|
||||
mFinishedAdapter.getFirstRankZeroPosition() +
|
||||
/* allow for setting rank as the new last in the list in case the competitor did not have a rank so far */
|
||||
(item.getOneBasedRank() == 0 ? 1 : 0), false, item.getMergeState() == MergeState.ERROR);
|
||||
builder.setView(layout);
|
||||
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
@@ -625,7 +627,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(),
|
||||
getBoat(item.getCompetitorId()), item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
getBoat(item.getCompetitorId()), item.getCompetitorId(), item.getName(), item.getShortName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), MergeState.OK);
|
||||
updateItem(item, newItem);
|
||||
@@ -643,30 +645,23 @@ public class TrackingListFragment extends BaseFragment
|
||||
}
|
||||
|
||||
private void moveCompetitorToFinishList(Competitor competitor) {
|
||||
String name = "";
|
||||
if (competitor.getShortInfo() != null) {
|
||||
name += competitor.getShortInfo() + " - ";
|
||||
}
|
||||
name += competitor.getName();
|
||||
int pos = mFinishedAdapter.getFirstRankZeroPosition();
|
||||
// FIXME mFinishedData.size()+1 also counts penalized competitors before which the competitor is to be inserted!
|
||||
// I just wonder how the position shown in the app seems correct...
|
||||
// FIXME mFinishedData.size()+1 also counts penalized competitors before which the competitor is to be inserted! I just wonder how the position shown in the app seems correct...
|
||||
int greatestOneBasedRankSoFar = 0;
|
||||
for (final CompetitorResultWithIdImpl result : mFinishedData) {
|
||||
if (result.getOneBasedRank() > greatestOneBasedRankSoFar) {
|
||||
greatestOneBasedRankSoFar = result.getOneBasedRank();
|
||||
}
|
||||
}
|
||||
mFinishedData.add(pos,
|
||||
new CompetitorResultWithIdImpl(mId, getBoat(competitor.getId()), competitor.getId(), name,
|
||||
greatestOneBasedRankSoFar + 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null,
|
||||
/* comment */ null, MergeState.OK));
|
||||
CompetitorResultWithIdImpl theCompetitor = new CompetitorResultWithIdImpl(mId, getBoat(competitor.getId()), competitor.getId(),
|
||||
competitor.getName(), competitor.getShortName(), greatestOneBasedRankSoFar + 1, MaxPointsReason.NONE,
|
||||
/* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK);
|
||||
mFinishedData.add(pos, theCompetitor);
|
||||
mId++;
|
||||
setPublishButton();
|
||||
mFinishedAdapter.notifyItemInserted(pos);
|
||||
if (mDots.size() > 0) {
|
||||
Toast.makeText(getActivity(), getString(R.string.added_to_result_list, name, pos + 1), Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
Toast.makeText(getActivity(), getString(R.string.added_to_result_list, CompetitorUtils.getDisplayName(theCompetitor), pos + 1), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -716,11 +711,12 @@ public class TrackingListFragment extends BaseFragment
|
||||
}
|
||||
|
||||
public void onItemRemove(int position, CompetitorResultWithIdImpl item) {
|
||||
if (position < 0) { // not found
|
||||
return;
|
||||
if (position >= 0) { // found
|
||||
mFinishedData.remove(position);
|
||||
adjustRanks(position, getFirstRankZeroPosition());
|
||||
setPublishButton();
|
||||
mFinishedAdapter.notifyItemRemoved(position);
|
||||
}
|
||||
adjustRanks(position, getFirstRankZeroPosition());
|
||||
setPublishButton();
|
||||
for (Map.Entry<Competitor, Boat> entry : getRace().getCompetitorsAndBoats().entrySet()) {
|
||||
if (entry.getKey().getId().equals(item.getCompetitorId())) {
|
||||
addNewCompetitorToCompetitorList(entry);
|
||||
@@ -749,16 +745,13 @@ public class TrackingListFragment extends BaseFragment
|
||||
}
|
||||
}
|
||||
|
||||
private CompetitorResultWithIdImpl cloneCompetitorResultAndAdjustRank(
|
||||
CompetitorResultWithIdImpl competitorToReplaceWithAdjustedPosition, final int newOneBasedRank) {
|
||||
return new CompetitorResultWithIdImpl(competitorToReplaceWithAdjustedPosition.getId(),
|
||||
getBoat(competitorToReplaceWithAdjustedPosition.getCompetitorId()),
|
||||
competitorToReplaceWithAdjustedPosition.getCompetitorId(),
|
||||
competitorToReplaceWithAdjustedPosition.getCompetitorDisplayName(), newOneBasedRank,
|
||||
competitorToReplaceWithAdjustedPosition.getMaxPointsReason(),
|
||||
competitorToReplaceWithAdjustedPosition.getScore(),
|
||||
competitorToReplaceWithAdjustedPosition.getFinishingTime(),
|
||||
competitorToReplaceWithAdjustedPosition.getComment(), MergeState.OK);
|
||||
private CompetitorResultWithIdImpl cloneCompetitorResultAndAdjustRank(CompetitorResultWithIdImpl competitorToReplaceWithAdjustedPosition,
|
||||
final int newOneBasedRank) {
|
||||
return new CompetitorResultWithIdImpl(competitorToReplaceWithAdjustedPosition.getId(), getBoat(competitorToReplaceWithAdjustedPosition
|
||||
.getCompetitorId()), competitorToReplaceWithAdjustedPosition.getCompetitorId(), competitorToReplaceWithAdjustedPosition
|
||||
.getName(), competitorToReplaceWithAdjustedPosition.getShortName(), newOneBasedRank, competitorToReplaceWithAdjustedPosition
|
||||
.getMaxPointsReason(), competitorToReplaceWithAdjustedPosition.getScore(), competitorToReplaceWithAdjustedPosition
|
||||
.getFinishingTime(), competitorToReplaceWithAdjustedPosition.getComment(), MergeState.OK);
|
||||
}
|
||||
|
||||
public void onLongClick(final CompetitorResultWithIdImpl item) {
|
||||
@@ -825,10 +818,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
|
||||
protected void setMaxPointsReasonForItem(CompetitorResultWithIdImpl item, CharSequence maxPointsReasonName) {
|
||||
MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString());
|
||||
CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(),
|
||||
getBoat(item.getCompetitorId()), item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), maxPointsReason, item.getScore(), item.getFinishingTime(), item.getComment(),
|
||||
item.getMergeState());
|
||||
CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(), getBoat(item.getCompetitorId()), item);
|
||||
updateItem(item, newItem);
|
||||
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), getCompetitorResults());
|
||||
}
|
||||
@@ -836,9 +826,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
private CompetitorResults getCompetitorResults() {
|
||||
CompetitorResults result = new CompetitorResultsImpl();
|
||||
for (CompetitorResultWithIdImpl item : mFinishedData) {
|
||||
result.add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(),
|
||||
item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(),
|
||||
item.getComment(), item.getMergeState()));
|
||||
result.add(new CompetitorResultImpl(item));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -851,10 +839,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
boolean found = false;
|
||||
for (CompetitorResult newItem : mFinishedData) {
|
||||
if (oldItem.getCompetitorId().equals(newItem.getCompetitorId())) {
|
||||
CompetitorResult temp = new CompetitorResultImpl(newItem.getCompetitorId(),
|
||||
newItem.getCompetitorDisplayName(), newItem.getOneBasedRank(), newItem.getMaxPointsReason(),
|
||||
newItem.getScore(), newItem.getFinishingTime(), newItem.getComment(),
|
||||
newItem.getMergeState());
|
||||
CompetitorResult temp = new CompetitorResultImpl(newItem);
|
||||
if (!oldItem.equals(temp)) {
|
||||
result.add(temp);
|
||||
}
|
||||
@@ -863,9 +848,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
result.add(new CompetitorResultImpl(oldItem.getCompetitorId(), oldItem.getCompetitorDisplayName(), 0,
|
||||
oldItem.getMaxPointsReason(), oldItem.getScore(), oldItem.getFinishingTime(),
|
||||
oldItem.getComment(), oldItem.getMergeState()));
|
||||
result.add(new CompetitorResultImpl(oldItem, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -879,9 +862,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
result.add(new CompetitorResultImpl(newItem.getCompetitorId(), newItem.getCompetitorDisplayName(),
|
||||
newItem.getOneBasedRank(), newItem.getMaxPointsReason(), newItem.getScore(),
|
||||
newItem.getFinishingTime(), newItem.getComment(), newItem.getMergeState()));
|
||||
result.add(new CompetitorResultImpl(newItem));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1005,9 +986,9 @@ public class TrackingListFragment extends BaseFragment
|
||||
} else {
|
||||
state = MergeState.ERROR;
|
||||
}
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), result.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getScore(), item.getFinishingTime(), item.getComment(), getMergeState(item, state));
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(),
|
||||
item.getShortName(), result.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(),
|
||||
item.getFinishingTime(), item.getComment(), getMergeState(item, state));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
|
||||
@@ -1022,9 +1003,9 @@ public class TrackingListFragment extends BaseFragment
|
||||
} else {
|
||||
state = MergeState.ERROR;
|
||||
}
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), result.getMaxPointsReason(),
|
||||
item.getScore(), item.getFinishingTime(), item.getComment(), getMergeState(item, state));
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(),
|
||||
item.getShortName(), item.getOneBasedRank(), result.getMaxPointsReason(), item.getScore(),
|
||||
item.getFinishingTime(), item.getComment(), getMergeState(item, state));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
|
||||
@@ -1041,16 +1022,15 @@ public class TrackingListFragment extends BaseFragment
|
||||
state = MergeState.ERROR;
|
||||
}
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getName(), item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
result.getScore(), item.getFinishingTime(), item.getComment(),
|
||||
getMergeState(item, state));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
} else if (result.getScore() != null) {
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
result.getScore(), item.getFinishingTime(), item.getComment(),
|
||||
getMergeState(item, MergeState.ERROR));
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(),
|
||||
item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), result.getScore(),
|
||||
item.getFinishingTime(), item.getComment(), getMergeState(item, MergeState.ERROR));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
|
||||
@@ -1067,16 +1047,15 @@ public class TrackingListFragment extends BaseFragment
|
||||
state = MergeState.ERROR;
|
||||
}
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getName(), item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getScore(), result.getFinishingTime(), item.getComment(),
|
||||
getMergeState(item, state));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
} else if (result.getFinishingTime() != null) {
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getScore(), result.getFinishingTime(), item.getComment(),
|
||||
getMergeState(item, MergeState.ERROR));
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(),
|
||||
item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(),
|
||||
result.getFinishingTime(), item.getComment(), getMergeState(item, MergeState.ERROR));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
|
||||
@@ -1093,25 +1072,23 @@ public class TrackingListFragment extends BaseFragment
|
||||
state = MergeState.ERROR;
|
||||
}
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getName(), item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getScore(), item.getFinishingTime(),
|
||||
item.getComment() + " ## " + result.getComment(), getMergeState(item, state));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
} else if (result.getComment() != null) {
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getScore(), item.getFinishingTime(), result.getComment(),
|
||||
getMergeState(item, MergeState.ERROR));
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(),
|
||||
item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(),
|
||||
item.getFinishingTime(), result.getComment(), getMergeState(item, MergeState.ERROR));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
|
||||
// check merge state
|
||||
if (!item.getMergeState().equals(result.getMergeState())) {
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(),
|
||||
item.getCompetitorDisplayName(), item.getOneBasedRank(), item.getMaxPointsReason(),
|
||||
item.getScore(), item.getFinishingTime(), item.getComment(),
|
||||
getMergeState(item, result.getMergeState()));
|
||||
newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(),
|
||||
item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(),
|
||||
item.getFinishingTime(), item.getComment(), getMergeState(item, result.getMergeState()));
|
||||
item = updateChangedItem(changedCompetitor, item, newItem);
|
||||
}
|
||||
} else { // unknown result, so it will be added
|
||||
@@ -1151,7 +1128,7 @@ public class TrackingListFragment extends BaseFragment
|
||||
private CompetitorResultWithIdImpl updateChangedItem(Map<Serializable, String> changedCompetitor,
|
||||
CompetitorResultWithIdImpl item, CompetitorResultWithIdImpl newItem) {
|
||||
updateItem(item, newItem);
|
||||
changedCompetitor.put(newItem.getCompetitorId(), newItem.getCompetitorDisplayName());
|
||||
changedCompetitor.put(newItem.getCompetitorId(), CompetitorUtils.getDisplayName(newItem));
|
||||
return newItem;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -223,9 +223,9 @@ public class CompetitorEditLayout extends ScrollView
|
||||
if (mComment != null) {
|
||||
comment = mComment.getText().toString();
|
||||
}
|
||||
CompetitorResult result = new CompetitorResultImpl(mCompetitor.getCompetitorId(),
|
||||
mCompetitor.getCompetitorDisplayName(), oneBaseRank, maxPointsReason, score, finishingTime, comment,
|
||||
MergeState.OK);
|
||||
CompetitorResult result = new CompetitorResultImpl(mCompetitor.getCompetitorId(), mCompetitor.getName(),
|
||||
mCompetitor.getShortName(), mCompetitor.getBoatName(), mCompetitor.getBoatSailId(), oneBaseRank,
|
||||
maxPointsReason, score, finishingTime, comment, MergeState.OK);
|
||||
return new CompetitorResultWithIdImpl(mCompetitor.getId(), mCompetitor.getBoat(), result);
|
||||
}
|
||||
|
||||
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.utils;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
|
||||
public class CompetitorUtils {
|
||||
|
||||
public static final String DELIMITER_SHORT_NAME = " / ";
|
||||
public static final String DELIMITER_SAIL_ID = " - ";
|
||||
|
||||
public static String getDisplayName(Competitor competitor) {
|
||||
String shortName = competitor.getShortName();
|
||||
String sailIdOrBoatName = null;
|
||||
if (competitor.hasBoat() && competitor instanceof CompetitorWithBoat) {
|
||||
CompetitorWithBoat competitorWithBoat = (CompetitorWithBoat) competitor;
|
||||
String sailId = competitorWithBoat.getBoat().getSailID();
|
||||
if (TextUtils.isEmpty(sailId)) {
|
||||
sailIdOrBoatName = competitorWithBoat.getBoat().getName();
|
||||
} else {
|
||||
sailIdOrBoatName = sailId;
|
||||
}
|
||||
}
|
||||
return getDisplayName(shortName, sailIdOrBoatName, competitor.getName());
|
||||
}
|
||||
|
||||
public static String getDisplayName(CompetitorResult competitor) {
|
||||
String shortName = competitor.getShortName();
|
||||
String sailIdOrBoatName;
|
||||
String sailId = competitor.getBoatSailId();
|
||||
if (TextUtils.isEmpty(sailId)) {
|
||||
sailIdOrBoatName = competitor.getBoatName();
|
||||
} else {
|
||||
sailIdOrBoatName = sailId;
|
||||
}
|
||||
return getDisplayName(shortName, sailIdOrBoatName, competitor.getName());
|
||||
}
|
||||
|
||||
private static String getDisplayName(@Nullable String shortName,
|
||||
@Nullable String sailIdOrBoatName, String name) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
if (!TextUtils.isEmpty(shortName)) {
|
||||
builder.append(shortName);
|
||||
builder.append(DELIMITER_SHORT_NAME);
|
||||
}
|
||||
if (!TextUtils.isEmpty(sailIdOrBoatName)) {
|
||||
builder.append(sailIdOrBoatName);
|
||||
builder.append(DELIMITER_SAIL_ID);
|
||||
}
|
||||
builder.append(name);
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user