remoteurl is only transmitted once, filled with remoteserver if not

transitivly filled (not used yet, but for future compability)
This commit is contained in:
Kai Boernert committed 2017-08-08 14:20:01 +02:00
1 parent 87019ad480
commit f39eb531db
7 files changed
+91 -23

No files matched your search

@@ -1648,7 +1648,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
newValue.append("leaderboardName", anniversary.getValue().getLeaderboardName());
newValue.append("startOfRace", anniversary.getValue().getStartOfRace());
newValue.append("eventID", anniversary.getValue().getEventID().toString());
newValue.append("remoteUrl", anniversary.getValue().getRemoteName());
newValue.append("remoteUrl", anniversary.getValue().getRemoteUrl());
anniversarysStored.update(currentProxy, newValue, true, false);
}
} catch (Exception e) {
@@ -1670,13 +1670,13 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
String race = toLoad.get("race").toString();
String regatta = toLoad.get("regatta").toString();
Object rurl = toLoad.get("remoteUrl");
final String remoteName;
final String remoteUrlOrNull;
if (rurl != null) {
remoteName = rurl.toString();
remoteUrlOrNull = rurl.toString();
} else {
remoteName = null;
remoteUrlOrNull = null;
}
DetailedRaceInfo loadedAnniversary = new DetailedRaceInfo(new RegattaNameAndRaceName(regatta, race), leaderboardName , startOfRace, UUID.fromString(eventID), remoteName);
DetailedRaceInfo loadedAnniversary = new DetailedRaceInfo(new RegattaNameAndRaceName(regatta, race), leaderboardName , startOfRace, UUID.fromString(eventID), remoteUrlOrNull);
int anniversary = ((Number) toLoad.get("anniversary")).intValue();
fromDb.put(anniversary, loadedAnniversary);
}
@@ -14,8 +14,8 @@ public class DetailedRaceInfo extends SimpleRaceInfo {
private final UUID eventID;
public DetailedRaceInfo(RegattaAndRaceIdentifier identifier, String leaderboardName, Date startOfRace,
UUID eventId, String remoteName) {
super(identifier, startOfRace, remoteName);
UUID eventId, String remoteUrl) {
super(identifier, startOfRace,remoteUrl);
if (leaderboardName == null || eventId == null) {
throw new IllegalStateException("DetailedRaceInfo Data is not allowed to contain any null values!");
}
@@ -0,0 +1,42 @@
package com.sap.sailing.server.gateway.serialization.impl;
import java.util.Date;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.anniversary.DetailedRaceInfo;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class DetailedRaceInfoJsonSerializer implements JsonSerializer<DetailedRaceInfo>, JsonDeserializer<DetailedRaceInfo> {
public static final String FIELD_EVENT_ID = "eventID";
public static final String FIELD_LEADERBOARD_NAME = "leaderboardName";
private static final String FIELD_REMOTEURL = "remoteUrl";
@Override
public JSONObject serialize(DetailedRaceInfo object) {
JSONObject result = new JSONObject();
result.put(FIELD_EVENT_ID, object.getEventID().toString());
result.put(SimpleRaceInfoJsonSerializer.FIELD_RACE_NAME, object.getIdentifier().getRaceName());
result.put(SimpleRaceInfoJsonSerializer.FIELD_REGATTA_NAME, object.getIdentifier().getRegattaName());
result.put(FIELD_LEADERBOARD_NAME, object.getLeaderboardName());
result.put(SimpleRaceInfoJsonSerializer.FIELD_START_OF_RACE, object.getStartOfRace());
result.put(FIELD_REMOTEURL, object.getRemoteUrl());
return result;
}
@Override
public DetailedRaceInfo deserialize(JSONObject object) throws JsonDeserializationException {
String eventId = object.get(FIELD_EVENT_ID).toString();
String raceName = object.get(SimpleRaceInfoJsonSerializer.FIELD_RACE_NAME).toString();
String regattaName = object.get(SimpleRaceInfoJsonSerializer.FIELD_REGATTA_NAME).toString();
String leaderboardName = object.get(FIELD_LEADERBOARD_NAME).toString();
Date startOfRace = (Date) object.get(SimpleRaceInfoJsonSerializer.FIELD_START_OF_RACE);
String remoteUrl = (String) object.get(FIELD_REMOTEURL);
return new DetailedRaceInfo(new RegattaNameAndRaceName(regattaName, raceName), leaderboardName, startOfRace, UUID.fromString(eventId),remoteUrl);
}
}
@@ -7,10 +7,9 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.anniversary.SimpleRaceInfo;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class SimpleRaceInfoJsonSerializer implements JsonSerializer<SimpleRaceInfo>,JsonDeserializer<SimpleRaceInfo> {
public class SimpleRaceInfoJsonSerializer implements JsonSerializer<SimpleRaceInfo> {
public static final String FIELD_RACE_NAME = "raceName";
public static final String FIELD_REGATTA_NAME = "regattaName";
@@ -25,11 +24,10 @@ public class SimpleRaceInfoJsonSerializer implements JsonSerializer<SimpleRaceIn
return result;
}
@Override
public SimpleRaceInfo deserialize(JSONObject object) throws JsonDeserializationException {
public SimpleRaceInfo deserialize(JSONObject object,String remoteUrl) throws JsonDeserializationException {
String raceName = object.get(SimpleRaceInfoJsonSerializer.FIELD_RACE_NAME).toString();
String regattaName = object.get(SimpleRaceInfoJsonSerializer.FIELD_REGATTA_NAME).toString();
Date startOfRace = new Date(((Number)object.get(SimpleRaceInfoJsonSerializer.FIELD_START_OF_RACE)).longValue());
return new SimpleRaceInfo(new RegattaNameAndRaceName(regattaName, raceName), startOfRace, /* remoteName */ null);
return new SimpleRaceInfo(new RegattaNameAndRaceName(regattaName, raceName), startOfRace,remoteUrl);
}
}
@@ -4,7 +4,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -14,6 +16,7 @@ import javax.ws.rs.core.Response;
import org.json.simple.JSONArray;
import org.json.simple.JSONAware;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.anniversary.SimpleRaceInfo;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
@@ -32,11 +35,26 @@ public class TrackedRaceListResource extends AbstractSailingServerResource {
*/
@GET
@Produces(CONTENT_TYPE_JSON_UTF8)
@Path("localRaces")
@Path("getRaces")
public Response raceList() {
JSONArray json = new JSONArray();
HashMap<String,List<SimpleRaceInfo>> raceData = new HashMap<>();
//replace with transitive call later!
for (SimpleRaceInfo entry : getService().getLocalRaceList().values()) {
json.add(simpleRaceListJsonSerializer.serialize(entry));
String remoteUrl = entry.getRemoteUrl();
List<SimpleRaceInfo> remoteList = raceData.get(remoteUrl);
if(remoteList == null){
remoteList = new ArrayList<>();
raceData.put(remoteUrl, remoteList);
}
remoteList.add(entry);
}
JSONObject json = new JSONObject();
for(Entry<String, List<SimpleRaceInfo>> raced:raceData.entrySet()){
JSONArray list = new JSONArray();
for(SimpleRaceInfo simpleRaceInfo:raced.getValue()){
list.add(simpleRaceListJsonSerializer.serialize(simpleRaceInfo));
}
json.put(raced.getKey() , list);
}
return getJsonResponse(json);
}
@@ -65,6 +83,7 @@ public class TrackedRaceListResource extends AbstractSailingServerResource {
SimpleRaceInfo current = sorted.get(i);
JSONArray single = new JSONArray();
single.add(String.valueOf(i));
single.add(current.getRemoteUrl());
single.add(simpleRaceListJsonSerializer.serialize(current));
json.add(single);
@@ -3849,7 +3849,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
RegattaAndRaceIdentifier raceIdentifier = trackedRace.getRaceIdentifier();
final TimePoint startOfRace = trackedRace.getStartOfRace();
if (startOfRace != null) {
SimpleRaceInfo raceInfo = new SimpleRaceInfo(raceIdentifier, startOfRace.asDate(), /* remoteName */ null);
SimpleRaceInfo raceInfo = new SimpleRaceInfo(raceIdentifier, startOfRace.asDate(), "");
store.put(raceInfo.getIdentifier(), raceInfo);
}
}
@@ -12,6 +12,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -134,15 +135,23 @@ public class RemoteSailingServerSet {
logger.fine("Updating racelist for remote server " + ref + " from URL " + raceListURL);
URLConnection urlConnection = HttpUrlConnectionHelper.redirectConnection(raceListURL);
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
JSONParser parser = new JSONParser();
Object racesAsObject = parser.parse(bufferedReader);
SimpleRaceInfoJsonSerializer deserializer = new SimpleRaceInfoJsonSerializer();
JSONArray racesAsJsonArray = (JSONArray) racesAsObject;
final Set<SimpleRaceInfo> races = new HashSet<>();
for (Object raceAsObject : racesAsJsonArray) {
JSONObject raceAsJson = (JSONObject) raceAsObject;
SimpleRaceInfo event = deserializer.deserialize(raceAsJson);
races.add(event);
JSONParser parser = new JSONParser();
JSONObject racesGroupedByRemoteAsObject = (JSONObject) parser.parse(bufferedReader);
for(Entry<Object, Object> racesGroupdByRemote:racesGroupedByRemoteAsObject.entrySet()){
String remoteUrl = (String) racesGroupdByRemote.getKey();
if(remoteUrl.isEmpty()){
remoteUrl = ref.getURL().toExternalForm();
}
JSONArray raceListForOneRemote = (JSONArray) racesGroupdByRemote.getValue();
for(Object remoteRace:raceListForOneRemote){
JSONObject remoteRaceAsJson = (JSONObject) remoteRace;
SimpleRaceInfo event = deserializer.deserialize(remoteRaceAsJson,remoteUrl);
races.add(event);
}
}
result = new Util.Pair<Iterable<SimpleRaceInfo>, Exception>(races, /* exception */ null);
} finally {