Implementation of the course load from server

This commit is contained in:
Armin Zamani committed 2013-04-23 16:51:31 +02:00
1 parent 39192839e0
commit 3084236a43
9 files changed
+148 -20

No files matched your search

@@ -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);
@@ -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());
}
}
@@ -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();
}
}
}
@@ -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);
}
@@ -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);
}
}
@@ -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;
}
}
@@ -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);
}
@@ -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;
}
}
@@ -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));