Implemented a selector for general criterias

This commit is contained in:
Lennart Hensler committed 2013-07-24 14:18:35 +02:00
1 parent 9008c7146a
commit c3f274df59
4 files changed
+127

No files matched your search

@@ -0,0 +1,15 @@
package com.sap.sailing.datamining;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedRace;
public interface SelectionContext {
void setTrackedRace(TrackedRace trackedRace);
void setCompetitor(Competitor competitor);
void setTrackedLeg(TrackedLeg trackedLeg);
}
@@ -0,0 +1,9 @@
package com.sap.sailing.datamining;
public interface SelectionCriteria {
boolean matches(SelectionContext context);
DataRetriever getDataRetriever(SelectionContext context);
}
@@ -0,0 +1,35 @@
package com.sap.sailing.datamining.impl;
import com.sap.sailing.datamining.SelectionContext;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
public class SelectionContextImpl implements SelectionContext {
private TrackedRegatta trackedRegatta;
private TrackedRace trackedRace;
private Competitor competitor;
private TrackedLeg trackedLeg;
public SelectionContextImpl(TrackedRegatta trackedRegatta) {
this.trackedRegatta = trackedRegatta;
}
@Override
public void setTrackedRace(TrackedRace trackedRace) {
this.trackedRace = trackedRace;
}
@Override
public void setCompetitor(Competitor competitor) {
this.competitor = competitor;
}
@Override
public void setTrackedLeg(TrackedLeg trackedLeg) {
this.trackedLeg = trackedLeg;
}
}
@@ -0,0 +1,68 @@
package com.sap.sailing.datamining.impl;
import java.util.ArrayList;
import java.util.List;
import com.sap.sailing.datamining.GPSFixWithContext;
import com.sap.sailing.datamining.SelectionContext;
import com.sap.sailing.datamining.SelectionCriteria;
import com.sap.sailing.datamining.Selector;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.server.RacingEventService;
public class SelectorImpl implements Selector {
private SelectionCriteria criteria;
public SelectorImpl(SelectionCriteria criteria) {
this.criteria = criteria;
}
@Override
public List<GPSFixWithContext> selectGPSFixes(RacingEventService racingEventService) {
List<GPSFixWithContext> data = new ArrayList<GPSFixWithContext>();
for (Regatta regatta : racingEventService.getAllRegattas()) {
TrackedRegatta trackedRegatta = racingEventService.getTrackedRegatta(regatta);
if (trackedRegatta != null) {
SelectionContext context = new SelectionContextImpl(trackedRegatta);
if (criteria.matches(context)) {
data.addAll(criteria.getDataRetriever(context).retrieveData());
}
for (TrackedRace trackedRace : trackedRegatta.getTrackedRaces()) {
context.setTrackedRace(trackedRace);
if (criteria.matches(context)) {
data.addAll(criteria.getDataRetriever(context).retrieveData());
}
for (TrackedLeg trackedLeg : trackedRace.getTrackedLegs()) {
context.setTrackedLeg(trackedLeg);
if (criteria.matches(context)) {
data.addAll(criteria.getDataRetriever(context).retrieveData());
}
}
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
context.setCompetitor(competitor);
if (criteria.matches(context)) {
data.addAll(criteria.getDataRetriever(context).retrieveData());
}
for (TrackedLeg trackedLeg : trackedRace.getTrackedLegs()) {
context.setTrackedLeg(trackedLeg);
if (criteria.matches(context)) {
data.addAll(criteria.getDataRetriever(context).retrieveData());
}
}
}
}
}
}
return data;
}
}