a first implementation of the new current races filter algorithm according to the specification in bug 3011

Change-Id: I5f29d35bbbde9429bff5f3219fa6c22455c6e9d2
This commit is contained in:
Axel Uhl committed 2016-04-21 23:01:07 +02:00
1 parent 4781e03531
commit f3e9219804
24 files changed
+328 -155

No files matched your search

@@ -1,87 +0,0 @@
package com.sap.sailing.racecommittee.app.domain.impl;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesBase;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeries;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sse.common.Util;
/**
* Represents a triple of {@link RaceGroup} (representing a regatta or a flexible leaderboard), a {@link SeriesBase series}
* and a {@link Fleet}. An instance can be constructed for a {@link ManagedRace} which then extracts these three properties
* from the race. Note that equal objects of this type can result for different races as long as they are in the equal
* {@link RaceGroup}, {@link SeriesBase series} and {@link Fleet}.
*
* @author Axel Uhl (d043530)
*
*/
public class RaceGroupSeriesFleet extends RaceGroupSeries {
private Fleet fleet;
private int fleetOrder;
public RaceGroupSeriesFleet(ManagedRace race) {
super(race);
fleet = race.getFleet();
fleetOrder = getFleetIndex(race.getSeries().getFleets(), race.getFleet());
}
private int getFleetIndex(Iterable<? extends Fleet> fleets, Fleet fleet) {
return Util.indexOf(fleets, fleet);
}
public Fleet getFleet() {
return fleet;
}
public String getFleetName() {
return fleet.getName();
}
public String getDisplayName() {
return getDisplayName(false);
}
public String getDisplayName(boolean useDisplayName) {
String name = super.getDisplayName(useDisplayName);
if (fleet != null && !fleet.getName().equals(LeaderboardNameConstants.DEFAULT_FLEET_NAME)) {
name += " - " + fleet.getName();
}
return name;
}
public int getFleetOrder() {
return fleetOrder;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((fleet == null) ? 0 : fleet.hashCode());
result = prime * result + fleetOrder;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
RaceGroupSeriesFleet other = (RaceGroupSeriesFleet) obj;
if (fleet == null) {
if (other.fleet != null)
return false;
} else if (!fleet.equals(other.fleet))
return false;
if (fleetOrder != other.fleetOrder)
return false;
return true;
}
}
@@ -16,6 +16,7 @@ import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinderResult;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.AppConstants;
@@ -26,7 +27,6 @@ import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.data.loaders.DataLoaderResult;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.logging.LogEvent;
import com.sap.sailing.racecommittee.app.services.RaceStateService;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataType;
@@ -107,7 +107,7 @@ public class ManagedRaceListAdapter extends ArrayAdapter<RaceListDataType> imple
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
createViewItemsForRacesAndSeries();
getFilter().filter("");
getFilter().refreshRegattaStructures();
}
private void createViewItemsForRacesAndSeries() {
@@ -18,7 +18,10 @@ import android.widget.Filter;
* {@link CurrentRaceFilter}.
*/
public class RaceFilter extends Filter {
private final CurrentRaceFilter currentRaceFilter = new CurrentRaceFilterImpl();
/**
* A filter that is updated each time an update for {@link #allRaces} is announced by {@link #refreshRegattaStructures()}.
*/
private CurrentRaceFilter<ManagedRace> currentRaceFilter;
public interface FilterSubscriber {
void onResult(List<ManagedRace> filtered);
@@ -28,9 +31,16 @@ public class RaceFilter extends Filter {
private final Set<ManagedRace> allRaces;
private FilterMode filterMode;
/**
* @param allRaces
* callers must call {@link #refreshRegattaStructures()} whenever the contents of this set have changed
* @param resultSubscriber
* triggered when the filter results have changed
*/
public RaceFilter(Set<ManagedRace> allRaces, FilterSubscriber resultSubscriber) {
this.allRaces = allRaces;
this.subscriber = resultSubscriber;
refreshRegattaStructures();
}
public void filterByMode(FilterMode filterMode) {
@@ -52,7 +62,7 @@ public class RaceFilter extends Filter {
result = createResults(allRaces);
} else {
// filter using the CurrentRaceFilter
result = createResults(currentRaceFilter.filterCurrentRaces(allRaces));
result = createResults(currentRaceFilter.getCurrentRaces());
}
return result;
}
@@ -64,4 +74,9 @@ public class RaceFilter extends Filter {
subscriber.onResult(filterResults);
}
public void refreshRegattaStructures() {
this.currentRaceFilter = new CurrentRaceFilterImpl<ManagedRace>(allRaces);
filter("");
}
}
@@ -9,10 +9,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sse.common.TimePoint;
public class RaceListDataTypeRace implements RaceListDataType {
@@ -12,6 +12,7 @@ import com.sap.sailing.android.shared.util.BitmapHelper;
import com.sap.sailing.android.shared.util.BroadcastManager;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.BaseRaceStateChangedListener;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.R;
@@ -19,7 +20,6 @@ import com.sap.sailing.racecommittee.app.RaceApplication;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.ui.activities.SessionActivity;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.ManagedRaceListAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataType;
@@ -27,13 +27,13 @@ import com.sap.sailing.android.shared.util.BroadcastManager;
import com.sap.sailing.android.shared.util.ScreenHelper;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
import com.sap.sse.common.TimePoint;
@@ -33,6 +33,7 @@ import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
import com.sap.sailing.domain.abstractlog.race.state.RaceStateChangedListener;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.BaseRaceStateChangedListener;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
@@ -42,7 +43,6 @@ import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataStore;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.ui.adapters.DependentRaceSpinnerAdapter;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
@@ -39,6 +39,7 @@ import com.google.android.gms.location.LocationServices;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.AppUtils;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.SpeedWithBearing;
@@ -50,7 +51,6 @@ import com.sap.sailing.domain.common.impl.WindImpl;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.ui.activities.RacingActivity;
import com.sap.sailing.racecommittee.app.ui.utils.OnRaceUpdatedListener;
import com.sap.sailing.racecommittee.app.ui.views.AccuracyView;
@@ -15,12 +15,12 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.GateSt
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.SeriesBase;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.RaceGroupSeriesFleet;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.GateStartTimingFragment;
public class RaceHelper {