Skip to content

Commit

Permalink
Include effect model return value in SimulatedActivity
Browse files Browse the repository at this point in the history
  • Loading branch information
mattdailis committed Jan 18, 2022
1 parent 0b48842 commit e15884a
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public final class SimulatedActivity {
public final ActivityInstanceId parentId;
public final List<ActivityInstanceId> childIds;
public final Optional<ActivityInstanceId> directiveId;
public final SerializedValue returnValue;

public SimulatedActivity(
final String type,
Expand All @@ -24,7 +25,8 @@ public SimulatedActivity(
final Duration duration,
final ActivityInstanceId parentId,
final List<ActivityInstanceId> childIds,
final Optional<ActivityInstanceId> directiveId
final Optional<ActivityInstanceId> directiveId,
final SerializedValue returnValue
) {
this.type = type;
this.arguments = arguments;
Expand All @@ -33,6 +35,7 @@ public SimulatedActivity(
this.parentId = parentId;
this.childIds = childIds;
this.directiveId = directiveId;
this.returnValue = returnValue;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,8 @@ public SimulationResults computeResults(
e.joinOffset().minus(e.startOffset()),
activityParents.get(activityId),
activityChildren.getOrDefault(activityId, Collections.emptyList()),
(activityParents.containsKey(activityId)) ? Optional.empty() : Optional.of(activityId)
(activityParents.containsKey(activityId)) ? Optional.empty() : Optional.of(activityId),
e.returnValue().map(taskReturn -> SimulationEngine.serializeReturnValue(directive, taskReturn.returnValue())).orElse(SerializedValue.UNIT)
));
} else {
unsimulatedActivities.put(activityId, new SerializedActivity(
Expand Down Expand Up @@ -504,6 +505,14 @@ public SimulationResults computeResults(
serializedTimeline);
}

@SuppressWarnings("unchecked")
private static <DirectiveReturn, TaskReturn> SerializedValue serializeReturnValue(
final Directive<?, ?, DirectiveReturn> directive,
final TaskReturn returnValue) {
// SAFETY: Tasks always return the same type as the TaskSpecType that declares them
return directive.directiveType().serializeReturnValue((DirectiveReturn) returnValue);
}

private <EventType> Optional<SerializedValue> trySerializeEvent(Event event, MissionModel.SerializableTopic<EventType> serializableTopic) {
return event.extract(topicOfSerializableTopic(serializableTopic), serializableTopic.serializer());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,8 @@ final var record = entry.getValue();
record.duration(),
record.parentId().map(pgIdToSimId::get).orElse(null),
record.childIds().stream().map(pgIdToSimId::get).collect(Collectors.toList()),
record.directiveId()
record.directiveId(),
SerializedValue.UNIT // TODO retrieve return value from database
));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.TreeMap;

public final class StubMissionModelService implements MissionModelService {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
Expand Down Expand Up @@ -46,7 +45,7 @@ public void teardown() {
@Test
public void shouldGetActivityTypeList() throws MissionModelFacade.MissionModelContractException {
// GIVEN
final Map<String, ActivityType> expectedTypes = Map.of(
final Map<String, ActivityType> expectedTypes = Map.of(
"foo", new ActivityType(
"foo",
List.of(
Expand All @@ -67,7 +66,7 @@ public void shouldGetActivityTypeList() throws MissionModelFacade.MissionModelCo
@Test
public void shouldGetActivityType() throws MissionModelFacade.NoSuchActivityTypeException, MissionModelFacade.MissionModelContractException {
// GIVEN
final ActivityType expectedType = new ActivityType(
final ActivityType expectedType = new ActivityType(
"foo",
List.of(
new Parameter("x", ValueSchema.INT),
Expand Down

0 comments on commit e15884a

Please sign in to comment.