moved more of the default score correction implementation to the resultimport bundle to re-use between FREG and other importers

This commit is contained in:
Axel Uhl committed 2013-04-10 18:14:37 +02:00
1 parent 5f75cb9464
commit 9b0ff70e90
15 files changed
+25 -239

No files matched your search

@@ -7,6 +7,7 @@ Bundle-Activator: com.sap.sailing.freg.resultimport.impl.Activator
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.sap.sailing.resultimport,
com.sap.sailing.resultimport.impl,
org.osgi.framework;version="1.3.0"
Bundle-ActivationPolicy: lazy
Require-Bundle: com.sap.sailing.domain.common,
@@ -1,38 +0,0 @@
package com.sap.sailing.freg.resultimport.impl;
import com.sap.sailing.resultimport.CompetitorEntry;
public class CompetitorEntryImpl implements CompetitorEntry {
private final Integer rank;
private final String maxPointsReason;
private final Double score;
private final boolean discarded;
public CompetitorEntryImpl(Integer rank, String maxPointsReason, Double score, boolean discarded) {
super();
this.rank = rank;
this.maxPointsReason = maxPointsReason;
this.score = score;
this.discarded = discarded;
}
@Override
public Integer getRank() {
return rank;
}
@Override
public String getMaxPointsReason() {
return maxPointsReason;
}
@Override
public Double getScore() {
return score;
}
@Override
public boolean isDiscarded() {
return discarded;
}
}
@@ -15,6 +15,8 @@ import java.util.regex.Pattern;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
import com.sap.sailing.resultimport.impl.CompetitorRowImpl;
import com.sap.sailing.resultimport.impl.DefaultCompetitorEntryImpl;
public class FregHtmlParser {
private static final Logger logger = Logger.getLogger(FregHtmlParser.class.getName());
@@ -150,10 +152,8 @@ public class FregHtmlParser {
getRankAndMaxPointsReasonAndPointsAndDiscardedForOnceRace(tdContent.get(i).trim());
rankAndMaxPointsReasonAndPointsAndDiscarded.add(rankAndMaxPointsReasonAndPointsAndDiscardedForOnceRace);
}
String[] clubNameAndCountry = getTagContents(tdContent.get(tdContent.size()-1).trim(), "p").get(0).trim().split("<(br|BR)>");
String clubName = clubNameAndCountry[0].replace("&nbsp;", " ").trim();
return new CompetitorRowImpl(totalRank, sailID, names, scoreAfterDiscarding, totalPointsBeforeDiscarding,
rankAndMaxPointsReasonAndPointsAndDiscarded, clubName);
rankAndMaxPointsReasonAndPointsAndDiscarded);
}
private CompetitorEntry getRankAndMaxPointsReasonAndPointsAndDiscardedForOnceRace(
@@ -190,7 +190,7 @@ public class FregHtmlParser {
}
}
Double points = lines.length < 2 ? null : Double.valueOf(getTagContents(lines[1], "i").get(0));
return new CompetitorEntryImpl(rank, maxPointsReason, points, isDiscarded);
return new DefaultCompetitorEntryImpl(rank, maxPointsReason, points, isDiscarded);
}
private Double getScore(String cell) {
@@ -18,6 +18,7 @@ import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.resultimport.UrlResultProvider;
import com.sap.sailing.resultimport.RegattaResults;
import com.sap.sailing.resultimport.impl.RegattaScoreCorrectionsImpl;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, UrlResultProvider {
private static final long serialVersionUID = 5853404150107387702L;
@@ -8,3 +8,5 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Export-Package: com.sap.sailing.resultimport,
com.sap.sailing.resultimport.impl
Import-Package: com.sap.sailing.domain.common,
com.sap.sailing.domain.common.impl
@@ -10,11 +10,9 @@ public interface CompetitorRow {
Iterable<String> getNames();
String getTeamName();
String getCompetitorName();
String getSailID();
Integer getTotalRank();
String getClubName();
}
@@ -1,4 +1,4 @@
package com.sap.sailing.freg.resultimport.impl;
package com.sap.sailing.resultimport.impl;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
@@ -10,10 +10,9 @@ public class CompetitorRowImpl implements CompetitorRow {
private final Double scoreAfterDiscarding;
private final Double totalPointsBeforeDiscarding;
private final Iterable<CompetitorEntry> rankAndMaxPointsReasonAndPointsAndDiscarded;
private final String clubName;
public CompetitorRowImpl(Integer totalRank, String sailID, Iterable<String> names, Double scoreAfterDiscarding,
Double totalPointsBeforeDiscarding, Iterable<CompetitorEntry> rankAndMaxPointsReasonAndPointsAndDiscarded, String clubName) {
Double totalPointsBeforeDiscarding, Iterable<CompetitorEntry> rankAndMaxPointsReasonAndPointsAndDiscarded) {
super();
this.totalRank = totalRank;
this.sailID = sailID;
@@ -21,7 +20,6 @@ public class CompetitorRowImpl implements CompetitorRow {
this.scoreAfterDiscarding = scoreAfterDiscarding;
this.totalPointsBeforeDiscarding = totalPointsBeforeDiscarding;
this.rankAndMaxPointsReasonAndPointsAndDiscarded = rankAndMaxPointsReasonAndPointsAndDiscarded;
this.clubName = clubName;
}
@Override
@@ -55,12 +53,7 @@ public class CompetitorRowImpl implements CompetitorRow {
}
@Override
public String getClubName() {
return clubName;
}
@Override
public String getTeamName() {
public String getCompetitorName() {
StringBuilder result = new StringBuilder();
boolean first = true;
for (String name : getNames()) {
@@ -1,4 +1,4 @@
package com.sap.sailing.freg.resultimport.impl;
package com.sap.sailing.resultimport.impl;
import java.util.ArrayList;
import java.util.List;
@@ -10,10 +10,10 @@ import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class RegattaScoreCorrectionsImpl implements RegattaScoreCorrections {
private final ScoreCorrectionProviderImpl provider;
private final ScoreCorrectionProvider provider;
private final Iterable<ScoreCorrectionsForRace> scoreCorrectionsForRaces;
public RegattaScoreCorrectionsImpl(ScoreCorrectionProviderImpl scoreCorrectionProviderImpl,
public RegattaScoreCorrectionsImpl(ScoreCorrectionProvider scoreCorrectionProviderImpl,
RegattaResults regattaResult) {
this.provider = scoreCorrectionProviderImpl;
List<ScoreCorrectionsForRace> scfr = new ArrayList<ScoreCorrectionsForRace>();
@@ -1,4 +1,4 @@
package com.sap.sailing.freg.resultimport.impl;
package com.sap.sailing.resultimport.impl;
import java.util.logging.Logger;
@@ -9,15 +9,15 @@ import com.sap.sailing.resultimport.CompetitorEntry;
public class ScoreCorrectionForCompetitorInRaceImpl implements ScoreCorrectionForCompetitorInRace {
private static final Logger logger = Logger.getLogger(ScoreCorrectionForCompetitorInRaceImpl.class.getName());
private final String teamName;
private final String competitorName;
private final String sailID;
private final int points;
private final MaxPointsReason maxPointsReason;
private final boolean discarded;
public ScoreCorrectionForCompetitorInRaceImpl(String sailID, String teamName, CompetitorEntry competitorEntry) {
public ScoreCorrectionForCompetitorInRaceImpl(String sailID, String competitorName, CompetitorEntry competitorEntry) {
this.sailID = sailID;
this.teamName = teamName;
this.competitorName = competitorName;
if (competitorEntry == null) {
points = 0;
maxPointsReason = null;
@@ -46,7 +46,7 @@ public class ScoreCorrectionForCompetitorInRaceImpl implements ScoreCorrectionFo
@Override
public String getCompetitorName() {
return teamName;
return competitorName;
}
@Override
@@ -1,4 +1,4 @@
package com.sap.sailing.freg.resultimport.impl;
package com.sap.sailing.resultimport.impl;
import java.util.HashMap;
import java.util.Map;
@@ -19,7 +19,7 @@ public class ScoreCorrectionForRaceImpl implements ScoreCorrectionsForRace {
this.raceNumberStartingWithOne = raceNumberStartingWithZero+1;
this.scoreCorrectionsBySailID = new HashMap<String, ScoreCorrectionForCompetitorInRace>();
for (CompetitorRow competitorRow : regattaResult.getCompetitorResults()) {
String teamName = competitorRow.getTeamName();
String competitorName = competitorRow.getCompetitorName();
CompetitorEntry competitorEntry;
if (raceNumberStartingWithZero < Util.size(competitorRow.getRankAndMaxPointsReasonAndPointsAndDiscarded())) {
competitorEntry = Util.get(competitorRow.getRankAndMaxPointsReasonAndPointsAndDiscarded(), raceNumberStartingWithZero);
@@ -27,7 +27,7 @@ public class ScoreCorrectionForRaceImpl implements ScoreCorrectionsForRace {
competitorEntry = null;
}
scoreCorrectionsBySailID.put(competitorRow.getSailID(),
new ScoreCorrectionForCompetitorInRaceImpl(competitorRow.getSailID(), teamName, competitorEntry));
new ScoreCorrectionForCompetitorInRaceImpl(competitorRow.getSailID(), competitorName, competitorEntry));
}
}
@@ -285,7 +285,7 @@ public class CompetitorRowImpl implements CompetitorRow
}
@Override
public String getTeamName() {
public String getCompetitorName() {
return teamMember1Name;
}
@@ -293,10 +293,4 @@ public class CompetitorRowImpl implements CompetitorRow
public String getSailID() {
return country.trim() + sailNumber.trim();
}
@Override
public String getClubName() {
return "";
}
}
@@ -1,50 +0,0 @@
package com.sap.sailing.winregatta.resultimport.impl;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class RegattaScoreCorrectionsImpl implements RegattaScoreCorrections {
private final ScoreCorrectionProviderImpl provider;
private final Iterable<ScoreCorrectionsForRace> scoreCorrectionsForRaces;
public RegattaScoreCorrectionsImpl(ScoreCorrectionProviderImpl scoreCorrectionProviderImpl,
RegattaResults regattaResult) {
this.provider = scoreCorrectionProviderImpl;
List<ScoreCorrectionsForRace> scfr = new ArrayList<ScoreCorrectionsForRace>();
int maxSize = getMaxListSize(regattaResult);
for (int i=0; i<maxSize; i++) {
scfr.add(new ScoreCorrectionForRaceImpl(regattaResult, i));
}
this.scoreCorrectionsForRaces = scfr;
}
private int getMaxListSize(RegattaResults regattaResult) {
int result = 0;
for (CompetitorRow competitorResult : regattaResult.getCompetitorResults()) {
result = Math.max(result, Util.size(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded()));
}
return result;
}
@Override
public ScoreCorrectionProvider getProvider() {
return provider;
}
@Override
public String getRegattaName() {
return "???";
}
@Override
public Iterable<ScoreCorrectionsForRace> getScoreCorrectionsForRaces() {
return scoreCorrectionsForRaces;
}
}
@@ -1,67 +0,0 @@
package com.sap.sailing.winregatta.resultimport.impl;
import java.util.logging.Logger;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionForCompetitorInRace;
import com.sap.sailing.resultimport.CompetitorEntry;
public class ScoreCorrectionForCompetitorInRaceImpl implements ScoreCorrectionForCompetitorInRace {
private static final Logger logger = Logger.getLogger(ScoreCorrectionForCompetitorInRaceImpl.class.getName());
private final String teamName;
private final String sailID;
private final int points;
private final MaxPointsReason maxPointsReason;
private final boolean discarded;
public ScoreCorrectionForCompetitorInRaceImpl(String sailID, String teamName, CompetitorEntry competitorEntry) {
this.sailID = sailID;
this.teamName = teamName;
if (competitorEntry == null) {
points = 0;
maxPointsReason = null;
discarded = false;
} else {
this.discarded = competitorEntry.isDiscarded();
points = (int) (competitorEntry.getScore() == null ? 0 : (double) competitorEntry.getScore());
MaxPointsReason mpe = null;
if (competitorEntry.getMaxPointsReason() != null && competitorEntry.getMaxPointsReason().length() > 0) {
// no int; try parsing a MaxPointsReason
try {
mpe = MaxPointsReason.valueOf(competitorEntry.getMaxPointsReason());
} catch (IllegalArgumentException iae) {
logger.info("Don't understand rank "+competitorEntry.getMaxPointsReason());
mpe = null;
}
}
maxPointsReason = mpe;
}
}
@Override
public String getSailID() {
return sailID;
}
@Override
public String getCompetitorName() {
return teamName;
}
@Override
public Double getPoints() {
return (double) points;
}
@Override
public MaxPointsReason getMaxPointsReason() {
return maxPointsReason;
}
@Override
public Boolean isDiscarded() {
return discarded;
}
}
@@ -1,49 +0,0 @@
package com.sap.sailing.winregatta.resultimport.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionForCompetitorInRace;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionsForRace;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.resultimport.CompetitorEntry;
import com.sap.sailing.resultimport.CompetitorRow;
import com.sap.sailing.resultimport.RegattaResults;
public class ScoreCorrectionForRaceImpl implements ScoreCorrectionsForRace {
private final int raceNumber;
private final Map<String, ScoreCorrectionForCompetitorInRace> scoreCorrectionsBySailID;
public ScoreCorrectionForRaceImpl(RegattaResults regattaResult, int raceNumber) {
this.raceNumber = raceNumber;
this.scoreCorrectionsBySailID = new HashMap<String, ScoreCorrectionForCompetitorInRace>();
for (CompetitorRow competitorResult : regattaResult.getCompetitorResults()) {
String teamName = competitorResult.getTeamName();
CompetitorEntry competitorEntry;
if (raceNumber < Util.size(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded())) {
competitorEntry = Util.get(competitorResult.getRankAndMaxPointsReasonAndPointsAndDiscarded(), raceNumber);
} else {
competitorEntry = null;
}
scoreCorrectionsBySailID.put(competitorResult.getSailID(),
new ScoreCorrectionForCompetitorInRaceImpl(competitorResult.getSailID(), teamName, competitorEntry));
}
}
@Override
public String getRaceNameOrNumber() {
return ""+raceNumber;
}
@Override
public Set<String> getSailIDs() {
return scoreCorrectionsBySailID.keySet();
}
@Override
public ScoreCorrectionForCompetitorInRace getScoreCorrectionForCompetitor(String sailID) {
return scoreCorrectionsBySailID.get(sailID);
}
}
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.resultimport.RegattaResults;
import com.sap.sailing.resultimport.UrlResultProvider;
import com.sap.sailing.resultimport.impl.RegattaScoreCorrectionsImpl;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider, UrlResultProvider {
private static final long serialVersionUID = -5501186796881875686L;