Skip to content

Commit 6d9467b

Browse files
committed
Remove merlin-server as a dependency of orchestration-utils
1 parent 920609b commit 6d9467b

File tree

21 files changed

+110
-80
lines changed

21 files changed

+110
-80
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package gov.nasa.jpl.aerie.merlin.driver.json;
2+
3+
import gov.nasa.jpl.aerie.json.JsonParseResult;
4+
import gov.nasa.jpl.aerie.json.JsonParser;
5+
import gov.nasa.jpl.aerie.json.SchemaCache;
6+
import gov.nasa.jpl.aerie.merlin.protocol.types.RealDynamics;
7+
import gov.nasa.jpl.aerie.merlin.protocol.types.SerializedValue;
8+
import gov.nasa.jpl.aerie.types.Timestamp;
9+
10+
import javax.json.Json;
11+
import javax.json.JsonObject;
12+
import javax.json.JsonValue;
13+
import java.time.LocalDateTime;
14+
import java.time.ZoneOffset;
15+
import java.time.format.DateTimeFormatter;
16+
import java.time.format.DateTimeFormatterBuilder;
17+
import java.time.format.DateTimeParseException;
18+
import java.time.temporal.ChronoField;
19+
import java.util.Map;
20+
21+
import static gov.nasa.jpl.aerie.json.BasicParsers.doubleP;
22+
import static gov.nasa.jpl.aerie.json.BasicParsers.mapP;
23+
import static gov.nasa.jpl.aerie.json.BasicParsers.productP;
24+
import static gov.nasa.jpl.aerie.json.BasicParsers.stringP;
25+
import static gov.nasa.jpl.aerie.json.Uncurry.tuple;
26+
import static gov.nasa.jpl.aerie.json.Uncurry.untuple;
27+
import static gov.nasa.jpl.aerie.merlin.driver.json.SerializedValueJsonParser.serializedValueP;
28+
29+
public class Parsers {
30+
public static final JsonParser<Timestamp> pgTimestampP = new JsonParser<>() {
31+
private static final DateTimeFormatter format =
32+
new DateTimeFormatterBuilder()
33+
.append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
34+
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
35+
.toFormatter();
36+
37+
@Override
38+
public JsonObject getSchema(final SchemaCache anchors) {
39+
return Json
40+
.createObjectBuilder(stringP.getSchema())
41+
.add("format", "date-time")
42+
.build();
43+
}
44+
45+
@Override
46+
public JsonParseResult<Timestamp> parse(final JsonValue json) {
47+
final var result = stringP.parse(json);
48+
if (result instanceof final JsonParseResult.Success<String> s) {
49+
try {
50+
final var instant = LocalDateTime.parse(s.result(), format).atZone(ZoneOffset.UTC);
51+
return JsonParseResult.success(new Timestamp(instant));
52+
} catch (final DateTimeParseException e) {
53+
return JsonParseResult.failure("invalid timestamp format "+e);
54+
}
55+
} else if (result instanceof final JsonParseResult.Failure<?> f) {
56+
return f.cast();
57+
} else {
58+
throw new Error("Unexpected subtype of " + JsonParseResult.class + ": " + result);
59+
}
60+
}
61+
62+
@Override
63+
public JsonValue unparse(final Timestamp value) {
64+
final var s = format.format(value.toInstant().atZone(ZoneOffset.UTC));
65+
return stringP.unparse(s);
66+
}
67+
};
68+
69+
public static final JsonParser<Map<String, SerializedValue>> activityArgumentsP = mapP(serializedValueP);
70+
71+
public static final JsonParser<Map<String, SerializedValue>> simulationArgumentsP = mapP(serializedValueP);
72+
73+
public static final JsonParser<RealDynamics> realDynamicsP
74+
= productP
75+
. field("initial", doubleP)
76+
. field("rate", doubleP)
77+
. map(
78+
untuple(RealDynamics::linear),
79+
$ -> tuple($.initial, $.rate));
80+
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package gov.nasa.jpl.aerie.merlin.server.remotes.postgres;
1+
package gov.nasa.jpl.aerie.merlin.driver.timeline;
22

3-
import gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraph;
43
import gov.nasa.jpl.aerie.merlin.protocol.model.EffectTrait;
54
import org.apache.commons.lang3.tuple.Pair;
65

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package gov.nasa.jpl.aerie.merlin.server.remotes.postgres;
1+
package gov.nasa.jpl.aerie.merlin.driver.timeline;
22

3-
import gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraph;
43
import org.apache.commons.lang3.tuple.Pair;
54

65
import java.util.List;
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
package gov.nasa.jpl.aerie.merlin.server.remotes.postgres;
1+
package gov.nasa.jpl.aerie.merlin.driver.timeline;
22

3-
import gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraph;
43
import net.jqwik.api.Arbitraries;
54
import net.jqwik.api.Arbitrary;
65
import net.jqwik.api.ForAll;
76
import net.jqwik.api.Label;
87
import net.jqwik.api.Property;
98
import net.jqwik.api.Provide;
9+
import org.junit.jupiter.api.Assertions;
1010
import org.junit.jupiter.api.Test;
1111

1212
import static gov.nasa.jpl.aerie.merlin.driver.timeline.EffectExpressionDisplay.displayGraph;
13-
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.EventGraphFlattener.flatten;
14-
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.EventGraphUnflattener.unflatten;
13+
import static gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraphFlattener.flatten;
14+
import static gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraphUnflattener.unflatten;
1515
import static org.junit.jupiter.api.Assertions.assertEquals;
1616

1717
public final class EventGraphFlattenerTest {
@@ -29,19 +29,19 @@ void testFlattenLex() throws EventGraphUnflattener.InvalidTagException {
2929
EventGraph.atom("w"))));
3030

