Merge branch 'racecommittee_integrated' of ssh://sapsailing.com/home/trac/git into racecommittee_integrated

Conflicts:
	.gitignore
This commit is contained in:
Armin Zamani
2013-01-23 13:44:38 +01:00
32 changed files with 754 additions and 55 deletions
+3
View File
@@ -16,3 +16,6 @@ sailing_debug0*
/mobile/com.sap.sailing.racecommittee.glue/gen/*
/mobile/com.sap.sailing.racecommittee.glue/bin
/mobile/com.sap.sailing.racecommittee.glue/gen
/mobile/com.sap.sailing.racecommittee.glue/bin/com.sap.sailing.racecommittee.glue.jar
/mobile/com.sap.sailing.racecommittee.glue/bin/jarlist.cache
/java/com.sap.sailing.server.gateway.serialization.test/.settings/*.prefs
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry exported="true" kind="lib" path="libs/mockito-all-1.9.5.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.server.gateway.serialization.test</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,14 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: com.sap.sailing.server.gateway.serialization.test
Bundle-SymbolicName: com.sap.sailing.server.gateway.serialization.test
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.sap.sailing.server.gateway.serialization;bundle-version="1.0.0",
com.sap.sailing.domain;bundle-version="1.0.0",
com.sap.sailing.domain.common;bundle-version="1.0.0",
org.junit4;bundle-version="4.8.2"
Import-Package: org.json.simple
Bundle-ClassPath: libs/mockito-all-1.9.5.jar,
.
@@ -0,0 +1,5 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
libs/mockito-all-1.9.5.jar
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.server.gateway.serialization.test</artifactId>
<packaging>eclipse-test-plugin</packaging>
</project>
@@ -0,0 +1,62 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Collections;
import java.util.UUID;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeEventSerializer;
public abstract class BaseRaceCommitteEventTest<FlagType extends RaceCommitteeEvent> {
protected final UUID expectedId = UUID.randomUUID();
protected final long expectedTimestamp = 1337l;
protected final int expectedPassId = 42;
protected JsonSerializer<RaceCommitteeEvent> serializer;
protected FlagType event;
protected abstract FlagType createMockEvent();
protected abstract JsonSerializer<RaceCommitteeEvent> createSerializer();
@Before
public void setUp() {
serializer = createSerializer();
event = createMockEvent();
TimePoint timePoint = mock(TimePoint.class);
when(timePoint.asMillis()).thenReturn(expectedTimestamp);
when(event.getId()).thenReturn(expectedId);
when(event.getTimePoint()).thenReturn(timePoint);
when(event.getPassId()).thenReturn(expectedPassId);
when(event.getInvolvedBoats()).thenReturn(
Collections.<Competitor> emptyList());
}
@Test
public void testSerializeBaseAttributes() {
JSONObject json = serializer.serialize(event);
assertEquals(
expectedId,
UUID.fromString(json.get(
RaceCommitteeEventSerializer.FIELD_ID).toString()));
assertEquals(expectedTimestamp,
json.get(RaceCommitteeEventSerializer.FIELD_TIMESTAMP));
assertEquals(expectedPassId,
json.get(RaceCommitteeEventSerializer.FIELD_PASS_ID));
}
}
@@ -0,0 +1,37 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.server.gateway.serialization.BoatClassJsonSerializer;
public class BoatClassJsonSerializerTest {
protected BoatClass boatClass;
protected BoatClassJsonSerializer serializer;
@Before
public void setUp() {
boatClass = mock(BoatClass.class);
serializer = new BoatClassJsonSerializer();
}
@Test
public void testName() {
String expectedName = "Cruiser";
when(boatClass.getName()).thenReturn(expectedName);
JSONObject result = serializer.serialize(boatClass);
assertEquals(
expectedName,
result.get(BoatClassJsonSerializer.FIELD_NAME));
}
}
@@ -0,0 +1,43 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.server.gateway.serialization.CourseAreaJsonSerializer;
public class CourseAreaJsonSerializerTest {
protected CourseArea courseArea;
protected CourseAreaJsonSerializer serializer;
@Before
public void setUp() {
courseArea = mock(CourseArea.class);
serializer = new CourseAreaJsonSerializer();
}
@Test
public void testName() {
String expectedName = "Cruiser";
when(courseArea.getName()).thenReturn(expectedName);
JSONObject result = serializer.serialize(courseArea);
assertEquals(
expectedName,
result.get(CourseAreaJsonSerializer.FIELD_NAME));
}
@Ignore
@Test
public void testRaces() {
/// TODO: Implement a test for checking if races are correctly serialized on course areas
}
}
@@ -0,0 +1,74 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.*;
import java.util.UUID;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.server.gateway.serialization.EventJsonSerializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class EventJsonSerializerTest {
protected final UUID expectedId = UUID.randomUUID();
protected final String expectedName = "ab";
protected final String expectedPublicationUrl = "cd";
protected JsonSerializer<Venue> venueSerializer;
protected EventJsonSerializer serializer;
protected Event event;
// see https://groups.google.com/forum/?fromgroups=#!topic/mockito/iMumB0_bpdo
@SuppressWarnings("unchecked")
@Before
public void setUp() {
// Event and its basic attributes ...
event = mock(Event.class);
when(event.getId()).thenReturn(expectedId);
when(event.getName()).thenReturn(expectedName);
when(event.getPublicationUrl()).thenReturn(expectedPublicationUrl);
// ... and the serializer itself.
venueSerializer = mock(JsonSerializer.class);
serializer = new EventJsonSerializer(venueSerializer);
}
@Test
public void testBasicAttributes() {
JSONObject result = serializer.serialize(event);
assertEquals(
expectedId,
UUID.fromString(result.get(EventJsonSerializer.FIELD_ID).toString()));
assertEquals(
expectedName,
result.get(EventJsonSerializer.FIELD_NAME));
assertEquals(
expectedPublicationUrl,
result.get(EventJsonSerializer.FIELD_PUBLICATION_URL));
}
@Test
public void testSerializesVenue() {
// ... venue and its mocked serializer ...
Venue venue = mock(Venue.class);
when(event.getVenue()).thenReturn(venue);
JSONObject expectedVenue = new JSONObject();
when(venueSerializer.serialize(eq(venue))).thenReturn(expectedVenue);
JSONObject result = serializer.serialize(event);
assertEquals(
expectedVenue,
result.get(EventJsonSerializer.FIELD_VENUE));
}
}
@@ -0,0 +1,44 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import org.json.simple.JSONObject;
import org.junit.Test;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeEventSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeFlagEventSerializer;
public class RaceCommitteeEventTest extends BaseRaceCommitteEventTest<RaceCommitteeEvent> {
protected final String expectedClassValue = "AllYourBaseAreBelongToUs";
private class TestRaceCommitteeEventSerializer extends RaceCommitteeEventSerializer {
@Override
protected String getClassFieldValue() {
return expectedClassValue;
}
}
@Override
protected RaceCommitteeEvent createMockEvent() {
return mock(RaceCommitteeEvent.class);
}
@Override
protected JsonSerializer<RaceCommitteeEvent> createSerializer() {
return new TestRaceCommitteeEventSerializer();
}
@Test
public void testClassAttribute() {
JSONObject json = serializer.serialize(event);
assertEquals(
expectedClassValue,
json.get(RaceCommitteeFlagEventSerializer.FIELD_CLASS));
}
}
@@ -0,0 +1,69 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.racecommittee.Flags;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.domain.racecommittee.RaceCommitteeFlagEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeFlagEventSerializer;
public class RaceCommitteeFlagEventSerializerTest extends BaseRaceCommitteEventTest<RaceCommitteeFlagEvent> {
private Flags expectedUpperFlag = Flags.FOXTROTT;
private Flags expectedLowerFlag = Flags.FOXTROTT;
private boolean expectedDisplayed = true;
@Override
protected RaceCommitteeFlagEvent createMockEvent() {
RaceCommitteeFlagEvent event = mock(RaceCommitteeFlagEvent.class);
when(event.getUpperFlag()).thenReturn(expectedUpperFlag);
when(event.getLowerFlag()).thenReturn(expectedLowerFlag);
when(event.isDisplayed()).thenReturn(expectedDisplayed);
return event;
}
@Override
protected JsonSerializer<RaceCommitteeEvent> createSerializer() {
return new RaceCommitteeFlagEventSerializer();
}
@Before
public void setUp() {
super.setUp();
}
@Test
public void testFlagStatusAttributes() {
JSONObject json = serializer.serialize(event);
assertEquals(
expectedUpperFlag,
json.get(RaceCommitteeFlagEventSerializer.FIELD_UPPER_FLAG));
assertEquals(
expectedLowerFlag,
json.get(RaceCommitteeFlagEventSerializer.FIELD_LOWER_FLAG));
assertEquals(
expectedDisplayed,
json.get(RaceCommitteeFlagEventSerializer.FIELD_DISPLAYED));
}
@Test
public void testClassAttribute() {
JSONObject json = serializer.serialize(event);
assertEquals(
RaceCommitteeFlagEventSerializer.VALUE_CLASS,
json.get(RaceCommitteeFlagEventSerializer.FIELD_CLASS));
}
}
@@ -0,0 +1,55 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.json.simple.JSONObject;
import org.junit.Test;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.domain.racecommittee.RaceCommitteeStartTimeEvent;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeStartTimeEventSerializer;
public class RaceCommitteeStartTimeEventSerializerTest extends BaseRaceCommitteEventTest<RaceCommitteeStartTimeEvent> {
private final long expectedStartTimeTimestamp = 2013;
@Override
protected RaceCommitteeStartTimeEvent createMockEvent() {
TimePoint startTime = mock(TimePoint.class);
when(startTime.asMillis()).thenReturn(expectedStartTimeTimestamp);
RaceCommitteeStartTimeEvent event = mock(RaceCommitteeStartTimeEvent.class);
when(event.getStartTime()).thenReturn(startTime);
return event;
}
@Override
protected JsonSerializer<RaceCommitteeEvent> createSerializer() {
return new RaceCommitteeStartTimeEventSerializer();
}
@Test
public void testStartTimeAttributes() {
JSONObject json = serializer.serialize(event);
assertEquals(
expectedStartTimeTimestamp,
json.get(RaceCommitteeStartTimeEventSerializer.FIELD_START_TIME));
}
@Test
public void testClassAttribute() {
JSONObject json = serializer.serialize(event);
assertEquals(
RaceCommitteeStartTimeEventSerializer.VALUE_CLASS,
json.get(RaceCommitteeStartTimeEventSerializer.FIELD_CLASS));
}
}
@@ -0,0 +1,6 @@
package com.sap.sailing.server.gateway.serialization.test;
/// TODO write test for RegattaJsonSerializer
public class RegattaJsonSerializerTest {
}
@@ -0,0 +1,6 @@
package com.sap.sailing.server.gateway.serialization.test;
/// TODO write test for VenueJsonSerializer
public class VenueJsonSerializerTest {
}
@@ -15,9 +15,9 @@ public class CourseAreaJsonDeserializer implements JsonDeserializer<CourseArea>
CourseArea courseArea = new CourseAreaImpl(name);
/// TODO: link races to courseArea...
/*JSONArray racesArray = Helpers.getNestedArraySafe(object, CourseAreaJsonSerializer.FIELD_RACES);
for (Object element : racesArray) {
/// TODO: add races to courseArea...
System.out.println(element.toString());
}*/
@@ -0,0 +1,39 @@
package com.sap.sailing.server.gateway.deserialization;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.server.gateway.serialization.EventJsonSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeEventSerializer;
/// TODO deserialize involved boats
public abstract class RaceCommitteeEventDeserializer implements JsonDeserializer<RaceCommitteeEvent> {
protected abstract RaceCommitteeEvent deserialize(JSONObject object, UUID id, TimePoint timePoint, int passId)
throws JsonDeserializationException;
@Override
public RaceCommitteeEvent deserialize(JSONObject object)
throws JsonDeserializationException {
// Factory handles class field and subclassing...
String id = object.get(RaceCommitteeEventSerializer.FIELD_ID).toString();
long timeStamp = (Long) object.get(RaceCommitteeEventSerializer.FIELD_TIMESTAMP);
int passId = (Integer) object.get(RaceCommitteeEventSerializer.FIELD_PASS_ID);
UUID uuid = null;
try {
uuid = UUID.fromString(id);
} catch (IllegalArgumentException iae) {
throw new JsonDeserializationException(
String.format("Field %s with %s couldn't be parsed as UUID.", EventJsonSerializer.FIELD_ID, id),
iae);
}
return deserialize(object, uuid, new MillisecondsTimePoint(timeStamp), passId);
}
}
@@ -0,0 +1,33 @@
package com.sap.sailing.server.gateway.deserialization;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeEventSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeFlagEventSerializer;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeStartTimeEventSerializer;
public class RaceCommitteeEventDeserializerFactory {
protected JsonDeserializer<RaceCommitteeEvent> flagEventDeserializer;
protected JsonDeserializer<RaceCommitteeEvent> startTimeEventDeserializer;
public RaceCommitteeEventDeserializerFactory() {
flagEventDeserializer = new RaceCommitteeFlagEventDeserializer();
startTimeEventDeserializer = new RaceCommitteeStartTimeEventDeserializer();
}
public JsonDeserializer<RaceCommitteeEvent> getDeserializer(
JSONObject object) throws JsonDeserializationException {
Object type = object.get(RaceCommitteeEventSerializer.FIELD_CLASS);
if (type.equals(RaceCommitteeFlagEventSerializer.VALUE_CLASS)) {
return flagEventDeserializer;
} else if (type.equals(RaceCommitteeStartTimeEventSerializer.VALUE_CLASS)) {
return startTimeEventDeserializer;
}
throw new JsonDeserializationException(String.format(
"There is no deserializer defined for event type %s.", type));
}
}
@@ -0,0 +1,34 @@
package com.sap.sailing.server.gateway.deserialization;
import java.util.Collections;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racecommittee.Flags;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.domain.racecommittee.impl.RaceCommitteeFlagEventImpl;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeFlagEventSerializer;
public class RaceCommitteeFlagEventDeserializer extends
RaceCommitteeEventDeserializer {
@Override
protected RaceCommitteeEvent deserialize(JSONObject object, UUID id,
TimePoint timePoint, int passId) {
Flags upperFlag = Flags.valueOf(object.get(
RaceCommitteeFlagEventSerializer.FIELD_UPPER_FLAG).toString());
Flags lowerFlag = Flags.valueOf(object.get(
RaceCommitteeFlagEventSerializer.FIELD_LOWER_FLAG).toString());
boolean isDisplayed = (Boolean) object
.get(RaceCommitteeFlagEventSerializer.FIELD_DISPLAYED);
return new RaceCommitteeFlagEventImpl(timePoint, id,
Collections.<Competitor>emptyList(), passId, upperFlag,
lowerFlag, isDisplayed);
}
}
@@ -0,0 +1,32 @@
package com.sap.sailing.server.gateway.deserialization;
import java.util.Collections;
import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.domain.racecommittee.impl.RaceCommitteeStartTimeEventImpl;
import com.sap.sailing.server.gateway.serialization.RaceCommitteeStartTimeEventSerializer;
public class RaceCommitteeStartTimeEventDeserializer extends RaceCommitteeEventDeserializer {
@Override
protected RaceCommitteeEvent deserialize(JSONObject object, UUID id,
TimePoint timePoint, int passId) {
long startTime = (Long) object.get(RaceCommitteeStartTimeEventSerializer.FIELD_START_TIME);
return new RaceCommitteeStartTimeEventImpl(
timePoint,
id,
Collections.<Competitor>emptyList(),
passId,
new MillisecondsTimePoint(startTime));
}
}
@@ -4,14 +4,19 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
public class RaceCommitteeEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
/// TODO serialize involved boats
public abstract class RaceCommitteeEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
public static final String FIELD_CLASS = "@class";
public static final String FIELD_ID = "id";
public static final String FIELD_TIMESTAMP = "timestamp";
public static final String FIELD_PASS_ID = "passId";
protected abstract String getClassFieldValue();
@Override
public JSONObject serialize(RaceCommitteeEvent object) {
JSONObject result = new JSONObject();
result.put(FIELD_CLASS, getClassFieldValue());
result.put(FIELD_ID, object.getId().toString());
result.put(FIELD_TIMESTAMP, object.getTimePoint().asMillis());
result.put(FIELD_PASS_ID, object.getPassId());
@@ -5,23 +5,26 @@ import com.sap.sailing.domain.racecommittee.RaceCommitteeFlagEvent;
import com.sap.sailing.domain.racecommittee.RaceCommitteeStartTimeEvent;
public class RaceCommitteeEventSerializerFactory {
private JsonSerializer<RaceCommitteeEvent> baseEventSerializer;
private JsonSerializer<RaceCommitteeEvent> flagEventSerializer;
private JsonSerializer<RaceCommitteeEvent> startTimeSerializer;
public RaceCommitteeEventSerializerFactory() {
this.baseEventSerializer = new RaceCommitteeEventSerializer();
flagEventSerializer = new RaceCommitteeFlagEventSerializer();
startTimeSerializer = new RaceCommitteeStartTimeEventSerializer();
}
public JsonSerializer<RaceCommitteeEvent> getSerializer(RaceCommitteeEvent event) {
public JsonSerializer<RaceCommitteeEvent> getSerializer(
RaceCommitteeEvent event) {
if (event instanceof RaceCommitteeFlagEvent) {
return new RaceCommitteeFlagEventSerializer(baseEventSerializer);
return flagEventSerializer;
} else if (event instanceof RaceCommitteeStartTimeEvent) {
return startTimeSerializer;
}
if (event instanceof RaceCommitteeStartTimeEvent) {
return new RaceCommitteeStartTimeEventSerializer(baseEventSerializer);
}
throw new UnsupportedOperationException(
String.format(
"There is no serializer defined for event type %s",
event.getClass().getName()));
throw new UnsupportedOperationException(String.format(
"There is no serializer defined for event type %s", event
.getClass().getName()));
}
}
@@ -5,30 +5,26 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.domain.racecommittee.RaceCommitteeFlagEvent;
/**
* Implements JsonSerializer<RaceCommitteeEvent> to enable a consistent interface when used
* with {@link RaceCommitteeEventSerializerFactory}, see type-safeness of generics.
*/
public class RaceCommitteeFlagEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
public class RaceCommitteeFlagEventSerializer extends RaceCommitteeEventSerializer {
public static final String VALUE_CLASS = RaceCommitteeFlagEvent.class.getSimpleName();
public static final String FIELD_UPPER_FLAG = "upperFlag";
public static final String FIELD_LOWER_FLAG = "lowerFlag";
public static final String FIELD_DISPLAYED = "displayed";
private JsonSerializer<RaceCommitteeEvent> baseSerializer;
public RaceCommitteeFlagEventSerializer(JsonSerializer<RaceCommitteeEvent> baseSerializer) {
this.baseSerializer = baseSerializer;
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceCommitteeEvent object) {
// We have to cast here, see class comment
RaceCommitteeFlagEvent flagEvent = (RaceCommitteeFlagEvent) object;
JSONObject result = baseSerializer.serialize(flagEvent);
JSONObject result = super.serialize(flagEvent);
result.put(FIELD_UPPER_FLAG, flagEvent.getUpperFlag());
result.put(FIELD_LOWER_FLAG, flagEvent.getLowerFlag());
result.put(FIELD_DISPLAYED, flagEvent.isDisplayed());
return result;
}
@@ -1,28 +1,24 @@
package com.sap.sailing.server.gateway.serialization;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.racecommittee.RaceCommitteeEvent;
import com.sap.sailing.domain.racecommittee.RaceCommitteeStartTimeEvent;
/**
* Implements JsonSerializer<RaceCommitteeEvent> to enable a consistent interface when used
* with {@link RaceCommitteeEventSerializerFactory}, see type-safeness of generics.
*/
public class RaceCommitteeStartTimeEventSerializer implements JsonSerializer<RaceCommitteeEvent> {
public class RaceCommitteeStartTimeEventSerializer extends RaceCommitteeEventSerializer {
public static final String VALUE_CLASS = RaceCommitteeStartTimeEvent.class.getSimpleName();
public static final String FIELD_START_TIME = "startTime";
private JsonSerializer<RaceCommitteeEvent> baseSerializer;
public RaceCommitteeStartTimeEventSerializer(JsonSerializer<RaceCommitteeEvent> baseSerializer) {
this.baseSerializer = baseSerializer;
@Override
protected String getClassFieldValue() {
return VALUE_CLASS;
}
@Override
public JSONObject serialize(RaceCommitteeEvent object) {
// We have to cast here, see class comment
RaceCommitteeStartTimeEvent startTimeEvent = (RaceCommitteeStartTimeEvent) object;
JSONObject result = baseSerializer.serialize(startTimeEvent);
JSONObject result = super.serialize(startTimeEvent);
result.put(FIELD_START_TIME, startTimeEvent.getStartTime().asMillis());
return result;
}
@@ -16,7 +16,7 @@
<servlet>
<servlet-name>RCRegattas</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.impl.RegattasRaceCommitteeServlet</servlet-class>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.RegattasRaceJsonExportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RCRegattas</servlet-name>
@@ -25,17 +25,16 @@
<servlet>
<servlet-name>RCEvents</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.impl.EventsRaceCommitteeServlet</servlet-class>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.EventsJsonExportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RCEvents</servlet-name>
<url-pattern>/rc/events</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RCEventTrack</servlet-name>
<servlet-class>com.sap.sailing.server.gateway.impl.EventTrackRaceCommitteeServlet</servlet-class>
<servlet-class>com.sap.sailing.server.gateway.impl.rc.EventTrackJsonExportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RCEventTrack</servlet-name>
+1
View File
@@ -39,6 +39,7 @@
<module>com.sap.sailing.server</module>
<module>com.sap.sailing.server.gateway</module>
<module>com.sap.sailing.server.gateway.serialization</module>
<module>com.sap.sailing.server.gateway.serialization.test</module>
<module>com.sap.sailing.server.replication</module>
<module>com.sap.sailing.server.replication.test</module>
<module>com.sap.sailing.www</module>
@@ -6,6 +6,8 @@
<uses-sdk
android:minSdkVersion="13"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:icon="@drawable/ic_launcher"
@@ -4,10 +4,9 @@
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
tools:context=".EventSelectionActivity" />
@@ -1,20 +1,114 @@
package com.sap.sailing.racecommittee.app;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.server.gateway.deserialization.CourseAreaJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.EventJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.VenueJsonDeserializer;
public class EventSelectionActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_selection);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_selection);
Downloader downloader = new Downloader(this);
downloader.execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_event_selection, menu);
return true;
}
public void show(String result) {
TextView tv = (TextView) findViewById(R.id.textView1);
if (result != null) {
JsonDeserializer<Event> deserializer = new EventJsonDeserializer(
new VenueJsonDeserializer(
new CourseAreaJsonDeserializer()));
JSONParser p = new JSONParser();
try {
JSONArray o = (JSONArray) p.parse(result);
for (Object e : o) {
/*JSONObject json = (JSONObject) e;
RaceCommitteeEventDeserializerFactory factory = new RaceCommitteeEventDeserializerFactory();
RaceCommitteeEvent event = factory.getDeserializer(json).deserialize(json);*/
Event event = deserializer.deserialize((JSONObject)e);
tv.setText(event.getName());
}
return;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
tv.setText("Fehler");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_event_selection, menu);
return true;
}
private class Downloader extends AsyncTask<Object, Integer, String> {
private EventSelectionActivity activity;
public Downloader(EventSelectionActivity activity) {
this.activity = activity;
}
@Override
protected String doInBackground(Object... params) {
try {
URL url = new URL("http://10.0.2.2:8888/sailingserver/rc/events");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(5000);
try {
BufferedReader r = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
return total.toString();
} finally {
urlConnection.disconnect();
}
} catch (IOException ioe) {
ioe.toString();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
activity.show(result);
}
}
}