From c3f274df59896eede8af70e5e124ef3fd896d38a Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Wed, 24 Jul 2013 14:18:35 +0200 Subject: [PATCH] Implemented a selector for general criterias --- .../sailing/datamining/SelectionContext.java | 15 ++++ .../sailing/datamining/SelectionCriteria.java | 9 +++ .../datamining/impl/SelectionContextImpl.java | 35 ++++++++++ .../sailing/datamining/impl/SelectorImpl.java | 68 +++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionContext.java create mode 100644 java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionCriteria.java create mode 100644 java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectionContextImpl.java create mode 100644 java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectorImpl.java diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionContext.java new file mode 100644 index 00000000000..5998e8008fc --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionContext.java @@ -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); + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionCriteria.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionCriteria.java new file mode 100644 index 00000000000..080fe04dee1 --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/SelectionCriteria.java @@ -0,0 +1,9 @@ +package com.sap.sailing.datamining; + +public interface SelectionCriteria { + + boolean matches(SelectionContext context); + + DataRetriever getDataRetriever(SelectionContext context); + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectionContextImpl.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectionContextImpl.java new file mode 100644 index 00000000000..19a2e25704e --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectionContextImpl.java @@ -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; + } + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectorImpl.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectorImpl.java new file mode 100644 index 00000000000..5385bac9569 --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/SelectorImpl.java @@ -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 selectGPSFixes(RacingEventService racingEventService) { + List data = new ArrayList(); + 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; + } + +}