3131
final var flattenedLex = flatten(eventGraph);
32-
final var unFlattenedLex = unflatten(flattenedLex);
32+
final var unFlattenedLex = EventGraphUnflattener.unflatten(flattenedLex);
3333

3434
assertEquals("a | (x; (y | z); w)", eventGraph.toString());
3535
assertEquals(5, flattenedLex.size());
36-
assertEquals("a | (x; (y | z); w)", unFlattenedLex.toString());
36+
Assertions.assertEquals("a | (x; (y | z); w)", unFlattenedLex.toString());
3737
}
3838

3939
@Property
4040
@Label("unflatten is a left inverse of flatten")
4141
public void flattenThenUnflatten(@ForAll("fanout") final EventGraph<String> graph)
4242
throws EventGraphUnflattener.InvalidTagException
4343
{
44-
final var result = unflatten(flatten(graph));
44+
final var result = EventGraphUnflattener.unflatten(flatten(graph));
4545

4646
// Equivalent graphs have equal string representations.
4747
assertEquals(displayGraph(graph), displayGraph(result));

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/MerlinParsers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import static gov.nasa.jpl.aerie.json.BasicParsers.*;
2525
import static gov.nasa.jpl.aerie.json.Uncurry.tuple;
2626
import static gov.nasa.jpl.aerie.json.Uncurry.untuple;
27-
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.PostgresParsers.pgTimestampP;
27+
import static gov.nasa.jpl.aerie.merlin.driver.json.Parsers.pgTimestampP;
2828

2929
public abstract class MerlinParsers {
3030
private MerlinParsers() {}

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/ProfileParsers.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,18 @@
1515
import java.util.function.BiFunction;
1616

1717
import static gov.nasa.jpl.aerie.json.BasicParsers.chooseP;
18-
import static gov.nasa.jpl.aerie.json.BasicParsers.doubleP;
1918
import static gov.nasa.jpl.aerie.json.BasicParsers.listP;
2019
import static gov.nasa.jpl.aerie.json.BasicParsers.literalP;
2120
import static gov.nasa.jpl.aerie.json.BasicParsers.mapP;
2221
import static gov.nasa.jpl.aerie.json.BasicParsers.productP;
2322
import static gov.nasa.jpl.aerie.json.Uncurry.tuple;
2423
import static gov.nasa.jpl.aerie.json.Uncurry.untuple;
24+
import static gov.nasa.jpl.aerie.merlin.driver.json.Parsers.realDynamicsP;
2525
import static gov.nasa.jpl.aerie.merlin.driver.json.SerializedValueJsonParser.serializedValueP;
2626
import static gov.nasa.jpl.aerie.merlin.driver.json.ValueSchemaJsonParser.valueSchemaP;
2727
import static gov.nasa.jpl.aerie.merlin.server.http.MerlinParsers.durationP;
2828

2929
public final class ProfileParsers {
30-
public static final JsonParser<RealDynamics> realDynamicsP
31-
= productP
32-
. field("initial", doubleP)
33-
. field("rate", doubleP)
34-
. map(
35-
untuple(RealDynamics::linear),
36-
$ -> tuple($.initial, $.rate));
37-
3830
public static final JsonParser<ProfileSegment<Optional<RealDynamics>>> realProfileSegmentP
3931
= productP
4032
. field("duration", durationP)

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/CreateSimulationDatasetAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.sql.SQLException;
1111
import java.util.Map;
1212

13-
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.PostgresParsers.simulationArgumentsP;
13+
import static gov.nasa.jpl.aerie.merlin.driver.json.Parsers.simulationArgumentsP;
1414

1515
/*package local*/ final class CreateSimulationDatasetAction implements AutoCloseable {
1616
private static final @Language("SQL") String sql = """

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/GetActivityDirectivesAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.ArrayList;
99
import java.util.List;
1010

11-
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.PostgresParsers.activityArgumentsP;
11+
import static gov.nasa.jpl.aerie.merlin.driver.json.Parsers.activityArgumentsP;
1212
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.PostgresParsers.getJsonColumn;
1313

1414
/*package-local*/ final class GetActivityDirectivesAction implements AutoCloseable {

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/GetSimulationAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.util.Optional;
1111

1212
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.PostgresParsers.getJsonColumn;
13-
import static gov.nasa.jpl.aerie.merlin.server.remotes.postgres.PostgresParsers.simulationArgumentsP;
13+
import static gov.nasa.jpl.aerie.merlin.driver.json.Parsers.simulationArgumentsP;
1414

1515
/*package local*/ final class GetSimulationAction implements AutoCloseable {
1616
private static final @Language("SQL") String sql = """

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/GetSimulationEventsAction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import gov.nasa.jpl.aerie.merlin.driver.engine.EventRecord;
44
import gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraph;
5+
import gov.nasa.jpl.aerie.merlin.driver.timeline.EventGraphUnflattener;
56
import gov.nasa.jpl.aerie.merlin.protocol.types.Duration;
67
import gov.nasa.jpl.aerie.merlin.protocol.types.SerializedValue;
78
import org.apache.commons.lang3.tuple.Pair;

0 commit comments

Comments
 (0)