mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
Implementation of the course load from server
This commit is contained in:
1 parent
39192839e0
commit
3084236a43
9 files changed
+148
-20
No files matched your search
+14
-14
@@ -11,20 +11,20 @@ import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public interface DataStore {
|
||||
|
||||
public Collection<EventBase> getEvents();
|
||||
public EventBase getEvent(Serializable id);
|
||||
public boolean hasEvent(Serializable id);
|
||||
public void addEvent(EventBase event);
|
||||
|
||||
public Collection<CourseArea> getCourseAreas(EventBase event);
|
||||
public CourseArea getCourseArea(Serializable id);
|
||||
public boolean hasCourseArea(Serializable id);
|
||||
public void addCourseArea(EventBase event, CourseArea courseArea);
|
||||
|
||||
public Collection<ManagedRace> getRaces();
|
||||
public void addRace(ManagedRace race);
|
||||
public ManagedRace getRace(Serializable id);
|
||||
public boolean hasRace(Serializable id);
|
||||
public Collection<EventBase> getEvents();
|
||||
public EventBase getEvent(Serializable id);
|
||||
public boolean hasEvent(Serializable id);
|
||||
public void addEvent(EventBase event);
|
||||
|
||||
public Collection<CourseArea> getCourseAreas(EventBase event);
|
||||
public CourseArea getCourseArea(Serializable id);
|
||||
public boolean hasCourseArea(Serializable id);
|
||||
public void addCourseArea(EventBase event, CourseArea courseArea);
|
||||
|
||||
public Collection<ManagedRace> getRaces();
|
||||
public void addRace(ManagedRace race);
|
||||
public ManagedRace getRace(Serializable id);
|
||||
public boolean hasRace(Serializable id);
|
||||
|
||||
public Collection<Mark> getMarks();
|
||||
public Mark getMark(Serializable id);
|
||||
|
||||
+6
@@ -10,6 +10,7 @@ import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
@@ -158,4 +159,9 @@ public class OfflineDataManager extends DataManager {
|
||||
client.onLoadSucceded(dataStore.getMarks());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadCourse(ManagedRace managedRace, LoadClient<CourseBase> client) {
|
||||
client.onLoadSucceded(managedRace.getCourseOnServer());
|
||||
}
|
||||
|
||||
}
|
||||
+37
@@ -11,16 +11,19 @@ import android.content.Context;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.CourseDataHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.DataHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.EventsDataHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.ManagedRacesDataHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.handlers.MarksDataHandler;
|
||||
import com.sap.sailing.racecommittee.app.data.loaders.DataLoader;
|
||||
import com.sap.sailing.racecommittee.app.data.parsers.CourseDataParser;
|
||||
import com.sap.sailing.racecommittee.app.data.parsers.DataParser;
|
||||
import com.sap.sailing.racecommittee.app.data.parsers.EventsDataParser;
|
||||
import com.sap.sailing.racecommittee.app.data.parsers.ManagedRacesDataParser;
|
||||
@@ -40,7 +43,11 @@ import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.DomainFactoryImpl;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseDataDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.GateDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.MarkDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.WaypointDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CompetitorDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
|
||||
|
||||
@@ -178,4 +185,34 @@ public class OnlineDataManager extends DataManager {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadCourse(ManagedRace managedRace, LoadClient<CourseBase> client) {
|
||||
SharedDomainFactory domainFactory = DomainFactoryImpl.INSTANCE;
|
||||
JsonDeserializer<CourseBase> courseBaseDeserializer = new CourseDataDeserializer(
|
||||
new WaypointDeserializer(
|
||||
new ControlPointDeserializer(
|
||||
new MarkDeserializer(domainFactory),
|
||||
new GateDeserializer(domainFactory,
|
||||
new MarkDeserializer(domainFactory)))));
|
||||
DataParser<CourseBase> parser = new CourseDataParser(courseBaseDeserializer);
|
||||
DataHandler<CourseBase> handler = new CourseDataHandler(this, client, managedRace);
|
||||
|
||||
ManagedRaceIdentifier identifier = managedRace.getIdentifier();
|
||||
|
||||
String raceGroupName = URLEncoder.encode(identifier.getRaceGroup().getName());
|
||||
String raceColumnName = URLEncoder.encode(identifier.getRaceName());
|
||||
String fleetName = URLEncoder.encode(identifier.getFleet().getName());
|
||||
|
||||
try {
|
||||
new DataLoader<CourseBase>(context, URI.create(AppConstants.getServerBaseURL(context)
|
||||
+ "/sailingserver/rc/currentcourse?leaderboard=" + raceGroupName + "&raceColumn=" + raceColumnName
|
||||
+ "&fleet=" + fleetName), parser, handler)
|
||||
.forceLoad();
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -4,6 +4,7 @@ import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
@@ -20,4 +21,6 @@ public interface ReadonlyDataManager {
|
||||
public void loadRaces(Serializable courseAreaId, LoadClient<Collection<ManagedRace>> client);
|
||||
|
||||
public void loadMarks(ManagedRace managedRace, LoadClient<Collection<Mark>> client);
|
||||
|
||||
public void loadCourse(ManagedRace managedRace, LoadClient<CourseBase> client);
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.sap.sailing.racecommittee.app.data.handlers;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
|
||||
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public class CourseDataHandler extends DataHandler<CourseBase> {
|
||||
|
||||
private ManagedRace race;
|
||||
|
||||
public CourseDataHandler(OnlineDataManager manager, LoadClient<CourseBase> client, ManagedRace managedRace) {
|
||||
super(manager, client);
|
||||
race = managedRace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaded(CourseBase data) {
|
||||
super.onLoaded(data);
|
||||
race.setCourseOnServer(data);
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.sap.sailing.racecommittee.app.data.parsers;
|
||||
|
||||
import java.io.Reader;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
|
||||
|
||||
public class CourseDataParser implements DataParser<CourseBase> {
|
||||
|
||||
private JsonDeserializer<CourseBase> deserializer;
|
||||
|
||||
public CourseDataParser(JsonDeserializer<CourseBase> deserializer) {
|
||||
this.deserializer = deserializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseBase parse(Reader reader) throws Exception {
|
||||
Object parsedResult = JSONValue.parseWithException(reader);
|
||||
JSONObject jsonCurrentCourse = Helpers.toJSONObjectSafe(parsedResult);
|
||||
CourseBase course = deserializer.deserialize(jsonCurrentCourse);
|
||||
return course;
|
||||
}
|
||||
|
||||
}
|
||||
+4
@@ -45,5 +45,9 @@ public interface ManagedRace extends ManagedRaceIdentifier, Named, WithID {
|
||||
* @return list of competitors
|
||||
*/
|
||||
public Iterable<Competitor> getCompetitors();
|
||||
|
||||
public CourseBase getCourseOnServer();
|
||||
|
||||
public void setCourseOnServer(CourseBase course);
|
||||
|
||||
}
|
||||
+12
@@ -24,6 +24,7 @@ public class ManagedRaceImpl implements ManagedRace {
|
||||
private ManagedRaceIdentifier identifier;
|
||||
private RaceState state;
|
||||
private Iterable<Competitor> competitors;
|
||||
private CourseBase courseOnServer;
|
||||
|
||||
public ManagedRaceImpl(ManagedRaceIdentifier identifier, PassAwareRaceLog raceLog, Iterable<Competitor> competitors) {
|
||||
//TODO To be changed when the start procedure for a regatta/leaderboard can be selected in the GWT Admin Console on backend side
|
||||
@@ -36,6 +37,7 @@ public class ManagedRaceImpl implements ManagedRace {
|
||||
this.identifier = identifier;
|
||||
this.state = state;
|
||||
this.competitors = competitors;
|
||||
this.courseOnServer = null;
|
||||
}
|
||||
|
||||
public Serializable getId() {
|
||||
@@ -88,4 +90,14 @@ public class ManagedRaceImpl implements ManagedRace {
|
||||
return competitors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseBase getCourseOnServer() {
|
||||
return courseOnServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCourseOnServer(CourseBase course) {
|
||||
courseOnServer = course;
|
||||
}
|
||||
|
||||
}
|
||||
+21
-6
@@ -110,6 +110,7 @@ public class CourseDesignDialogFragment extends RaceDialogFragment {
|
||||
previousCourseElementAdapter = new CourseElementListAdapter(getActivity(), R.layout.welter_one_row_three_columns, previousCourseElements);
|
||||
|
||||
loadMarks();
|
||||
loadCourseOnServer();
|
||||
|
||||
GridView gridView = (GridView) getView().findViewById(R.id.gridViewAssets);
|
||||
gridView.setAdapter(gridAdapter);
|
||||
@@ -159,10 +160,6 @@ public class CourseDesignDialogFragment extends RaceDialogFragment {
|
||||
previousCourseListView = (ListView) getView().findViewById(R.id.listViewPreviousCourse);
|
||||
previousCourseListView.setAdapter(previousCourseElementAdapter);
|
||||
|
||||
if(InMemoryDataStore.INSTANCE.getLastPublishedCourseDesign() != null){
|
||||
fillPreviousCourseElementsInList();
|
||||
}
|
||||
|
||||
takePreviousButton = (Button) getView().findViewById(R.id.takePreviousCourseDesignButton);
|
||||
takePreviousButton.setOnClickListener(new OnClickListener() {
|
||||
|
||||
@@ -229,6 +226,25 @@ public class CourseDesignDialogFragment extends RaceDialogFragment {
|
||||
super.onResume();
|
||||
onLoadMarksSucceeded(hostActivity.getDataManager().getDataStore().getMarks());
|
||||
}
|
||||
|
||||
private void loadCourseOnServer() {
|
||||
hostActivity.getDataManager().loadCourse(getRace(), new LoadClient<CourseBase>() {
|
||||
|
||||
@Override
|
||||
public void onLoadFailed(Exception reason) {
|
||||
CourseBase lastPublishedCourseDesign = InMemoryDataStore.INSTANCE.getLastPublishedCourseDesign();
|
||||
if(lastPublishedCourseDesign != null) {
|
||||
fillPreviousCourseElementsInList(lastPublishedCourseDesign);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadSucceded(CourseBase data) {
|
||||
fillPreviousCourseElementsInList(data);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void loadMarks() {
|
||||
hostActivity.getDataManager().loadMarks(getRace(), new LoadClient<Collection<Mark>>() {
|
||||
@@ -252,8 +268,7 @@ public class CourseDesignDialogFragment extends RaceDialogFragment {
|
||||
gridAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void fillPreviousCourseElementsInList() {
|
||||
CourseBase previousCourseData = InMemoryDataStore.INSTANCE.getLastPublishedCourseDesign();
|
||||
private void fillPreviousCourseElementsInList(CourseBase previousCourseData) {
|
||||
if (previousCourseData != null) {
|
||||
previousCourseElements.clear();
|
||||
previousCourseElements.addAll(convertCourseDesignToCourseElements(previousCourseData));
|
||||
|
||||
Reference in new issue
Block a user